前言
Spark是发源于美国加州大学伯克利分校AMPLab的大数据分析平台,它立足于内存计算,从多迭代批量处理出发,兼顾数据仓库、流处理和图计算等多种计算范式,是大数据系统领域的全栈计算平台。Spark当下已成为Apache基金会的顶级开源项目,拥有庞大的社区支持,技术也逐渐走向成熟。
为什么要写这本书
大数据还在如火如荼地发展着,突然之间,Spark就火了。还记得最开始接触Spark技术时资料匮乏,只有官方文档和源码可以作为研究学习的资料。写一本Spark系统方面的技术书籍,是我持续了很久的一个想法。由于学习和工作较为紧张,最初只是通过几篇笔记在博客中分享自己学习Spark过程的点滴,但是随着时间的推移,笔记不断增多,最终还是打算将笔记整理成书,也算是一个总结和分享。
在国外Yahoo!、Intel、Amazon、Cloudera等公司率先应用并推广Spark技术,在国内淘宝、腾讯、网易、星环等公司敢为人先,并乐于分享。在随后的发展中,IBM、MapR、Hortonworks、微策略等公司纷纷将Spark融进现有解决方案,并加入Spark阵营。Spark在工业界的应用也呈星火燎原之势。
随着Spark技术在国内的大范围落地、Spark中国峰会的召开,及各地meetup的火爆举行,开源软件Spark也因此水涨船高。随着大数据相关技术和产业的逐渐成熟,公司生产环境往往需要同时进行多种类型的大数据分析作业:批处理、各种机器学习、流式计算、图计算、SQL查询等。在Spark出现前,要在一个平台内同时完成以上数种大数据分析任务,就不得不与多套独立的系统打交道,这需要系统间进行代价较大的数据转储,但是这无疑会增加运维负担。
在1年之前,关注Spark的人和公司不多,由于它包含的软件种类多,版本升级较快,技术较为新颖,初学者难以在有限的时间内快速掌握Spark蕴含的价值。同时国内缺少一本实践与理论相结合的Spark书籍,很多Spark初学者和开发人员只能参考网络上零星的Spark技术相关博客,自己一点一滴地阅读源码和文档,缓慢地学习Spark。本书也正是为了解决上面的问题而编写的。
本书从一个系统化的视角,秉承大道至简的主导思想,介绍Spark中最值得关注的内容,讲解Spark部署、开发实战,并结合Spark的运行机制及拓展,帮读者开启Spark技术之旅。
本书特色
本书是国内首本系统讲解Spark编程实战的书籍,涵盖Spark技术的方方面面。
1)对Spark的架构、运行机制、系统环境搭建、测试和调优进行深入讲解,以期让读者知其所以然。讲述Spark最核心的技术内容,以激发读者的联想,进而衍化至繁。
2)实战部分不但给出编程示例,还给出可拓展的应用场景。
3)剖析BDAS生态系统的主要组件的原理和应用,让读者充分了解Spark生态系统。
本书的理论和实战安排得当,突破传统讲解方式,使读者读而不厌。
本书中一些讲解实操部署和示例的章节,比较适合作为运维和开发人员工作时手边的书;运行机制深入分析方面的章节,比较适合架构师和Spark研究人员,可帮他们拓展解决问题的思路。
读者对象
❏Spark初学者
❏Spark二次开发人员
❏Spark应用开发人员
❏Spark运维工程师
❏开源软件爱好者
❏其他对大数据技术感兴趣的人员
如何阅读本书
本书分为两大部分,共计9章内容。
第1章从Spark概念出发,介绍了Spark的来龙去脉,阐述Spark生态系统全貌。
第2章详细介绍了Spark在Linux集群和Windows上如何进行部署和安装。
第3章详细介绍了Spark的计算模型,RDD的概念与原理,RDD上的函数算子的原理和使用,广播和累加变量。
第4章详细介绍了Spark应用执行机制、Spark调度与任务分配、Spark I/O机制、Spark通信模块、容错机制、Shuffle机制,并对Spark机制原理进行了深入剖析。
第5章从实际出发,详细介绍了如何在Intellij、Eclipse中配置开发环境,如何使用SBT构建项目,如何使用SparkShell进行交互式分析、远程调试和编译Spark源码,以及如何构建Spark源码阅读环境。
第6章由浅入深,详细介绍了Spark的编程案例,通过WordCount、Top K到倾斜连接等,以帮助读者快速掌握开发Spark程序的技巧。
第7章展开介绍了主流的大数据Benchmark的原理,并对比了Benchmark优劣势,指导Spark系统性能测试和性能问题诊断。
第8章围绕Spark生态系统,介绍了Spark之上的SQL on Spark、Spark Streaming、GraphX、MLlib的原理和应用。
第9章详细介绍了如何对Spark进行性能调优,以及调优方法的原理。
如果您是一位有着一定经验的资深开发人员,能够理解Spark的相关基础知识和使用技巧,那么可以直接阅读4章、7章、8章、9章。如果你是一名初学者,请一定从第1章的基础知识开始学起。
勘误和支持
由于笔者的水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果您有更多的宝贵意见,欢迎访问我的个人Github上的Spark大数据处理专版:https://github.com/YanjieGao/SparkInAction,您可以将书中的错误提交PR或者进行评论,我会尽量在线上为读者提供最满意的解答。您也可以通过微博@高彦杰gyj、微信公共号@Spark大数据、博客http://blog.csdn.net/gaoyanjie55或者邮箱gaoyanjie55@163.com联系到我,期待能够得到读者朋友们的真挚反馈,在技术之路上互勉共进。
致谢
感谢中国人民大学的杜小勇老师、何军老师、陈跃国老师,是老师们将我带进大数据技术领域,教授我专业知识与学习方法,并在每一次迷茫时给予我鼓励与支持。
感谢微软亚洲研究院的闫莺老师和其他老师及同事,在实习工作中给予我的帮助和指导。
感谢IBM中国研究院的陈冠诚老师和其他老师及同事,在实习工作中给予我的帮助和指导。
感谢连城、明风、Daoyuan Wang等大牛以及Michael Armbrust、Reynold Xin、Sean Owen等多位社区大牛,在开发和技术学习中对我的点拨和指导,以及社区的各位技术专家们的博客文章。本书多处引用了他们的观点和思想。
感谢机械工业出版社华章公司的首席策划杨福川和编辑高婧雅,在近半年的时间中始终支持我的写作,给我鼓励和帮助,引导我顺利完成全部书稿。
特别致谢
最后,我要特别感谢我的女友蒋丹彤对我的支持,我为写作这本书,牺牲了很多陪伴你的时间。同时也要感谢你花了很大的精力帮助我进行书稿校对。正因为有了你的付出与支持,我才能坚持写下去。
感谢我的父母、姐姐,有了你们的帮助和支持,我才有时间和精力去完成全部写作。
谨以此书献给我最亲爱的家人,以及众多热爱大数据技术的朋友们!