星星之火漸呈燎原之勢:Spark 2.0預覽版重磅來襲
【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
來自: http://developer.51cto.com/art/201605/511989.htm