12 月 18 日,Spark 宣布发布 1.2 版本,和以往发布的版本相比,1.2 版本算得上是最大的一次改进,代码来自 172 个开发者的多达一千次提交。更新内容涵盖核心性能改进、MLlib 的新 API、Streaming 的 H/A 模式、GraphX 相关等等。更多细节可以在下载页查看。在本次的发布中,主要改进包括下面几个方面:
- Spark Core:对操作和性能方面做了改进,更新了两个主要的子系统,来针对大规模 shuffle 的情况。第一个改进的是通信管理系统,升级使用了基于 Netty 的实现。第二个改进是 shuffle 的机制,升级使用了基于 sort 的实现。这两个改进,都对大规模 shuffle 情况下的性能和稳定性做出了贡献。除此之外,Spark 还增加了一个弹性机制,用于增强那些长时间运行的 ETL 任务对集群的利用率。目前这种机制在 YARN 上已经支持了,后续版本发布的时候应该会覆盖到其他管理平台。最后,核心功能还添加了对 Scala 2.11 版本的支持。
- Spark Streaming:本次升级对 Streaming 部分来讲包括了两个主要特性,一个是 Python 的 API,可以调用 DStream 和输出操作几乎全部的功能。目前输入来源支持文本文件和 socket 传递过来的文本。预计下一个版本发布的时候会添加 Kafka 和 Flume 的输入支持。另一个是 WAL(write ahead log)机制下的全 H/A 模式,在此之前的版本,如果硬盘出了问题,一些尚在缓存区还没有来得及被处理的数据会丢失,该改进可以有效地防止硬盘出问题时的数据丢失问题。
- MLLib:最大的改进应该是发布了称为 spark.ml 的机器学习工具包,支持了 pipeline 的学习模式,即多个算法可以用不同参数以流水线的形式运行。在工业界的机器学习应用部署过程中,pipeline 的工作模式是很常见的。新的 ML 工具包使用 Spark 的 SchemaRDD 来表示机器学习的数据集合,提供了 Spark SQL 直接访问的接口。此外,在机器学习的算法方面,增加了两个基于树的方法,随机森林和梯度增强树。
- Spark SQL:增加了对外部数据来源的支持。可以将外部数据来源作为临时表挂在的文件系统之中,减少了全部加载数据过来的种种纠结。为了做到这一点,Spark 重写了 Parquet 和 JSON 绑定。后续应该会有更多的对其他系统和数据格式的支持发布出来。此外,对于 Hive 的支持也增加了定点数类型以及动态划分的插入。
- GraphX:终于在这个版本里,Spark 将 GraphX 从一个 alpha 初级开发版本更换到了稳定版本。这意味着目前用 GraphX 开发的代码将来移植到 Spark 新版本的时候,也不用做太多的代码改动了。另外 mapReduceTriplet 接口被新的 aggreateMessages 替换。
- 其他细节升级包括 PySpark 支持大数据集、一些 UI 上的改动以及可以读取二进制图像等内容。
12 月 16 日的 Spark 的社区聚会上,作者 Andrew 和 Aaron Davidson 向前来的热心开发者详细讲解了此次升级的情况(Youtube 视频)。另外,明年1 月13 日,Databricks 的Patrick Wendell 也会以Webcast 的形式来分享Spark 1.2 的更多细节。
感谢郭蕾对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论