星星之火漸呈燎原之勢:Spark 2.0預(yù)覽版重磅來襲
譯文【51CTO.com快譯】目前Databricks訂閱用戶已經(jīng)能夠獲取Spark 2.0的技術(shù)預(yù)覽版。性能提升、SparkSessions以及數(shù)據(jù)流處理能力將成為新版本的主要發(fā)展方向。
Apache Spark 2.0即將正式與廣大用戶見面。雖然目前其預(yù)覽版只向Databricks云產(chǎn)品訂閱用戶開放,但考慮到Spark峰會即將于下個月召開,預(yù)計Apache Spark 2.0的全面降臨也將為時不遠。在1.x系列時代,Apache Spark的發(fā)展速度相當(dāng)快,傾向于通過小版本更新推出各類新功能。而在***大版本升級當(dāng)中,我們相信Spark 2.0將帶來真正具有突破性的變化與更加關(guān)鍵的新功能設(shè)計。
統(tǒng)一DataFrames與Datasets
這里要向大家強調(diào)新版本的一大變革:在Spark 1.6中,DataFrames與Datasets相互獨立,但在2.0版本中DataFrames將成為Row類Dataset。
這一調(diào)整對于大多數(shù)用戶可能并不重要,但作為類結(jié)構(gòu)的重要變化,大家現(xiàn)在可以在Java及Scala應(yīng)用當(dāng)中將DataFrames作為compile-time類加以使用,并在DataFrames與Datasets中同時使用類方法(map,filter)與非類方法(select,groupBy)。
經(jīng)過改進的全新SparkSession
在使用Spark時,我們往往會遇到這樣一個問題:“我們已經(jīng)有了SparkContext,SOLContext與HiveContext,那么什么情況下應(yīng)該使用哪一種?”Spark 2.0引入了新的SparkSession對象,旨在減少這種困擾并提供一致性入口點。以下為SparkSession示例:
val sparkSession = SparkSession.builder .master("local") .appName("my-spark-app") .config("spark.some.config.option", "config-value") .getOrCreate()
如果大家使用REPL,那么設(shè)置Spark的過程中會自動生成SparkSession。希望讀取DataFrame中的數(shù)據(jù)?方式如下:
spark.read. json ("JSON URL")
另外一大標(biāo)志性調(diào)整,就是不再強調(diào)使用Spark彈性分布式數(shù)據(jù)集(簡稱RDD)的初始抽象,而是在底層SparkContext利用spark.sparkContext創(chuàng)建RDD。請注意,RDD仍然存在,只是***DataFrame模式的作法更為普遍。
對于已經(jīng)全面采用SparkSOL并發(fā)現(xiàn)這款查詢引擎有時候難以運用的朋友,Spark 2.0也帶來了新的解決辦法。新版本提供另一款SQL解析引擎,其能夠支持子查詢及大量SQL 2003功能(但并未宣布支持全部功能),這應(yīng)該能讓傳統(tǒng)SQL應(yīng)用更好地被移植到Spark當(dāng)中。
Structured Streaming
Structured Streaming可能是此次發(fā)布的最令人激動的新功能。總體來講,Apache Spark 2.0帶來了新的流數(shù)據(jù)處理模式,由以往的RDD批處理機制轉(zhuǎn)向無邊界DataFrame概念。
這將使得某些場景下的數(shù)據(jù)流收集與更新更易于實現(xiàn)——同時允許時間列窗口存在于DataFrame本身而非立足于事件發(fā)生之時。作為令Spark Streaming長久以來遜于Apache Flink與Apache Beam的軟肋所在,此次調(diào)整應(yīng)該能讓更多朋友樂于升級至2.0版本。
性能提升
Spark 2.0版本在運行速度與智能化水平方面下了一番功夫。Tungsten引擎已經(jīng)采用源自編譯器的字節(jié)碼優(yōu)化機制,旨在減少函數(shù)調(diào)用并保持處理過程中的CPU占用率。
Parquet支持能力也得到改進,某些用例下運行速度達到過去的十倍。另外,初次出現(xiàn)于Spark 1.6中且面向Java或Kryo的Encoder也得到系列化,得以繼續(xù)在集群中降低內(nèi)存使用量并提升數(shù)據(jù)吞吐能力。
ML/GraphX
如果大家關(guān)注Spark在機器學(xué)習(xí)與圖形方面的改進,那么恐怕會有些失望。目前機器學(xué)習(xí)方面的spark.mllib庫開發(fā)工作已經(jīng)中止,大家需要轉(zhuǎn)而在spar.ml中使用基于DataFrame的API。
Spark 2.0繼續(xù)面向所有支持語言實現(xiàn)模型與機器學(xué)習(xí)流程,同時進一步為不熟悉Java或者 Scala的數(shù)據(jù)科學(xué)家提供面向Python及R語言的MLLib API。
在GraphX方面,Spark 2.0對其似乎不太重視。這里我建議大家關(guān)注GraphFrames。目前其屬于主發(fā)行版之外的獨立版本,以DataFrames為基礎(chǔ)構(gòu)建圖形處理框架,且能夠支持Java、Scala、Python與R語言。相信其將在Spark 3.0時代被納入主版本當(dāng)中。
一代新人換舊人
新版本除了引入新特性之外,也移除了部分可能造成問題的舊元素:
- 不再支持Hadoop 2.2及更早版本
- 移除Bagel圖形庫(即GraphX的前身)
另外需要注意的是,大家應(yīng)當(dāng)逐步放棄當(dāng)前在SparkSQL中人氣極高的registerTempTable,轉(zhuǎn)而使用createTempView,其輸出特點就是強調(diào)用戶不再利用API調(diào)用使用數(shù)據(jù)。另外,預(yù)計新版本中還將有部分日志通知機制被棄用。
是否需要盡快升級?
必須承認,考慮到可觀的性能提升與期待已久的Spark Streaming新功能,在未來幾周內(nèi)盡快升級到Apache Spark 2.0通用版本確實很有吸引力。
不過我之前遇到過匆忙升級而導(dǎo)致的麻煩,因此我個人打算等段時間,看看嘗試在測試集群上運行新版本的朋友們是否會發(fā)現(xiàn)某些bug。
無論如何,Apache Spark 2.0帶來了眾多值得期待的元素,因此在確定一切安全后,升級無疑勢在必行!
原文鏈接:Spark 2.0 prepares to catch fire
【51CTO.com獨家譯稿,合作站點轉(zhuǎn)載請注明來源】