Spark 1.2.0 是 1.X 系列的第三个版本。此版本在 Spark 核心引擎中带来了性能和可用性改进,MLlib 的主要新 API,Python 中扩展的 ML 支持,Spark Streaming 中的完全高可用模式,等等。GraphX 取得了重大的性能和 API 改进,并从 alpha 组件毕业。Spark 1.2 代表了来自 60 多个机构的 172 名贡献者通过 1000 多个独立补丁所完成的工作。
要下载 Spark 1.2,请访问下载页面。
在 1.2 版本中,Spark 核心升级了两个主要子系统,以提高超大规模混洗的性能和稳定性。第一个是 Spark 在批量传输期间使用的通信管理器,它升级到了基于 Netty 的实现。第二个是 Spark 的混洗机制,它升级到了最初在 Spark 1.1 中发布的“基于排序”的混洗。这两项改进都提升了超大规模混洗的性能和稳定性。Spark 还添加了一个弹性伸缩机制,旨在提高长时间运行的 ETL 风格作业期间的集群利用率。该机制目前在 YARN 上受支持,并将在未来版本中推广到其他集群管理器。最后,Spark 1.2 添加了对 Scala 2.11 的支持。有关为 Scala 2.11 构建的说明,请参阅构建文档。
此版本包含 Spark 流处理库的两项主要功能新增:Python API 和用于完整驱动程序高可用性的预写日志。 Python API 涵盖了几乎所有的 DStream 转换和输出操作。目前支持基于文本文件和套接字文本的输入源。对 Python 中 Kafka 和 Flume 输入流的支持将在下一版本中添加。其次,Spark streaming 现在通过预写日志 (WAL) 支持高可用性驱动程序。在 Spark 1.1 及更早版本中,驱动程序重启期间可能会丢失一些缓冲(已接收但尚未处理)数据。为防止这种情况,Spark 1.2 添加了一个可选的 WAL,它将接收到的数据缓冲到容错文件系统(例如 HDFS)中。有关更多详细信息,请参阅流处理编程指南。
Spark 1.2 预发布了一组新的机器学习 API,位于名为 spark.ml 的包中,该包支持学习管道,其中多个算法可以按顺序运行并使用不同的参数。这种类型的管道在实际的机器学习部署中很常见。新的 ML 包使用 Spark 的 SchemaRDD 来表示ML 数据集,提供与 Spark SQL 的直接互操作性。除了新 API 之外,Spark 1.2 还通过两种树集成方法扩展了决策树:随机森林和梯度提升树,它们是分类和回归中最成功的基于树的模型。最后,MLlib 的 Python 实现 在 1.2 版本中得到了重大更新,以简化添加 Python API 的过程,并提供更好的 Python API 覆盖。
在此版本中,Spark SQL 添加了一个用于外部数据源的新 API。此 API 支持将外部数据源作为临时表挂载,并支持谓词下推等优化。Spark 的 Parquet 和 JSON 绑定已重写以使用此 API,我们预计在 1.2 生命周期内,各种社区项目将与其它系统和格式集成。
Hive 集成已得到改进,支持固定精度十进制类型和Hive 0.13。Spark SQL 还添加了动态分区插入,这是一个流行的 Hive 功能。围绕缓存进行的内部重新架构改进了缓存 SchemaRDD 实例的性能和语义,并增加了对缓存数据基于统计信息的表分区剪枝的支持。
在 1.2 版本中,GraphX 从 alpha 组件毕业,并添加了稳定的 API。这意味着针对 GraphX 编写的应用程序可以保证在未来的 Spark 版本中无需代码更改即可工作。引入了一个新的核心 API,aggregateMessages,以取代现在已弃用的 mapReduceTriplet API。新的 aggregateMessages API 具有更命令式的编程模型并提高了性能。一些早期测试用户发现,切换到新 API 后,性能提高了 20% 到 1 倍。
此外,Spark 现在支持图检查点和血缘截断,这对于在生产作业中支持大量迭代是必需的。最后,为PageRank和图加载添加了一些性能改进。
Spark 1.2 与 Spark 1.0 和 1.1 二进制兼容,因此无需进行代码更改。这不包括明确标记为不稳定的 API。Spark 在少数情况下更改了默认配置以提高性能。希望保留与 Spark 1.1 相同配置的用户可以回滚这些更改。
spark.shuffle.blockTransferService
已从 nio
更改为 netty
spark.shuffle.manager
已从 hash
更改为 sort
SparkContext([... args... ], batchSize=1024)
恢复 1.2 之前的行为。spark.sql.parquet.cacheMetadata
: false
-> true
spark.sql.parquet.compression.codec
: snappy
-> gzip
spark.sql.hive.convertMetastoreParquet
: false
-> true
spark.sql.inMemoryColumnarStorage.compressed
: false
-> true
spark.sql.inMemoryColumnarStorage.batchSize
: 1000
-> 10000
spark.sql.autoBroadcastJoinThreshold
: 10000
-> 10485760
(10 MB)一些较小的错误未在发布窗口内修复。它们将在 Spark 1.2.1 中修复。
感谢所有贡献者!