【51CTO.com快译】目前Databricks订阅用户已经能够获取Spark 2.0的技术预览版。性能提升、SparkSessions以及数据流处理能力将成为新版本的主要发展方向。
Apache Spark 2.0即将正式与广大用户见面。虽然目前其预览版只向Databricks云产品订阅用户开放,但考虑到Spark峰会即将于下个月召开,预计Apache Spark 2.0的全面降临也将为时不远。在1.x系列时代,Apache Spark的发展速度相当快,倾向于通过小版本更新推出各类新功能。而在***大版本升级当中,我们相信Spark 2.0将带来真正具有突破性的变化与更加关键的新功能设计。
统一DataFrames与Datasets
这里要向大家强调新版本的一大变革:在Spark 1.6中,DataFrames与Datasets相互独立,但在2.0版本中DataFrames将成为Row类Dataset。
这一调整对于大多数用户可能并不重要,但作为类结构的重要变化,大家现在可以在Java及Scala应用当中将DataFrames作为compile-time类加以使用,并在DataFrames与Datasets中同时使用类方法(map,filter)与非类方法(select,groupBy)。
经过改进的全新SparkSession
在使用Spark时,我们往往会遇到这样一个问题:“我们已经有了SparkContext,SOLContext与HiveContext,那么什么情况下应该使用哪一种?”Spark 2.0引入了新的SparkSession对象,旨在减少这种困扰并提供一致性入口点。以下为SparkSession示例:
val sparkSession = SparkSession.builder .master("local") .appName("my-spark-app") .config("spark.some.config.option", "config-value") .getOrCreate()
如果大家使用REPL,那么设置Spark的过程中会自动生成SparkSession。希望读取DataFrame中的数据?方式如下:
spark.read. json ("JSON URL")
另外一大标志性调整,就是不再强调使用Spark弹性分布式数据集(简称RDD)的初始抽象,而是在底层SparkContext利用spark.sparkContext创建RDD。请注意,RDD仍然存在,只是***DataFrame模式的作法更为普遍。
对于已经全面采用SparkSOL并发现这款查询引擎有时候难以运用的朋友,Spark 2.0也带来了新的解决办法。新版本提供另一款SQL解析引擎,其能够支持子查询及大量SQL 2003功能(但并未宣布支持全部功能),这应该能让传统SQL应用更好地被移植到Spark当中。
Structured Streaming
Structured Streaming可能是此次发布的最令人激动的新功能。总体来讲,Apache Spark 2.0带来了新的流数据处理模式,由以往的RDD批处理机制转向无边界DataFrame概念。
这将使得某些场景下的数据流收集与更新更易于实现——同时允许时间列窗口存在于DataFrame本身而非立足于事件发生之时。作为令Spark Streaming长久以来逊于Apache Flink与Apache Beam的软肋所在,此次调整应该能让更多朋友乐于升级至2.0版本。
性能提升
Spark 2.0版本在运行速度与智能化水平方面下了一番功夫。Tungsten引擎已经采用源自编译器的字节码优化机制,旨在减少函数调用并保持处理过程中的CPU占用率。
Parquet支持能力也得到改进,某些用例下运行速度达到过去的十倍。另外,初次出现于Spark 1.6中且面向Java或Kryo的Encoder也得到系列化,得以继续在集群中降低内存使用量并提升数据吞吐能力。
ML/GraphX
如果大家关注Spark在机器学习与图形方面的改进,那么恐怕会有些失望。目前机器学习方面的spark.mllib库开发工作已经中止,大家需要转而在spar.ml中使用基于DataFrame的API。
Spark 2.0继续面向所有支持语言实现模型与机器学习流程,同时进一步为不熟悉Java或者 Scala的数据科学家提供面向Python及R语言的MLLib API。
在GraphX方面,Spark 2.0对其似乎不太重视。这里我建议大家关注GraphFrames。目前其属于主发行版之外的独立版本,以DataFrames为基础构建图形处理框架,且能够支持Java、Scala、Python与R语言。相信其将在Spark 3.0时代被纳入主版本当中。
一代新人换旧人
新版本除了引入新特性之外,也移除了部分可能造成问题的旧元素:
- 不再支持Hadoop 2.2及更早版本
- 移除Bagel图形库(即GraphX的前身)
另外需要注意的是,大家应当逐步放弃当前在SparkSQL中人气极高的registerTempTable,转而使用createTempView,其输出特点就是强调用户不再利用API调用使用数据。另外,预计新版本中还将有部分日志通知机制被弃用。
是否需要尽快升级?
必须承认,考虑到可观的性能提升与期待已久的Spark Streaming新功能,在未来几周内尽快升级到Apache Spark 2.0通用版本确实很有吸引力。
不过我之前遇到过匆忙升级而导致的麻烦,因此我个人打算等段时间,看看尝试在测试集群上运行新版本的朋友们是否会发现某些bug。
无论如何,Apache Spark 2.0带来了众多值得期待的元素,因此在确定一切安全后,升级无疑势在必行!
原文链接:Spark 2.0 prepares to catch fire
【51CTO.com独家译稿,合作站点转载请注明来源】