星星之火渐呈燎原之势:Spark 2.0预览版重磅来袭

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