Spark 0.7.0 版本发布
Spark 团队很荣幸发布 0.7.0 版本,这是一个新的主要版本,带来了几个新功能。最值得注意的是 Spark 的 Python API 和 Spark Streaming 的 alpha 版本。(有关 Spark Streaming 的详细信息,也可以在此 技术报告 中找到。)此版本还在各个方面进行了许多其他改进。总的来说,这是我们迄今为止最大的版本,有 31 位贡献者,其中 20 位来自伯克利以外。
您可以下载 Spark 0.7.0,既可以作为 源代码包(4 MB tar.gz),也可以作为 预构建包(60 MB tar.gz)。
Python API
Spark 0.7 添加了一个名为 PySpark 的 Python API,它可以使用 Python 从 Spark 中使用 Spark,无论是在独立程序中还是在交互式 Python Shell 中。它使用标准的 CPython 运行时,因此您的程序可以调用 NumPy 和 SciPy 等本机库。与 Scala 和 Java API 一样,PySpark 会自动将主程序中的函数以及它们依赖的变量运送到集群。PySpark 支持大多数 Spark 功能,包括 RDD、累加器、广播变量以及 HDFS 输入和输出。
Spark Streaming Alpha
Spark Streaming 是 Spark 的一个新扩展,它增加了近实时处理能力。它提供了一个简单而高级的 API,用户可以使用并行操作(例如)转换流map, filter, reduce和新的滑动窗口函数。它自动将工作分配到集群上,并提供高效的故障恢复,为转换提供完全一次语义,而无需依赖于与外部系统的昂贵事务。有关 Spark Streaming 的更多详细信息,请参见 这些幻灯片 和 我们的技术报告。此版本是我们 Spark Streaming 的第一个 alpha 版本,其中实现了大部分功能,并且 API 采用 Java 和 Scala。
内存仪表板
Spark 作业现在启动一个 Web 仪表板,用于监控程序中每个分布式数据集 (RDD) 的内存使用情况。在您的日志中查找如下所示的行
15:08:44 INFO BlockManagerUI: Started BlockManager web UI at http://mbk.local:63814
您还可以通过spark.ui.port属性控制要使用的端口。
Maven 构建
除了 SBT 之外,现在还可以使用 Maven 构建 Spark。 Maven 构建可以使用 Maven 配置文件(-Phadoop1或-Phadoop2)轻松选择 Hadoop 版本,以及使用以下命令进行 Debian 打包,从而更轻松地发布到您选择的存储库:mvn -Phadoop1,deb install.
新操作
此版本添加了几个 RDD 转换,包括keys, values, keyBy, subtract, coalesce, zip。它还添加了SparkContext.hadoopConfiguration允许程序在操作之间全局配置 Hadoop 输入/输出设置。最后,它添加了RDD.toDebugString()方法,该方法可用于打印 RDD 的谱系图以进行故障排除。
EC2 改进
- Spark 现在将从以下位置读取 S3 凭据:AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY环境变量(如果已设置),从而更容易访问 Amazon S3。
- 此版本修复了一个 S3 访问的错误,该错误会导致流在未完全读取时保持打开状态(例如,当调用RDD.first()或带有限制的 SQL 查询时),从而导致节点挂起。
- EC2 脚本现在同时支持独立集群和 Mesos 集群,并在集群上启动 Ganglia。
- Spark EC2 集群现在可以分布在多个可用区中。
其他改进
- 像groupByKey和reduceByKey这样的 Shuffle 操作现在尝试从父 RDD 的大小推断并行度(除非spark.default.parallelism已设置)。
- 对 shuffle 的多项性能改进。
- 独立部署集群现在默认将作业分散到各个机器上,从而提高数据本地性。
- 当由于资源不足而未启动作业时,改进的错误报告。
- 独立部署 Web UI 现在包括用于查询集群状态的 JSON 端点。
- 对 IBM JVM 的更好支持。
- 默认的 Hadoop 版本依赖项已更新到 1.0.4。
- 改进的故障处理和错误消息报告。
- 独立集群守护程序和用户应用程序的单独配置。
- 对调度程序代码库进行重大重构,以实现更丰富的单元测试。
- 整个过程中的几个错误和性能修复。
兼容性
此版本与 Spark 0.6 程序 API 兼容,但以下功能略有变化:
- 在您未指定并行度级别的情况下,并行 shuffle 操作使用父 RDD 的分区数,而不是常量默认值。但是,如果您设置spark.default.parallelism,它们将使用它。
- SparkContext.addFile,它将文件分发到工作节点,不再保证将其放在执行程序的正在运行的目录中,而是可以使用SparkFiles.getRootDirectory查找它使用的目录,或者使用SparkFiles.get获取特定文件。这样做是为了避免在本地模式下运行时弄乱本地目录。
鸣谢
Spark 0.7 是伯克利内外的许多贡献者的工作,总共有 31 位不同的贡献者,其中 20 位来自伯克利以外。以下是做出贡献的人员以及他们工作的领域:
- Mikhail Bautin -- Maven 构建
- Denny Britz -- 内存仪表板、流式处理、错误修复
- Paul Cavallaro -- 错误报告
- Tathagata Das -- 流式处理(首席开发人员)、24/7 运营、错误修复、文档
- Thomas Dudziak -- Maven 构建、Hadoop 2 支持
- Harvey Feng -- 错误修复
- Stephen Haberman -- 新的 RDD 操作、配置、S3 改进、代码清理、错误修复
- Tyson Hamilton -- JSON 状态端点
- Mark Hamstra -- API 改进、文档
- Michael Heuer -- 文档
- Shane Huang -- shuffle 性能修复
- Andy Konwinski -- 文档
- Ryan LeCompte -- 流式处理
- Haoyuan Li -- 流式处理
- Richard McKinley -- 构建
- Sean McNamara -- 流式处理
- Lee Moon Soo -- 错误修复
- Fernand Pajot -- 错误修复
- Nick Pentreath -- Python API、示例
- Andrew Psaltis -- 错误修复
- Imran Rashid -- 内存仪表板、错误修复
- Charles Reiss -- 故障恢复修复、代码清理、可测试性、错误报告
- Josh Rosen -- Python API(首席开发人员)、EC2 脚本、错误修复
- Peter Sankauskas -- EC2 脚本
- Prashant Sharma -- 流式处理
- Shivaram Venkataraman -- EC2 脚本、优化
- Patrick Wendell -- 流式处理、错误修复、示例、文档
- Reynold Xin -- 优化、UI
- Haitao Yao -- 运行脚本
- Matei Zaharia -- 流式处理、故障恢复、Python API、代码清理、错误修复、文档
- Eric Zhang -- 示例
感谢每一位贡献者!
Spark 新闻存档