Spark 0.7.0 发布

Spark 团队很荣幸发布 0.7.0 版本,这是一个带来多项新功能的重大发布。最值得关注的是 Spark 的 Python APISpark 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 shell 中使用 Spark。它使用标准的 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 版本,实现了大部分功能,并提供了 Java 和 Scala API。

内存仪表盘

Spark 作业现在会启动一个 Web 仪表盘,用于监控程序中每个分布式数据集 (RDD) 的内存使用情况。请在您的日志中查找类似以下内容的行:

15:08:44 INFO BlockManagerUI: Started BlockManager web UI at http://mbk.local:63814

您还可以通过spark.ui.port属性来控制使用的端口。

Maven 构建

Spark 现在除了 SBT 之外,还可以使用 Maven 进行构建。Maven 构建使得发布到您选择的仓库变得更容易,可以使用 Maven profile(-Phadoop1-Phadoop2)轻松选择 Hadoop 版本,还可以使用mvn -Phadoop1,deb install.

新操作

此版本添加了多个 RDD 转换,包括:keys, values, keyBy, subtract, coalesce, zip。它还添加了SparkContext.hadoopConfiguration,以允许程序全局配置 Hadoop 输入/输出设置。最后,它添加了RDD.toDebugString()方法,可用于打印 RDD 的血缘图以进行故障排除。

EC2 改进

  • Spark 现在将从AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY环境变量中读取 S3 凭据(如果已设置),从而更轻松地访问 Amazon S3。
  • 此版本修复了 S3 访问的一个错误,该错误会在流未完全读取时(例如在调用RDD.first()或带有 limit 的 SQL 查询时)使流保持打开状态,导致节点挂起。
  • EC2 脚本现在支持独立集群和 Mesos 集群,并在集群上启动 Ganglia。
  • Spark EC2 集群现在可以分布在多个可用区中。

其他改进

  • Shuffle 操作,例如groupByKeyreduceByKey现在尝试从父 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 -- 流处理
  • 李昊源 -- 流处理
  • Richard McKinley -- 构建
  • Sean McNamara -- 流处理
  • 李文洙 -- 错误修复
  • 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
  • 姚海涛 -- 运行脚本
  • Matei Zaharia -- 流处理、故障恢复、Python API、代码清理、错误修复、文档
  • Eric Zhang -- 示例

感谢所有贡献者!


Spark 新闻存档

最新新闻

存档