Spark 1.5.0 发布
Spark 1.5.0 是 1.x 系列的第六个版本。 该版本包含了来自 230+ 位贡献者和 80+ 个机构的 1400+ 个补丁。 要下载 Spark 1.5.0,请访问下载页面。
您可以查阅 JIRA 以获取详细的更改。 我们在这里整理了一个高级别更改列表
API:RDD、DataFrame 和 SQL
- 一致的列名解析(参见行为更改部分)
- SPARK-3947:新的实验性用户定义聚合函数 (UDAF) 接口
- SPARK-8300:用于广播连接的 DataFrame 提示
- SPARK-8668:用于将 SQL 表达式转换为 DataFrame 列的 expr 函数
- SPARK-9076:改进了对 NaN 值的支持
- NaN 函数:isnan、nanvl
- dropna/fillna 除了 NULL 值之外,还会填充/删除 NaN 值
- NaN = NaN 的相等性测试返回 true
- NaN 大于所有其他值
- 在聚合中,NaN 值进入一个组
- SPARK-8828:当所有输入值为 null 时,Sum 函数返回 null
- 数据类型
- SPARK-8159:添加了约 100 个函数,包括日期/时间、字符串、数学。
- SPARK-8947:改进了计划分析阶段的类型强制转换和错误报告(即,大多数错误应在分析时而不是执行时报告)
- SPARK-1855:仅内存和本地磁盘检查点支持
后端执行:DataFrame 和 SQL
- 几乎所有 DataFrame/SQL 函数都默认启用代码生成
- 改进了 DataFrame/SQL 中的聚合执行
- 缓存友好的内存哈希映射布局
- 当内存耗尽时,回退到基于外部排序的聚合
- 聚合默认启用代码生成
- 改进了 DataFrame/SQL 中的 join 执行
- 在 shuffle 连接中,首选(外部)排序合并连接而不是哈希连接(对于左/右外连接和内连接),即,连接数据大小现在受磁盘而不是内存限制
- 支持使用(外部)排序合并连接方法进行左/右外连接
- 支持广播外连接
- 改进了 DataFrame/SQL 中的排序执行
- 用于排序的缓存友好的内存布局
- 当数据超过内存大小时,回退到外部排序
- 用于快速比较的代码生成比较器
- 本机内存管理和表示
- 紧凑的二进制内存数据表示,从而降低了内存使用率
- 执行内存被显式计算,而无需依赖 JVM GC,从而减少了 GC 并提高了内存管理的健壮性
- SPARK-8638:改进了窗口函数中的性能和内存使用
- 指标检测、报告和可视化
集成:数据源、Hive、Hadoop、Mesos 和集群管理
- Mesos
- YARN
- 独立集群管理器
- SPARK-6906:改进的 Hive 和元存储支持
- SPARK-8131:改进的 Hive 数据库支持
- 升级后的 Hive 依赖项 Hive 1.2
- 支持连接到 Hive 0.13、0.14、1.0/0.14.1、1.1、1.2 元存储
- 支持将分区修剪下推到元存储中(默认情况下关闭;配置标志 spark.sql.hive.metastorePartitionPruning)
- 支持以 Hive 兼容格式将数据持久存储在元存储中
- SPARK-9381:支持 JSON 数据源的数据分区
- SPARK-5463:Parquet 改进
- 升级到 Parquet 1.7
- 加速元数据发现和模式合并
- 默认启用谓词下推
- SPARK-6774:通过完全实现 parquet-format 规范中定义的所有向后兼容性规则,支持读取由各种库/系统生成的非标准旧版 Parquet 文件
- SPARK-4176:支持写入精度大于 18 的十进制值
- ORC 改进(各种错误修复)
- SPARK-8890:更快、更强大的动态分区插入
- SPARK-9486:DataSourceRegister 接口,用于外部数据源指定短名称
R 语言
机器学习和高级分析
Spark Streaming
- SPARK-7398:反压:Spark Streaming 中用于处理突发输入流的自动和动态速率控制。 这允许流式传输管道动态适应摄取速率和计算负载的变化。 这适用于接收器以及 Direct Kafka 方法。
- 用于流源的 Python API
- SPARK-3258:用于流式机器学习算法的 Python API:K-Means、线性回归和逻辑回归
- SPARK-9215:提高了 Kinesis 流的可靠性:无需启用预写日志即可跨驱动程序故障保存和恢复接收到的数据
- Direct Kafka API 毕业:不再是实验性的了。
- SPARK-8701:UI 中的输入元数据:Kafka 偏移量和输入文件在批处理详细信息 UI 中可见
- SPARK-8882:更好地在集群中对接收器进行负载平衡和调度
- SPARK-4072:在 Web UI 中包含流式存储
弃用、删除、配置和行为更改
Spark Core
- DAGScheduler 的本地任务执行模式已删除
- 默认驱动程序和执行程序内存从 512m 增加到 1g
- JVM 的 MaxPermSize 的默认设置从 128m 增加到 256m
- spark-shell 的默认日志记录级别从 INFO 更改为 WARN
- 基于 NIO 的 ConnectionManager 已弃用,将在 1.6 中删除
Spark SQL & DataFrames
- 使用手动管理的内存(Tungsten)进行优化执行现在默认启用,以及用于表达式评估的代码生成。 可以通过将 spark.sql.tungsten.enabled 设置为 false 来禁用这些功能。
- Parquet 模式合并不再默认启用。 可以通过将 spark.sql.parquet.mergeSchema 设置为 true 来重新启用它。
- Python 中字符串到列的解析现在支持使用点 (.) 来限定列或访问嵌套值。 例如,df['table.column.nestedField']。 但是,这意味着如果您的列名包含任何点,您现在必须使用反引号转义它们(例如,
table.`column.with.dots`.nested
)。
- 默认启用内存列式存储分区修剪。 可以通过将 spark.sql.inMemoryColumnarStorage.partitionPruning 设置为 false 来禁用它。
- 不再支持无限精度十进制列,而是 Spark SQL 强制执行最大精度为 38。 从 BigDecimal 对象推断模式时,现在使用 (38, 18) 的精度。 如果在 DDL 中未指定精度,则默认值仍为 Decimal(10, 0)。
- 现在以 1us 的精度处理时间戳,而不是 100ns。
- 当所有输入值为 null 时,Sum 函数返回 null(1.4 之前为 null,1.4 中为 0)。
- 在 sql 方言中,浮点数现在被解析为十进制数。 HiveQL 解析保持不变。
- SQL/DataFrame 函数的规范名称现在是小写(例如 sum vs SUM)。
- 已经确定,启用推测执行时使用 DirectOutputCommitter 是不安全的,因此,无论配置如何,当启用推测执行时,Parquet 将不会使用此输出提交器。
- JSON 数据源不会自动加载其他应用程序创建的新文件(即,并非通过 Spark SQL 插入到数据集中的文件)。对于 JSON 持久表(即,表的元数据存储在 Hive Metastore 中),用户可以使用 REFRESH TABLE SQL 命令或 HiveContext 的 refreshTable 方法将这些新文件包含到表中。对于表示 JSON 数据集的 DataFrame,用户需要重新创建 DataFrame,新的 DataFrame 将包含新文件。
Spark Streaming
- 可以通过将配置 spark.streaming.backpressure.enabled 设置为 true 来启用新的实验性反压功能。
- Kinesis 流不需要启用预写日志。更新后的 Kinesis 接收器会跟踪每个批次中收到的 Kinesis 序列号,并在从故障中恢复时使用该信息重新读取必要的数据。
- 接收器在失败时重新启动的次数不受最大 Spark 任务尝试次数的限制。系统将始终尝试在失败后重新启动接收器,直到 StreamingContext 停止。
- 改进了接收器在执行器之间的负载均衡,即使在重新启动后也是如此。
- 使用 queueStream 时启用检查点会引发异常,因为 queueStream 无法进行检查点操作。但是,我们发现这会破坏某些现有应用程序。因此,此更改将在 Spark 1.5.1 中撤消。
MLlib
在 spark.mllib 包中,没有破坏性的 API 更改,但有一些行为更改
- SPARK-9005: RegressionMetrics.explainedVariance 返回平均回归平方和。
- SPARK-8600: NaiveBayesModel.labels 变为排序后的。
- SPARK-3382: GradientDescent 具有默认的收敛容差 1e-3,因此迭代可能会早于 1.4 版本结束。
在实验性的 spark.ml 包中,存在一个破坏性的 API 更改和一个行为更改
- SPARK-9268: 由于 Scala 编译器中的一个错误,Java 的 varargs 支持已从 Params.setDefault 中删除。
- SPARK-10097: 添加了 Evaluator.isLargerBetter 来指示指标排序。像 RMSE 这样的指标不再像 1.4 版本中那样翻转符号。
已知问题
以下问题在 1.5.0 中已知,将在 1.5.1 版本中修复。
SQL/DataFrame
- SPARK-10301: 读取具有不同 schema(schema 合并)的嵌套结构体的 Parquet 文件可能会返回错误的答案
- SPARK-10466: 在基于排序的 shuffle 期间溢出数据时出现 AssertionError,并进行数据溢出
- SPARK-10441: Timestamp 数据类型无法写出为 JSON
- SPARK-10495: 保存到 JSON 的 Date 值存储为表示自 epoch (1970-01-01 00:00:00 UTC) 以来的天数的字符串,而不是 “yyyy-mm-dd” 格式的字符串。
- SPARK-10403: Tungsten 模式不适用于 tungsten-sort shuffle manager(默认情况下处于关闭状态)
- SPARK-10422: 具有字典编码的字符串类型的内存缓存已损坏
- SPARK-10434 Spark 1.5.0 写入的数组中包含空元素的 Parquet 文件无法被早期版本的 Spark 读取
Streaming
鸣谢
我们要感谢以下组织使用他们的工作负载测试候选版本:Mesosphere、Typesafe、Tencent、Palantir、Cloudera、Hortonworks、Huawei、Shopify、Netflix、Intel、Yahoo、Kixer、UC Berkeley 和 Databricks。
最后但并非最不重要的是,如果没有以下贡献者,就不可能发布此版本:Aaron Davidson, Adam Roberts, Ai He, Akshat Aranya, Alex Shkurenko, Alex Slusarenko, Alexander Ulanov, Alok Singh, Amey Chaugule, Andrew Or, Andrew Ray, Animesh Baranawal, Ankur Chauhan, Ankur Dave, Ben Fradet, Bert Greevenbosch, Bimal Tandel, Brennan Ashton, Brennon York, Brian Lockwood, Bryan Cutler, Burak Yavuz, Calvin Jia, Carl Anders Duvel, Carson Wang, Chen Xu, Cheng Hao, Cheng Lian, Cheolsoo Park, Chris Freeman, Christian Kadner, Cody Koeninger, Damian Guy, Daniel Darabos, Daniel Emaasit, Daoyuan Wang, Dariusz Kobylarz, David Arroyo Cazorla, Davies Liu, DB Tsai, Dennis Huo, Deron Eriksson, Devaraj K, Dibyendu Bhattacharya, Dong Wang, Emiliano Leporati, Eric Liang, Favio Vazquez, Felix Cheung, Feynman Liang, Forest Fang, Francois Garillot, Gen Tang, George Dittmar, Guo Wei, GuoQiang Li, Han JU, Hao Zhu, Hari Shreedharan, Herman Van Hovell, Holden Karau, Hossein Falaki, Huang Zhaowei, Hyukjin Kwon, Ilya Ganelin, Imran Rashid, Iulian Dragos, Jacek Lewandowski, Jacky Li, Jan Prach, Jean Lyn, Jeff Zhang, Jiajin Zhang, Jie Huang, Jihong MA, Jonathan Alter, Jose Cambronero, Joseph Batchik, Joseph Gonzalez, Joseph K. Bradley, Josh Rosen, Judy Nash, Juhong Park, Kai Sasaki, Kai Zeng, KaiXinXiaoLei, Kan Zhang, Kashif Rasul, Kay Ousterhout, Keiji Yoshida, Kenichi Maehashi, Keuntae Park, Kevin Conor, Konstantin Shaposhnikov, Kousuke Saruta, Kun Xu, Lars Francke, Leah McGuire, lee19, Liang-Chi Hsieh, Lianhui Wang, Luca Martinetti, Luciano Resende, Manoj Kumar, Marcelo Vanzin, Mark Smith, Martin Zapletal, Matei Zaharia, Mateusz Buskiewicz, Matt Massie, Matthew Brandyberry, Meethu Mathew, Meihua Wu, Michael Allman, Michael Armbrust, Michael Davies, Michael Sannella, Michael Vogiatzis, Michel Lemay, Mike Dusenberry, Min Zhou, Mingfei Shi, mosessky, Moussa Taifi, Mridul Muralidharan, NamelessAnalyst, Namit Katariya, Nan Zhu, Nathan Howell, Navis Ryu, Neelesh Srinivas Salian, Nicholas Chammas, Nicholas Hwang, Nilanjan Raychaudhuri, Niranjan Padmanabhan, Nishkam Ravi, Nishkam Ravi, Noel Smith, Oleksiy Dyagilev, Oleksiy Dyagilev, Paavo Parkkinen, Patrick Baier, Patrick Wendell, Pawel Kozikowski, Pedro Rodriguez, Perinkulam I. Ganesh, Piotr Migdal, Prabeesh K, Pradeep Chhetri, Prayag Chandran, Punya Biswal, Qian Huang, Radek Ostrowski, Rahul Palamuttam, Ram Sriharsha, Rekha Joshi, Rekha Joshi, Rene Treffer, Reynold Xin, Roger Menezes, Rohit Agarwal, Rosstin Murphy, Rowan Chattaway, Ryan Williams, Saisai Shao, Sameer Abhyankar, Sandy Ryza, Santiago M. Mola, Scott Taylor, Sean Owen, Sephiroth Lin, Seth Hendrickson, Sheng Li, Shilei Qian, Shivaram Venkataraman, Shixiong Zhu, Shuo Bai, Shuo Xiang, Simon Hafner, Spiro Michaylov, Stan Zhai, Stefano Parmesan, Steve Lindemann, Steve Loughran, Steven She, Su Yan, Sudhakar Thota, Sun Rui, Takeshi YAMAMURO, Takuya Ueshin, Tao Li, Tarek Auel, Tathagata Das, Ted Blackman, Ted Yu, Thomas Omans, Thomas Szymanski, Tien-Dung Le, Tijo Thomas, Tim Ellison, Timothy Chen, Tom Graves, Tom White, Tomohiko K., Vincent D. Warmerdam, Vinod K C, Vinod KC, Vladimir Vladimirov, Vyacheslav Baranov, Wang Tao, Wang Wei, Weizhong Lin, Wenchen Fan, Wisely Chen, Xiangrui Meng, Xu Tingjun, Xusen Yin, Yadong Qi, Yanbo Liang, Yash Datta, Yijie Shen, Yin Huai, Yong Tang, Yu ISHIKAWA, Yuhao Yang, Yuming Wang, Yuri Saito, Yuu ISHIKAWA, Zc He, Zhang, Liye, Zhichao Li, Zhongshuai Pei, Zoltan Zvara, 以及一些未知的贡献者(请在您的 git 提交中注明您的电子邮件和姓名,以便在此处显示)。
Spark 新闻存档