原文链接

在过去的一年(2014),spark的性能进行了大幅度的改进。spark创造了100TB排序的一个新的世界纪录,以三倍的速度打败了之前Hadoop MapReduce创造的记录,而且只用了十分之一的资源。然后还有spark拥有了一个新的SQL query engine,另外,很多build-in的算法都提速了五倍之多。

回到2010年,我们设计spark的初衷是为了解决MapReduce等批处理框架不擅长的交互式请求(interactive queries)和迭代算法(iterative algorithms)。现在,越来越多的用户因为spark的在这些方面的性能提升而开始使用spark。然而performance optimization is a never-ending processa。随着spark用户的增长,我们还会找更多可以提升性能的地方。以下就要讲一些已有的性能提升的点了。

####Core Engine

Spark的用户接口(user-facing APIs)(SQL, streaming, machine learning)都是跑在一个通用的core execution engine的,对这个core engine进行优化就能够使得所有组件的性能得到提升。我们经常可以看到一些很神奇的事情。比如,当core developer对Spark Streaming进行优化的时候,我们发现SQL queris的速度也快了原来的两倍(become two times faster)。

在2014年,在core engine部分最主要的提升在通信上。首先,shuffle是一个在机器之间需要互相传递数据的操作,它是几乎所有workload的基础。例如,一个SQL请求要用shuffle把两个数据源的数据连接到一起放到用一个机器上,还有使用一个比如ALS的推荐算法,也需要把数据在网络上传输。

最近的两个Spark的发布版建立了一个新的sort-based shuffle layer和一个新的基于Netty的zero-copy的network layer。这两个优化使得spark在large-scale workloads下的鲁棒性更好。这两个改变也正是spark能够打败hadoop的关键。

除了shuffle,core developers还重写了spark的广播原语(primitive),使用了一个BitTorrent-like protocol来减少网络上的traffic。这个做法为需要给多个机器发送大参数的workloads提升了速度,包括SQL请求还有很多机器学习的算法。更多信息可以看这里

####Python API(PySpark)

Python可能是数据科学家(data scientists)中最流行的语言了。

Spark的core developers努力去降低Python和JVM之间性能的gap。特别的,PySpark可以运行在PyPy上,展现了PyPy just-in-time compiler的优势啊优势~反正主要思想就是让python更快不要拖后腿啊~

####SQL

一年前,Shark,一个早期的在Spark engine上的基于Hive的SQL被不建议使用了。现在Databricks做了一个新的基于Catalyst(a new query optimizer)的query engine。这在Databricks是一件很有争议的事情,因为做一个query engine是需要极大的投资的。一年之后,超过115个open source contributors参加了这个project,使得Catalyst成为了one of the most active open source query engines.

Spark SQL比Shark做得好得多。

####Machine learning(MLlib) and Graph Computation(GraphX)

反正就是提速了,没讲怎么提。

####DataFrames: Leveling the Field for Python and JVM

在Spark1.3,我们加入了一个new DataFrame API。这个API让Spark程序看起来更加简洁易懂。Spark可以用Catalyst去优化这些程序。

通过新的DataFrame API, Python程序也可以与JVM程序获得一样的性能了,因为Catalyst optimizer把DataFrame操作编译成了JVM的二进制代码。甚至有时候,这个性能会比手写的Scala代码还好。

Catalyst optimizer还会随着时间变得更智能,picking better logical optimizations and physical execution optimizations。例如,在将来,Spark will be able to leverage schema information to create a custom physical layout of data, 提高本地缓存、减少垃圾回收。这将会给Spark SQL和DataFrame programs带来好处。随着更多的libraries开始转而使用DataFrame API,他们也将从中受益得到优化。

Spark的目标是一同一个single platform,让用户能够得到最好效果的在任何数据处理上的分布式算法。我们将push the boundaries of performance,让Spark faster and more powerful for more users.

PS 感谢真三给我解释python和JVM之间的gap是怎么回事。