Apache Spark 1.2.0 已经发布,Spark 核心引擎在性能和可用性方面都有很大改进。这是来自 60 多家研究机构和公司的 172 位贡献者的成果,包括了 1000 多个补丁。
Spark 1.2.0 与之前的 1.1 和 1.0 版本完全二进制兼容。该版本引入了一个基于Netty 的实现,此举带来了很大的效率提升。Spark 流支持Python,并通过预写式日志(Write Ahead Logs,WALs)支持高可用。此外还提供了一组称作_spark.ml_ 的机器学习API。
Spark SQL 是一个比较新的项目,改进了对外部数据源的支持。
Patrick Wendell 是 Spark 早期版本的发布经理,现在是 Spark 贡献者和 PMC 成员,目前就职于 Databricks。InfoQ 对他进行了采访。
InfoQ**:先谈谈重要的。对熟悉Map/Reduce的开发者而言,Spark看上去在引导一个新的范型,是不是这样呢?精通Map/Reduce的开发者是否应该关注Apache Spark?**
Spark 最初创建的目标就是改进 Map/Reduce 模型,所以现在的 Map/Reduce 开发者绝对应该试试 Spark!与 Map/Reduce 相比,除了丰富的内置类库以及社区提供的类库,Spark 还提供了层次更高、表达性更好的 API。做个类比,如果说 Map/Reduce 像汇编语言,也就是底层的、命令式的语言,那 Spark 更像提供了类库和包的现代编程语言。Spark 还提供了很大的性能改进。
InfoQ**:可以像运行其他程序那样在YARN上运行Map/Reduce程序。Apache Spark和YARN之间有什么关系吗?**
Spark 可以在很多不同的环境中运行,从和已部署的 Hadoop 共存,到运行在 Mesos 集群中,还可以运行在像 Databricks Cloud 这样的托管服务中。在 Hadoop 环境中,YARN 是集群管理器,帮助启动和调度运行 Spark 应用的分布式组件。YARN 可以将 Spark 和 MapReduce 负载在同样的集群硬件上多路复用。
InfoQ**:要成为Spark用户,需要熟悉Scala吗?**
与 Scala 用户相比,Java 和 Python 用户也很多。所以 Scala 相关的知识并不是必需的。Spark 的可编程的 Shell 提供了 Python 和 Scala 版本(因为 Java 没有交互式的 Shell,所有没有 Java 版本)。Spark 的 SQL 特性支持这几种语言。当然要尝试新东西的话,Scala API 总是可用的。
InfoQ**:Spark SQL是最近加进来的。能够使用JDBC/ODBC API访问Spark,是不是使Spark对开发者更友好了?**
能够在 JDBC/ODBC 上暴露出 Spark 数据集,这是我们去年提供的最受欢迎的特性之一。这些接口支持使用传统的 BI 和可视化工具查询 Spark 数据,还支持与第三方应用集成。利用 Spark,不管我们的数据用的是什么格式(JSON、Parquet 或某种数据库),都可以在一个程序中实现对数据的 ETL(Extract、Transform 和 Load)操作,以及执行变换并暴露给查询操作。这是 Spark 中最强大概念之一,过去需要很多单独的工具,现在都统一了。
InfoQ**:磁盘存储没有限制,但内存是有限的。有别于Apache Hadoop,Apache Spark是不是有数据大小的限制?哪类应用能从Apache Spark受益最多呢?**
尽管现代的集群中可用内存的量一直在激增,但是总有些情况,数据是无法放到内存里的。在 Spark 的所有现代版本中,大部分超出可用内存的操作都会扩展到磁盘上,这意味着用户不需要担心内存限制。举个例子,在数据集的量几倍于集群的可用内存量的情况下,Spark 取得了 Jim Gray 排序基准测试的胜利,而且就是在这种情况下,Spark 的效率还比其他广泛应用的系统高好多倍。
InfoQ**:我们再来谈谈性能。在最初由Jim Gray创建的排序基准测试中,Apache Spark成了赢家,让人印象非常深刻。很多开发者都会对基准测试的结果表示怀疑,你能谈一下这些结果是否中肯吗?**
之所以选择 Jim Gray 基准测试,是因为它是由第三方委员会维护的。这就确保它是独立验证的,而且是基于一组定义好的业界规则。对基准测试持怀疑态度的开发者都知道,自己报告的、未经验证的基准测试一般多是营销材料。而开源之美就在于,用户可以自行尝试,几乎不需要什么成本。我一直鼓励用户选择 Databricks Cloud,或者是下载 Spark,并用自己的数据集来评估,而不是把太多精力放到基准测试上。
对于用户而言,整体考虑性能也很重要。如果数据在 ETL 流水线中要花 6 个小时转成恰当的格式,或者需要 3 个月的时间实现模式的变更,那查询加快是不是胜利呢?如果需要把数据转到另一个系统中来执行机器学习,10% 的性能改进是不是值得?数据通常很散乱、复杂,而且端到端的流水线会涉及不同的计算模型,比如查询、机器学习和 ETL。Spark 的目标是使得在真正的流水线中处理复杂数据变得非常简单!
有关 Apache Spark 1.2.0 的特性列表的更详细解释,可以参见 Databricks 公司的博客。读者可以从 Apache Spark 的下载页面下载 Spark 最新版本。
查看英文原文: Apache Spark 1.2.0 Supports Netty-based Implementation, High Availability and Machine Learning APIs
评论