Spark 2.0.0 发布

Apache Spark 2.0.0 是 2.x 系列中的第一个版本。 主要更新包括 API 可用性、SQL 2003 支持、性能改进、结构化流处理、R UDF 支持以及操作改进。 此外,此版本还包含来自 300 多位贡献者的 2500 多个补丁。

要下载 Apache Spark 2.0.0,请访问下载页面。 您可以查阅 JIRA 了解详细更改。 我们在这里整理了一份高级别更改列表,按主要模块分组。

API 稳定性

Apache Spark 2.0.0 是 2.X 主要系列中的第一个版本。 Spark 保证其非实验性 API 对于所有 2.X 版本的稳定性。 尽管 API 与 1.X 大致相似,但 Spark 2.0.0 确实具有 API 破坏性更改。 它们记录在移除、行为变更和弃用部分。

Core 和 Spark SQL

编程 API

Spark 2.0 中最大的变化之一是新的更新的 API

  • 统一 DataFrame 和 Dataset:在 Scala 和 Java 中,DataFrame 和 Dataset 已统一,即 DataFrame 只是 Row 的 Dataset 的类型别名。 在 Python 和 R 中,鉴于缺乏类型安全性,DataFrame 是主要的编程接口。
  • SparkSession:新的入口点,取代了旧的 SQLContext 和 HiveContext,用于 DataFrame 和 Dataset API。 SQLContext 和 HiveContext 为了向后兼容而保留。
  • SparkSession 的新的、简化的配置 API
  • 更简单、性能更高的累加器 API
  • 用于 Dataset 中类型化聚合的新的、改进的 Aggregator API

SQL

Spark 2.0 通过 SQL2003 支持大大提高了 SQL 功能。 Spark SQL 现在可以运行所有 99 个 TPC-DS 查询。 更突出的是,我们改进了

  • 支持 ANSI-SQL 和 Hive QL 的原生 SQL 解析器
  • 原生 DDL 命令实现
  • 子查询支持,包括
    • 非相关标量子查询
    • 相关标量子查询
    • NOT IN 谓词子查询(在 WHERE/HAVING 子句中)
    • IN 谓词子查询(在 WHERE/HAVING 子句中)
    • (NOT) EXISTS 谓词子查询(在 WHERE/HAVING 子句中)
  • 视图规范化支持

此外,在不使用 Hive 支持进行构建时,除了 Hive 连接、Hive UDF 和脚本转换之外,Spark SQL 应该具有几乎所有使用 Hive 支持进行构建时的功能。

新特性

  • 基于 Databricks spark-csv 模块的原生 CSV 数据源
  • 用于缓存和运行时执行的堆外内存管理
  • Hive 样式的分桶支持
  • 使用草图的近似摘要统计信息,包括近似分位数、布隆过滤器和 count-min 草图。

性能和运行时

  • 通过一种称为整体阶段代码生成的新技术,SQL 和 DataFrames 中常见运算符的性能显着提高(2 - 10 倍)。
  • 通过向量化改进了 Parquet 扫描吞吐量
  • 改进了 ORC 性能
  • Catalyst 查询优化器针对常见工作负载的许多改进
  • 通过所有窗口函数的本机实现提高了窗口函数性能
  • 本机数据源的自动文件合并

MLlib

基于 DataFrame 的 API 现在是主要的 API。 基于 RDD 的 API 即将进入维护模式。 有关详细信息,请参阅 MLlib 指南

新特性

  • ML 持久性:基于 DataFrames 的 API 提供了对在 Scala、Java、Python 和 R 中保存和加载 ML 模型和 Pipeline 的近乎完整的支持。请参阅这篇 博客文章 以及以下 JIRA 了解详细信息:SPARK-6725、SPARK-11939、SPARK-14311。
  • R 中的 MLlib:SparkR 现在提供用于广义线性模型、朴素贝叶斯、k 均值聚类和生存回归的 MLlib API。 有关更多信息,请参阅 本次演讲
  • Python:PySpark 现在提供了更多的 MLlib 算法,包括 LDA、高斯混合模型、广义线性回归等。
  • 添加到基于 DataFrames 的 API 的算法:二分 K 均值聚类、高斯混合模型、MaxAbsScaler 特征转换器。

本次演讲列出了许多这些新特性。

速度/扩展

存储在 DataFrames 中的向量和矩阵现在使用更高效的序列化,从而减少了调用 MLlib 算法的开销。 (SPARK-14850)

SparkR

Spark 2.0 中 SparkR 的最大改进是用户定义的函数。 有三个用户定义的函数:dapply、gapply 和 lapply。 前两个可用于使用 dapply 和 gapply 执行基于分区的 UDF,例如分区模型学习。 后者可用于进行超参数调整。

此外,还有许多新特性

  • 改进了 R 中机器学习的算法覆盖范围,包括朴素贝叶斯、k 均值聚类和生存回归。
  • 广义线性模型支持更多系列和链接函数。
  • 保存和加载所有 ML 模型。
  • 更多 DataFrame 功能:窗口函数 API、JDBC、CSV、SparkSession 的读取器、写入器支持

流处理

Spark 2.0 发布了结构化流处理的初始实验版本,这是一种构建在 Spark SQL 和 Catalyst 优化器之上的高级流处理 API。 结构化流处理使用户能够使用与静态数据源相同的 DataFrame/Dataset API 针对流数据源和数据接收器进行编程,从而利用 Catalyst 优化器自动增量化查询计划。

对于 DStream API,最突出的更新是对 Kafka 0.10 的新的实验性支持。

依赖、打包和操作

Spark 的操作和打包过程进行了各种更改

  • Spark 2.0 不再需要用于生产部署的胖程序集 jar 包。
  • Akka 依赖项已删除,因此,用户应用程序可以针对任何版本的 Akka 进行编程。
  • 支持在粗粒度 Mesos 模式下启动多个 Mesos 执行器。
  • Kryo 版本已升级到 3.0。
  • 默认构建现在使用 Scala 2.11 而不是 Scala 2.10。

移除、行为变更和弃用

移除

以下功能已在 Spark 2.0 中删除

  • Bagel
  • 支持 Hadoop 2.1 及更早版本
  • 配置闭包序列化器的能力
  • HTTPBroadcast
  • 基于 TTL 的元数据清理
  • 半私有类 org.apache.spark.Logging。 我们建议您直接使用 slf4j。
  • SparkContext.metricsSystem
  • 与 Tachyon 的面向块集成(包含在文件系统集成中)
  • 在 Spark 1.x 中弃用的方法
  • Python DataFrame 上返回 RDD 的方法(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 中,浮点文字现在被解析为十进制数据类型,而不是双精度数据类型。
  • Kryo 版本已升级到 3.0。
  • Java RDD 的 flatMap 和 mapPartitions 函数过去需要返回 Java Iterable 的函数。 它们已更新为需要返回 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.ml.* 对 spark.mllib.* 的最后依赖。 (SPARK-13944) 有关 API 更改的完整列表,请参阅 MLlib 迁移指南。

有关更完整的列表,请参阅 SPARK-11806 了解弃用和删除。

弃用

以下功能已在 Spark 2.0 中弃用,可能会在未来版本的 Spark 2.x 中删除

  • Apache Mesos 中的细粒度模式
  • 支持 Java 7
  • 支持 Python 2.6

已知问题

  • Lead 和 Lag 的行为已更改为忽略空值,而不是尊重空值(1.6 的行为)。 在 2.0.1 中,行为更改将在 2.0.1 中修复 (SPARK-16721)。
  • 当偏移行不存在时,使用常量输入值的 Lead 和 Lag 函数不会返回默认值 (SPARK-16633)。

致谢

最后但同样重要的是,如果没有以下贡献者,这个版本的发布是不可能实现的:Aaron Tokhy, Abhinav Gupta, Abou Haydar Elias, Abraham Zhan, Adam Budde, Adam Roberts, Ahmed Kamal, Ahmed Mahran, Alex Bozarth, Alexander Ulanov, Allen, Anatoliy Plastinin, Andrew, Andrew Ash, Andrew Or, Andrew Ray, Anthony Truchet, Anton Okolnychyi, 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, Cedar Pan, Charles Allen, Cheng Hao, Cheng Lian, Claes Redestad, CodingCat, Cody Koeninger, 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, Fonso Li, Franklyn D’souza, François Garillot, Fred Reiss, Gabriele Nizzoli, Gary King, GayathriMurali, Gio Borje, Grace, Greg Michalopoulos, Grzegorz Chilkiewicz, Guillaume Poulin, Gábor Lipták, Hemant Bhanawat, Herman van Hovell, Hiroshi Inoue, Holden Karau, Hossein, Huaxin Gao, Hyukjin Kwon, 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 Lyn, Jean-Baptiste Onofré, Jeff L, Jeff Zhang, Jeremy Derr, JeremyNixon, Jia Li, 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, Liye, Luc Bourlier, Luciano Resende, Lukasz, Maciej Brynski, Malte, Maciej Szymkiewicz, Marcelo Vanzin, Marcin Tustin, Mark Grover, Mark Yang, Martin Menestret, Masayoshi TSUZUKI, Matei Zaharia, Mathieu Longtin, Matthew Wise, Miao Wang, Michael Allman, Michael Armbrust, Michael Gummelt, Michel Lemay, Mike Dusenberry, Mortada Mehyar, Nakul Jindal, Nam Pham, Narine Kokhlikyan, 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, Pierre Borckmans, 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, Sachin Aggarwal, Saisai Shao, Sameer Agarwal, Sandeep Singh, Sanket, Sasaki Toru, Sean Owen, Sean Zhong, Sebastien Rainville, Sebastián Ramírez, Sela, Sergiusz Urbaniak, Seth Hendrickson, Shally Sangal, Sheamus K. Parkes, Shi Jinkui, Shivaram Venkataraman, Shixiong Zhu, Shuai Lin, Shubhanshu Mishra, Sin Wu, Sital Kedia, Stavros Kontopoulos, Stephan Kessler, Steve Loughran, Subhobrata Dey, Subroto Sanyal, Sumedh Mungee, Sun Rui, Sunitha Kambhampati, Suresh Thalamati, Takahashi Hiroshi, Takeshi YAMAMURO, Takuya Kuwahara, Takuya UESHIN, Tathagata Das, Ted Yu, Tejas Patil, Terence Yim, Thomas Graves, Timothy Chen, Timothy Hunter, Tom Graves, Tom Magrino, Tommy YU, Travis Crawford, Tristan Reid, Victor Chima, Vijay Kiran, Villu Ruusmann, Wang Fei, Wayne Song, Wei Mao, WeichenXu, Weiqing Yang, Wenchen Fan, Wesley Tang, Wilson Wu, Wojciech Jurczyk, Xiangrui Meng, Xiao Li, Xin Ren, Xin Wu, Xinh Huynh, Xiu Guo, Xusen Yin, Yadong Qi, Yanbo Liang, Yang Bo., Yash Datta, Yin Huai, Yonathan Randolph, Yong Gang Cao, Y ong Tang, Yu ISHIKAWA, Yucai Yu, Yuhao Yang, Yury Liavitski, Zhang, Zheng RuiFeng, Zheng Tan, dding3, depend, echo2mei, fwang1, guoxu1231, huangzhaowei, hushan, jayadevanmurali, junhao, kaklakariada, mcheah, meiyoula, movelikeriver, nfraison, oraviv, peng.zhang, petermaxlee, prabs, pshearer, rotems, sandy, seddonm1, sharkd, thomastechs, wangfei, wangyang, wujian, yzhou2001, zhonghaihua, zhuol, zlpmichelle, Örjan Lundberg, Łukasz Gieroń


Spark 新闻存档