Spark 已经 5 岁了

今天,我们庆祝一下Spark项目的一个重要里程碑——Spark已经开源5年了。当我们第一次决定发布我们在加州大学伯克利分校的研究代码时,没有人知道Spark能走多远,但我们相信我们已经建立了一些想要分享给全世界的真正优雅的技术。五年来,我们一直很敬佩众多的贡献者和用户,是他们使Spark变为目前处于领先的计算框架。事实上,据我们所知,Spark现在已经成为大数据领域最活跃的开源项目(看每个月的贡献者或每个月的提交量)。除了贡献者以外,Spark已经根据流处理的批量分析,建立了数以百计的生产实例

为了庆祝Spark的5岁生日,我想做的事情是强调一些如何构建该项目的核心理念,它们在今天仍然适用。为了这一点,我又查看了Spark的第一个公开版本

首先要注意的是这个版本非常地小:它仅仅包含3900行代码,其中包含1300行的Scala解释器,600行的例子和300行的测试。值得欣喜的是,从2010年3月以来,我们的测试覆盖率大幅上涨。然而,Spark的大小反映了一个重要的事实:从一开始,我们就试图保持Spark引擎小而紧凑,这样使许多开发人员更容易理解,也使我们更容易修改和升级。即使在今天,Spark核心引擎也只有50000行代码。对比第一个版本,主要添加的是对“shuffle”操作的支持,它需要新的网络代码和一个DAG调度程序,同时添加了对多个后端调度程序的支持,例如YARN。但是,即使在今天我们仍可以定期地对核心引擎进行大的改变,以提高所有Spark应用程序的性能和稳定性。例如,在我们去年大规模排序的工作中,Databricks的多个开发人员最终改写了几乎所有的Spark网络层。

关于Spark,其次要注意的事是它可以做什么:对于今天的Spark来讲,即使2000行的引擎也可以处理最重要的两个工作,迭代算法和交互式查询。回到2010年,我们是唯一支持交互式使用的集群计算引擎,但我们是通过修改Scala解释器以提交代码到Spark集群的。我们不断寻求改善这种体验的方法,使得能通过Spark的Python APIDataFrames等特性来实现真正的交互式数据科学。此外,即使是2010年版本的Spark,也能够运行逻辑回归等迭代算法,而且逻辑回归的运行效率比MapReduce快20到30倍(后续的改进将效率提高到了100 倍)。

我们思考该项目的最后一个重要的元素是我们专注于简单、稳定的APIs。2010年的Spark附带的代码示例,比如逻辑回归和计算圆周率,和今天的Spark代码几乎相同(查看逻辑回归pi)。我们尽量定义稳定的APIs,从而使开发者可以在未来几年中重复使用,以最小化他们为了跟上Spark更新所必须做的工作量。从Spark1.0开始,这些兼容性保证在所有主要的Spark组件中有效。

2010年的Spark就足够使用了,从那之后它是如何发展的呢?尽管在Spark的所有领域都有巨大的发展,包括支持更多的编程语言(Java、Python,马上支持的R),数据源,代码优化等,但对Spark的最大改变是其标准库。这几年以来,Spark已经有了四个高级库——Spark StreamingMllibGraphXSpark SQL——他们都运行在核心引擎之上,并彼此之间轻松高效地进行交互。今天这些库的代码占Spark代码的大部分—大约200000行,而核心引擎也只有50000行。他们也代表了可用于大数据的单一的最大标准库,从而使得编写那些跨数据生命周期所有阶段的应用程序更加简单。不过,这些库仍然很新,他们中的大多数是最近两年被添加进来的。在未来几年内,我希望这些库能显著成长,目的是为大数据建立一个工具集,同时建立可用于小数据的同等规模的库。你可以从Spark Summit 2015上我的幻灯片中,找到一些Databricks正在维护相关库的领域。

最后,类似于任何5岁的事物,Spark有时仍然会在没有监督的情况下陷入困境,有时也很难理解。在Databricks,我们正通过在Spark代码库和周边支持材料上的努力,尽量使Spark比以往任何时候都更容易使用和运行。我们在Spark上的所有的工作,都是开源的,直接发送给Apache。此外,我们已经提供了大量的免费在线培训材料,以及培训课程书籍。最后,我们建立了一个名为Databricks Cloud的服务,使得Spark更容易运行。我们很享受建立Spark的过程,我们希望无论在哪一种环境中运行它,你也都能很享受使用它的过程。

打赏支持我翻译更多好文章,谢谢!

打赏译者

打赏支持我翻译更多好文章,谢谢!

收藏 评论

关于作者:笑虎

Python爱好者,关注爬虫、数据分析挖掘、数据可视化等 个人主页 · 我的文章 · 29

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部