前言 在这个互联网数据爆发的时代,在大数据的浪潮中,各种分布式计算框架、资源调度框架层出不穷。计算速度慢的终究会落地,曾经辉煌的MapReduce也成为历史。先进的内存迭代式计算框架Spark成为大数据计算的主导。 然而有优秀的计算框架,并不一定就能写出高效的处理程序,就如同一辆兰博基尼行驶在颠簸的乡间小路上一般,纵使有 很大的马力,也没有发挥的余地。所以在企业级开发中,Spark性能的优化才能将Spark的性能发挥得淋漓尽致。 一辆车能跑多快不仅仅取决于引擎的动力,车轮、避震、跑道等因素也会对其造成影响。一个Spark程序能够运行多快,同样不单单由Spark本身决定,用户 编写的程序、CPU、内存、磁盘、网络等因素都会对 程序的运行产生影响。正因为如此,一个程序真正的调优并不简单,对 程序的性能瓶颈的定位更加困难。市面上虽有很多介绍Spark的书籍,但大部分对性能调优部分只是一笔带过, 只说明要调节哪些参数,对于为什么需要调节、原理如何、调节后的效果如何 等介绍得甚少,于是便有了本书。 本书以Spark内部实现原理为指导,对其运行过程中的每个组件都进行了详细剖析,以理论指导各种参数的调节,以结果证明理论的正确性。如果从宏观上来看本书,各个章节的理论分析能够使读者更加快速地定位程序运行的瓶颈,解决实际生产中的问题。本书具有以下优点。 (1) 目标针对性强。 本书针对大数据技术开发者,适合想要使用Spark但对Spark原理不太了解的读者。同时,本书更适合对性能优化有需求的大数据开发工程师。本书不太适合没有Linux基础或Spark开发基础的读者。 (2) 内容与时俱进。 作为分布式计算框架的领军者,Spark的发展可谓相当迅速,截至本书写作之时,Spark最新的版本为Spark 2.4.0,本书所有功能均针对Spark 2.4.0功能进行介绍。在内核源码分析部分使用Spark 2.2.0源码为基础进行剖析。 (3) 理论结合实践。 本书以Spark内核运行原理为指导,使用了大量图表来描述Spark各个环节的运行过程。以理论指导每个调优参数背后影响的过程,让读者不仅知其然,而且知其所以然。同时,本书提供了大量操作示例并提供示例的运行结果,让枯燥的理论不再乏味。读者可以跟随书中的内容同步进行操作。本书每个示例中提供的代码均提供源码下载,读者可扫描下方二维码下载。 源代码 (4) 真实的生产实践。 本书所有调优均来自真实的生产实践,并将主要问题简化后通过实验方式表达出来。大部分实验围绕Spark的优化进行,有一些实验围绕系统的优化来进行,如内存、网络等方面。这也表明在真实的生产环境中,对Spark程序的调优只是优化的一部分,还有其他方面的优化。 本书的作者为吕云翔、郭宇光,曾洪立也参与了部分内容的编写和辅助教材的制作工作。 由于实验环境条件有限,性能影响因素众多,同时限于作者水平,书中难免有疏漏之处,恳请广大读者批评指正。 作者2020年9月