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.