Spark Release 2.0.0發版概序
Spark2.0在2016年7月26日發布,因為工作中經常用到,所以對它關注比較多,正好今天”提前”下班,所以抽空翻譯一下spark2.0發版概述,簡單的介紹一下spark2.0的新特性和新變化。好吧,現在就讓村長帶領大家一起走進spark2.0的神秘殿堂。同時也希望更多的人參入進來,知識因為共享才變的有意義和價值。
譯者注:因為由於時間原因,導致翻譯不及時,信息有一定的滯後,在此村長深表歉意。同時也希望更多優秀人才參入進來,讓最新最優秀的文章第一時間與有夢想的人分享,一起進步,共同成長。
Spark 2.0.0是第一個在2.x線上發行的版本. 主要的更新是在API的可用性,SQL2003的支持,性能的提升,結構化流,R UDF的支持還用可操作性的提升. 另外, 這個發行版本包括超過2500個補丁來隻300個貢獻者.
可以通過 downloads 來下載spark2.0. 你也可以訪問 detailed changes來了解細節的改變. 我們向你展示每個模塊的細節變化.
API穩定性
Spark 2.0.0是spark 2.x產品線上第一個發行版. Spark保證它所有2.x發行版非實驗性API的穩定性. 雖然APIs和1.x有很多相似之處, 同時Spark 2.0.0也有很多大的變化. 可以通過這個 網站來 查看API的移除,修改和過時的信息.
核心和Spark SQL
程序 APIs
在Spark2.0最大的變化是最新更新的APIs:
- 統一了DataFrame 和Dataset: 在Scala 和Java中, DataFrame 和Dataset做了統一, 也就是說. DataFrame僅僅是 Dataset行的類型別名. 在 Python 和R中, 由於缺乏類型安全, DataFrame僅僅是主要的程序接口.
- SparkSession: 一個新的入口點代替老的SQLContext 和HiveContext 對於 DataFrame 和Dataset APIs. SQLContext 和HiveContext 繼續保留為向後兼容.
- 一個新的, 最新型的配置API對於SparkSession
- 更簡單的, 性能更好的累加器(accumulator) API
- 一個新的, 提升了Datasets聚合API的性能
SQL
Spark 2.0大體上實現了對SQL2003的函數支持. Spark SQL現在能夠運行所有的 99 TPC-DS 查詢. 更多的詳細情況如下:
- Spark自帶的SQL解析器不僅僅支持 ANSI-SQL標準同時也支持 Hive QL
- 啟動了本地的DDL 命令
- 子查詢, 包括
- 不相關的標量子查詢
- 相關的標量子查詢
- 基於NOT IN的子查詢 (在 WHERE/HAVING 語句)
- 基於IN 語句的子查詢 (在 WHERE/HAVING 語句)
- 基於(NOT) EXISTS 語句的子查詢 (在 WHERE/HAVING 語句)
- 標準化View 的支持
另外,當構建沒有Hive支持的時候, Spark SQL也包括幾乎所有的函數功能當構建Hive支持的時候, 當連接Hive異常, Hive UDFs, 和腳本的轉換.
新特性
- 本地CSV 數據源, 構建在 Databricks’ spark-csv module
- 關閉緩存和運行期間的堆內存的管理
- Hive的桶表支持
- 使用sketches近似統計功能, 包括quantile, Bloom filter, and count-min sketch.
性能和執行時間
- 實質性的性能提升(2 – 10X) 通過對SQL和DataFrames的操作是通過一個新的技術,我們稱之為整個階段的代碼生成.
- 提升了Parquet瀏覽速度通過吞吐量的向量化
- 提升了ORC 性能
- 化了在 Catalyst查詢選項的通用的工作負載
- 通過繼承window本地函數來提升在window上運行的性能
- 對於本地數據源的自動文件合並
MLlib
MLlib API是以DataFrame為基礎的. 以RDD為API進入了過度模式. 通過查詢MLlib 向導來了解更多細節
新特征
- ML 持續更新: 以DataFrames為基礎的 API 提供了接近完全的支持機器模型的保存和加載還有管道操作通過Scala, Java, Python, 和R. 通過這個博客理解更多細節. (SPARK-6725, SPARK-11939, SPARK-14311)
- MLlib在R的改進: SparkR現在提供了不同的線性模型的 MLlib APIs, naive Bayes, k-means clustering, 和survival regression. 看這篇文章能學習更多.
- Python: PySpark現在提供了 MLlib 算法, 包括LDA, Gaussian Mixture Model, Generalized Linear Regression, and more.scaling
- 算法增加了DataFrames為基礎的 API: Bisecting K-Means clustering, Gaussian Mixture Model, MaxAbsScaler feature transformer.
這次羅列了很多新的特征.
速度/換算
向量和矩陣保存在DataFrames中使其更高效的序列化, 使其reduce 調用MLlib 算法更加高效. (SPARK-14850)
SparkR
SparkR在spark2.0中最大的提升就是添加了用戶自定義函數的功能. 用戶可以定義以下三種函數: dapply, gapply, 和 lapply. 前兩個可以用於使用dapply和gapply來執行基於分區的UDF, 例如. 被分區的學習模型. 後者可用於執行超參數調整.
另外,也增加如下新特性:
- 提高了機器學習在R語言的覆蓋麵, 其中包括 naive Bayes, k-means 集群, 和 survival regression.
- 線性模型支持更多的成員鏈接函數.
- 保存和加載所有機器學習模型.
- 更多的DataFrame 功能: Window 函數API, 支持JDBC,CSV,SparkSession讀寫功能
流
Spark 2.0也發布了實驗性的結構化流處理, 構建在Spark SQL和 Catalyst優化器之上的API. 結構化的流可以使用戶很容易的通過DataFrame/Dataset 一樣API來操作數據源和接收源就像靜態數據源一樣, 利用Catalyst優化器自動增量化查詢計劃
對於 DStream API, 最突出的更新是支持Kafka 0.10.
依賴和包的改進
在最新的Spark中對spark的操作和包裝進行了改進:
- Spark 2.0 n不在要求把所有的依賴打包到一個jar中.
- Akka 依賴被移除, 用戶根據自己的需求適配任何版本的Akka.
- Kryo版本適配到3.0.
- 默認的采用 Scala 2.11編譯,二而不是Scala 2.10.
移除,特征改變,過時
移除的
以下的特性在Spark2.0已經刪除:
- Bagel
- 不在支持Hadoop2.1和更早版本
- 配置關閉序列化的選項
- HTTPBroadcast
- 基於TTL的元數據清理
- 半私有類org.apache.spark.Logging。 我們建議您直接使用slf4j.
- SparkContext.metricsSystem
- 與Tachyon麵向塊集成(歸檔文件係統集成)
- Spark 1.x中棄用的方法
- 返回RDD的Python DataFrame方法(map,flatMap,mapPartitions等)。 它們在dataframe.rdd字段中仍然可用。 例如dataframe.rdd.map.
- 不常用的流式連接器,包括Twitter,Akka,MQTT,ZeroMQ
- 基於哈希的shuffle管理
- 曆史服務器從master中獨立
- 對於Java和Scala,DataFrame不再作為類存在。 因此,數據源將需要更新.
- Spark EC2腳本已經完全轉移到由UC Berkeley AMPLab托管的外部存儲庫
行為變化
以下更改可能需要更新依賴於舊行為或API的現有應用程序.
- 默認版本現在使用Scala 2.11而不是Scala 2.10.
- 在SQL中,float數據被解析為十進製數據類型,而不是double類型.
- Kryo版本到3.0.
- Java RDD的flatMap和mapPartitions函數用於要求返回Java 迭代器的函數。 它們已被更新為需要返回Java迭代器的函數,因此這些函數不需要實現所有數據.
- Java RDD的countByKey和countAprroxDistinctByKey現在將映射從K返回到java.lang.Long,而不是java.lang.Object.
- 寫入Parquet文件時,默認情況下不會寫入摘要文件。 要重新啟用它,用戶必須將“parquet.enable.summary-metadata”設置為true.
- 基於DataFrame的API(spark.ml)現在取決於spark.ml.linalg中的局部線性代數,而不是spark.mllib.linalg。 這將刪除spark.mllib上的spark.ml的最後一個依賴項。 (SPARK-13944)有關API更改的完整列表,請參閱MLlib遷移指南.
有關更完整的列表,請參閱SPARK-11806以了解棄用和刪除.
過時的
下麵的特性在Spark2.0中過時了, 可能在未來的Spark 2.x版本中移除:
- 對Mesos的Fine-grained模式的支持
- 對Java7的支持
- 對Python 2.6的支持
已知的問題
- Lead 和Lag’s 的行為改變忽視了關於null的問題(1.6’s 行為). In 2.0.1, 這個bug將在 2.0.1 中被更改(SPARK-16721).
- Lead 和Lag函數使用常量輸入值並沒有返回默認的值當偏移量不存在時 (SPARK-16633).
工作人員
譯者注: 雖不認識他們,不知道他們是誰,但是感謝他們的辛勤付出,為開源社區提供了這麼好的分布式框架,請我們瞄一下他們的名字以示尊重。
Last but not least, this release would not have been possible without the following contributors: Aaron Tokhy, Abhinav Gupta, Abou Haydar Elias, Adam Budde, Adam Roberts, Ahmed Kamal, Ahmed Mahran, Alex Bozarth, Alexander Ulanov, Allen, Anatoliy Plastinin, Andrew, Andrew Ash, Andrew Or, Andrew Ray, Anthony Truchet, Antonio Murgia, Arun Allamsetty, Azeem Jiva, Ben McCann, BenFradet, Bertrand Bossy, Bill Chambers, Bjorn Jonsson, Bo Meng, Brandon Bradley, Brian O’Neill, BrianLondon, Bryan Cutler, Burak Köse, Burak Yavuz, Carson Wang, Cazen, Charles Allen, Cheng Hao, Cheng Lian, Claes Redestad, CodingCat, DB Tsai, DLucky, Daniel Jalova, Daoyuan Wang, Darek Blasiak, David Tolpin, Davies Liu, Devaraj K, Dhruve Ashar, Dilip Biswal, Dmitry Erastov, Dominik Jastrzębski, Dongjoon Hyun, Earthson Lu, Egor Pakhomov, Ehsan M.Kermani, Ergin Seyfe, Eric Liang, Ernest, Felix Cheung, Feynman Liang, Fokko Driesprong, Franklyn D’souza, François Garillot, Gabriele Nizzoli, Gary King, GayathriMurali, Gio Borje, Grace, Grzegorz Chilkiewicz, Guillaume Poulin, Gábor Lipták, Hemant Bhanawat, Herman van Hovell, Herman van Hövell tot Westerflier, Hiroshi Inoue, Holden Karau, Hossein, Huaxin Gao, Imran Rashid, Imran Younus, Ioana Delaney, Iulian Dragos, Jacek Laskowski, Jacek Lewandowski, Jakob Odersky, James Lohse, James Thomas, Jason Lee, Jason Moore, Jason White, Jean-Baptiste Onofré, Jeff L, Jeff Zhang, Jeremy Derr, JeremyNixon, Jo Voordeckers, Joan, Jon Maurer, Joseph K. Bradley, Josh Howes, Josh Rosen, Joshi, Juarez Bochi, Julien Baley, Junyang, Junyang Qian, Jurriaan Pruis, Kai Jiang, KaiXinXiaoLei, Kay Ousterhout, Kazuaki Ishizaki, Kevin Yu, Koert Kuipers, Kousuke Saruta, Koyo Yoshida, Krishna Kalyan, Lewuathe, Liang-Chi Hsieh, Lianhui Wang, Lin Zhao, Lining Sun, Liu Xiang, Liwei Lin, Luc Bourlier, Luciano Resende, Lukasz, Maciej Brynski, Malte, Marcelo Vanzin, Marcin Tustin, Mark Grover, Martin Menestret, Masayoshi TSUZUKI, Matei Zaharia, Matthew Wise, Michael Allman, Michael Armbrust, Michael Gummelt, Michel Lemay, Mike Dusenberry, Mortada Mehyar, Nakul Jindal, Nam Pham, Narine Kokhlikyan, NarineK, Neelesh Srinivas Salian, Nezih Yigitbasi, Nicholas Chammas, Nicholas Tietz, Nick Pentreath, Nilanjan Raychaudhuri, Nirman Narang, Nishkam Ravi, Nong, Nong Li, Oleg Danilov, Oliver Pierson, Oscar D. Lara Yejas, Parth Brahmbhatt, Patrick Wendell, Pete Robbins, Peter Ableda, Prajwal Tuladhar, Prashant Sharma, Pravin Gadakh, QiangCai, Qifan Pu, Raafat Akkad, Rahul Tanwani, Rajesh Balamohan, Rekha Joshi, Reynold Xin, Richard W. Eggert II, Robert Dodier, Robert Kruszewski, Robin East, Ruifeng Zheng, Ryan Blue, Sameer Agarwal, Sandeep Singh, Sanket, Sasaki Toru, Sean Owen, Sean Zhong, Sebastien Rainville, Sebastián Ramírez, Sela, Sergiusz Urbaniak, Shally Sangal, Sheamus K. Parkes, Shivaram Venkataraman, Shixiong Zhu, Shuai Lin, Shubhanshu Mishra, Sital Kedia, Stavros Kontopoulos, Stephan Kessler, Steve Loughran, Subhobrata Dey, Subroto Sanyal, Sumedh Mungee, Sun Rui, Sunitha Kambhampati, Takahashi Hiroshi, Takeshi YAMAMURO, Takuya Kuwahara, Takuya UESHIN, Tathagata Das, Tejas Patil, Terence Yim, Thomas Graves, Timothy Chen, Timothy Hunter, Tom Graves, Tom Magrino, Tommy YU, Travis Crawford, Tristan Reid, Victor Chima, Villu Ruusmann, Wayne Song, WeichenXu, Weiqing Yang, Wenchen Fan, Wesley Tang, Wilson Wu, Wojciech Jurczyk, Xiangrui Meng, Xin Ren, Xin Wu, Xinh Huynh, Xiu Guo, Xusen Yin, Yadong Qi, Yanbo Liang, Yash Datta, Yin Huai, Yonathan Randolph, Yong Gang Cao, Yong Tang, Yu ISHIKAWA, Yucai Yu, Yuhao Yang, Yury Liavitski, Zhang, Liye, Zheng RuiFeng, Zheng Tan, aokolnychyi, bomeng, catapan, cody koeninger, dding3, depend, echo2mei, felixcheung, frreiss, fwang1, gatorsmile, guoxu1231, huangzhaowei, hushan, hyukjinkwon, jayadevanmurali, jeanlyn, jerryshao, jliwork, junhao, kaklakariada, krishnakalyan3, lfzCarlosC, lgieron, mark800, mathieu longtin, mcheah, meiyoula, movelikeriver, mwws, nfraison, oraviv, peng.zhang, petermaxlee, pierre-borckmans, poolis, prabs, proflin, pshearer, rotems, sachin aggarwal, sandy, scwf, seddonm1, sethah, sharkd, shijinkui, sureshthalamati, tedyu, thomastechs, tmnd1991, vijaykiran, wangfei, wangyang, wm624@hotmail.com, wujian, xin Wu, yzhou2001, zero323, zhonghaihua, zhuol, zlpmichelle, Örjan Lundberg, Yang Bo.
最後更新:2017-05-18 11:01:47