星星之火漸呈燎原之勢:Spark 2.0預覽版重磅來襲

zpzdmy 8年前發布 | 14K 次閱讀 Spark 分布式/云計算/大數據

【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

 

 本文由用戶 zpzdmy 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!