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 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_ID和AWS_SECRET_ACCESS_KEY环境变量中读取 S3 凭据(如果已设置),从而更轻松地访问 Amazon S3。
- 此版本修复了 S3 访问的一个错误,该错误会在流未完全读取时(例如在调用RDD.first()或带有 limit 的 SQL 查询时)使流保持打开状态,导致节点挂起。
- EC2 脚本现在支持独立集群和 Mesos 集群,并在集群上启动 Ganglia。
- Spark EC2 集群现在可以分布在多个可用区中。
其他改进
- Shuffle 操作,例如groupByKey和reduceByKey现在尝试从父 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 新闻存档