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 破坏性变更。它们记录在移除、行为变更和弃用部分。

核心和 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 支持的情况下,Spark SQL 几乎拥有与构建 Hive 支持时相同的所有功能,除了 Hive 连接、Hive UDF 和脚本转换。

新功能

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

性能和运行时

  • 通过一种名为“全阶段代码生成”的新技术,SQL 和 DataFrame 中常见操作的性能显着提升(2 - 10 倍)。
  • 通过向量化改进 Parquet 扫描吞吐量
  • 改进 ORC 性能
  • Catalyst 查询优化器在常见工作负载方面有许多改进
  • 通过所有窗口函数的原生实现改进窗口函数性能
  • 原生数据源的自动文件合并

MLlib

基于 DataFrame 的 API 现在是主要 API。基于 RDD 的 API 正在进入维护模式。详情请参阅 MLlib 指南

新功能

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

此演讲列出了许多这些新功能。

速度/扩展性

存储在 DataFrame 中的向量和矩阵现在使用更高效的序列化,减少了调用 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 发布了 Structured Streaming 的初始实验版本,这是一个构建在 Spark SQL 和 Catalyst 优化器之上的高级流处理 API。Structured Streaming 允许用户使用与静态数据源相同的 DataFrame/Dataset API 对流式源和汇进行编程,利用 Catalyst 优化器自动增量化查询计划。

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

依赖项、打包和操作

Spark 的操作和打包流程有各种更改

  • Spark 2.0 不再需要用于生产部署的 fat assembly 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 中,浮点字面量现在解析为 decimal 数据类型而不是 double 数据类型。
  • Kryo 版本已提升到 3.0。
  • Java RDD 的 flatMap 和 mapPartitions 函数以前要求返回 Java Iterable 的函数。它们已更新为要求返回 Java Iterator 的函数,因此函数无需具体化所有数据。
  • 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 的行为已从尊重 null 更改为忽略 null(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 新闻存档