Spark 1.4:SparkR發布,鎢絲計劃鋒芒初露
6月11日(美國時間),Spark 1.4版本正式發布,在Spark Core、Spark Streaming、Spark SQL(DataFrame)、Spark ML/MLlib等升級之外,新版本更加入了數據科學家們望眼欲穿的SparkR組件。長話短說,下面一起看Databricks Blog上關于SparkR的介紹,以及七牛技術總監陳超在ChinaScala微信號上對組件升級的總結。
SparkR簡介(Announcing SparkR: R on Spark via Databircks Blog by Shivaram Venkataraman)
項目歷史
SparkR 源于AMPLab,是將R易用性和Spark擴展性整合的一個探索。在這個前提之下,SparkR開發者預覽版最早在2014年1月開源。隨后的一年,SparkR在AMPLab得到了飛速發展,而在許多貢獻者的努力下,SparkR在性能和可用性上得到了顯著提升。最近,SparkR被合并到 Spark項目,并在1.4版本中作為alpha組件發布。
SparkR DataFrames
在Spark 1.4中,SparkR 的核心組件是SparkR DataFrames——在Spark上實現的一個分布式data frame。data frame 是R中處理數據的基本數據結構,而當下這個概念已經通過函數庫(比如Pandas)擴展到其它所有語言。而像dplyr這樣的項目更去除了基于data frames數據操作任務中存在的大量復雜性。在SparkR DataFrames中,一個類似dplyr和原生R data frame的API被發布,同時它還可以依托Spark,對大型數據集進行分布式計算。
下面例子將展示SparkR DataFrames API的一些特性。(你可以在這里看到完整示例)
更全面的 DataFrames介紹參見SparkR編程指南。
SparkR整合的好處
在更易用的API之外,SparkR從Spark的緊密整合中繼承了諸多好處。這些包括:
- Data Sources API:通過Spark SQL的數據源API,API SparkR可以從包括Hive tables、JSON files、Parquet files等各種來源中讀取數據。
- Data Frame優化:SparkR DataFrames還繼承了計算引擎中的大量優化,比如代碼生成和內存管理。例如,下面圖表是單機R、Python和Scala在1000萬整數對上的group-by聚合操作運行時性能對比(使用了相同的數據集,參考這里)。如圖所示,在計算引擎中優化可以使SparkR的性能表現類似于Scala和Python。
- 可便捷地擴展到多核和多主機:在SparkR DataFrames 上執行的操作會被自動分配到Spark群集中所有可用的內核和機器上。因此,在配備了數千主機后,SparkR DataFrames
可以被用于TB數據的處理。
</ul>
在未來的版本中,許多功能已經被計劃添加到SparkR:其中包括高級別的機器學習算法支持,并將SparkR DataFrames 打造成Spark密不可分的組件。
Spark Core、Spark Streaming、Spark SQL、Spark ML/MLlib在Spark 1.4中的提升(Spark 1.4 新特性概述 by 陳超)
Spark Core
現在大家最關心什么?無疑就是性能和運維!什么最影響性能?shuffle首當其沖!什么又是運維第一要務?必須是監控呀(就先不扯alert了)!1.4 在這兩點都做足了功夫。 1.4中,Spark為應用提供了REST API來獲取各種信息(jobs / stages / tasks / storage info),使用這個API搭建個自己的監控簡直是分分鐘的事情,不止于此,DAG現在也能可視化了,不清楚Spark的DAGScheduler怎么運作的同學,現在也能非常輕易地知道DAG細節了。再來說說shuffle,大家都知道,從1.2開始sort-based shuffle已經成為默認的shuffe策略了,基于sort的shuffle不需要同時打開很多文件,并且也能減少中間文件的生成,但是帶來的問題是在JVM的heap中留了大量的java對象,1.4開始,shuffle的map階段的輸出會被序列化,這會帶來兩個好處:1、spill到磁盤上的文件變小了 2、GC效率大增,有人又會說,序列化反序列化會產生額外的cpu開銷啊,事實上,shuffle過程往往都是IO密集型的操作,帶來的這點cpu開銷,是可以接受。
大家期待的鎢絲計劃(Project Tungsten)也在1.4初露鋒芒,引入了新的shuffle manager “UnsafeShuffleManager”,用以提供緩存友好的排序算法,及其它一些改進,目的是降低shuffle過程中的內存使用量,并且加速排序過程。鎢絲計劃必定會成為接下來兩個版本(1.5,1.6)重點關注的地方。
Spark Streaming
Streaming 在這個版本中增加了新的UI,簡直是Streaming用戶的福音,各種詳細信息盡收眼底。話說Spark中國峰會上,TD當時坐我旁邊review這部分的code,悄悄對說我”this is awesome”。對了,這部分主要是由朱詩雄做的,雖然詩雄在峰會上放了我鴿子,但必須感謝他給我們帶來了這么好的特性!另外此版本也支持了 0.8.2.x的Kafka版本。
Spark SQL(DataFrame)
支持老牌的 ORCFile了,雖然比Parquet年輕,但是人家bug少啊 : ) 1.4提供了類似于Hive中的window function,還是比較實用的。本次對于join的優化還是比較給力的,特別是針對那種比較大的join,大家可以體會下。JDBC Server的用戶肯定非常開心了,因為終于有UI可以看了呀。
Spark ML/MLlib
ML pipelines從alpha畢業了,大家對于ML pipelines的熱情還真的蠻高的啊。我對Personalized PageRank with GraphX倒是蠻感興趣的,與之相關的是recommendAll in matrix factorization model。事實上大多數公司還是會在Spark上實現自己的算法。
</div> 來自:http://geek.csdn.net/news/detail/34888