Apache Spark源码剖析

许鹏
前言 笔者接触Spark时间不算很长,而本书之所以能够出版,凭借的是浓厚的兴趣和执着之心。 这一切还要从Storm说起。笔者一直在做互联网相关工作,但接触大数据的时间并不长,当时Hadoop和Storm等非常红火,引起了笔者的“窥视”之心。从2013年开始,笔者打算看看Hadoop的源码实现,观察其代码规模,发觉所花时间可能会很长。恰好其时Storm风头正劲,于是转向Storm源码,0.8版的Storm代码规模不过20000行左右,感觉还是比较好入手的。 Storm源码分析期间,笔者还学习了Clojure、ZeroMQ、Thri、ZooKeeper、LMAXDisruptor等新技术,对于实时流数据处理算是有了一个大概的了解。由于听说在实时流数据处理领域Spark技术也很强悍,而且在容错性方面具有天生的优势,更引发了笔者的兴趣,为了弄清楚究竟,于是开始了Spark的源码走读过程。 笔者是以读Spark论文开始的,说老实话觉得晦涩难懂,因为无法将其映射到内存使用、进程启动、线程运行、消息传递等基本问题上。或许换个方法会更好,故笔者选择直接从源码入手,如此一来事情反而变简单了。在源码分析的过程中,笔者始终抓住资源分配、消息传递、容错处理等基本问题设问,然后一步步努力寻找答案,所有的问题渐渐迎刃而解。 笔者关于源码分析有一个心得,就是要紧紧把握住计算的基本模型,然后结合新分析问题的业务领域,将业务上的新问题转换到计算处理的老套路上来,然后就可以以不变应万变,而不被一些新技术名词晃花了眼。这里所说的老套路是指从操作系统的角度来看,如果能事先深度了解操作系统,将对分析一些新应用程序大有裨益。 Spark源码采用Scala语言编写,那么阅读Spark源码之前,是否一定要先学Scala呢?笔者个人以为不必,只要你有一些Java或C++编程语言的基础,就可以开始看Spark源码,遇到不懂…