Spark是业界公认的近几年发展快、受关注度的一体化多元化的大数据计算技术,可以同时满足不同业务场景和不同数据规模的大数据计算的需要。
本书首先通过代码实战的方式对学习Spark前必须掌握的Scala内容进行讲解并结合Spark源码的阅读来帮助读者快速学习Scala函数式编程与面向对象完美结合的编程艺术,接着对Hadoop和Spark集群安装部署以及Spark在不同集成开发环境的开发实战作出了详细的讲解,然后基于大量的实战案例来讲解Spark核心RDD编程并深度解密RDD的密码,并且通过实战的方式详解了TopN在Spark RDD中的实现,为了让读者彻底了解Spark,本书用了大量的篇幅详细解密了Spark的高可用性、内核架构、运行机制等内容。
Spark零基础实战这本书定位于零基础的学员,也可以作为有一定大数据Hadoop经验的从业者以及对大数据非常感兴趣的学生的本Spark入门书籍。
适读人群 :Spark零基础实战这本书定位于零基础的学员,也可以作为有一定大数据Hadoop经验的从业者以及对大数据非常感兴趣的学生的第一本Spark入门书籍。
编写内容具有创新点及实用性。
(1)新,基于Spark 1.6.0版本的书籍,
(2)书籍彻底细腻地解析Spark入门所需的Scala语言基础、Spark环境搭建、Spark应用实战,并以此为基础给出进一步的扩展知识;
(3)配备教学视频,方便学习者多媒体方式学习;
(4)全面覆盖各种源码、部署及开发环境的搭建,基于Scala与Java语言双语言给出实战案例及其深入解析。
大数据已经成为公众流行词多年,不管在业界还是在其他领域都紧随时代发展的潮流,人类社会的发展已经进入到大数据时代。我们生活的今天大到互联网公司,小到每一个个体或者每一台移动设备其每天都会产生海量的新数据,那么对于这些海量数据的处理就面临着巨大的考验,而在此过程中为了满足业务需要,各类技术如雨后春笋般出现并得到IT企业的实践应用和发展,就应对海量数据的处理框架而言,于2006年诞生的Hadoop,使业界掀起一股热潮,它改变了企业对数据的存储、处理和分析的过程,加速了大数据的发展,形成了自己的极其火爆的技术生态圈,并受到非常广泛的应用。而Spark在2009年初来源于伯克利大学的研究性项目,于美国加州大学伯克利分校的AMPLab实验室诞生,2010年实现开源并在2013年成为Apache的基金孵化器项目并在不到一年的时间成为其的项目,在短短几年的时间内获得极速发展并被各大互联网公司应用于实际项目中以实现海量数据的处理,可以毫不夸张地讲Spark是大数据时代发展的必然产物,势必会成为好的大数据处理框架之一。
根据Stackoverflow调查显示Spark是2016年IT从业者获得薪水的技术之一,从事Spark开发的IT人员年薪达到125000美元,从事Scala开发的IT人员年薪同从事Spark的IT人员保持一致的水平,可见Spark已经成为开发人员在大数据领域收入好的技术之一。了解Spark或者读过Spark源码的人都知道Spark主要是Scala语言开发的,而Scala语言是一门面向对象与函数式编程完美结合的语言。因此本书主要以零基础实战掌握Spark运行机制为导向详细对Scala的语法和重要知识点进行实战讲解,通过源码对Spark的内核架构进行剖析并赋予实战案例来引导读者能够在掌握Scala的同时快速进行Spark的深入学习。
Spark基于RDD(弹性分布式数据集)实现了一体化、多元化的大数据处理体系,是目前热门效的大数据领域的计算平台。Spark框架完美融合了Spark SQL、Spark Streaming、MLLib、GraphX子框架,使得各子框架之间实现数据共享和操作,强大的计算能力和集成化使得Spark在大数据计算领域具有得天独厚的优势,因此国际上很多大型互联网公司均使用Spark实现海量数据的处理,如国内的BAT等,有过千台节点组成的集群高效快速地处理每日生成的海量数据。
Spark在大数据处理领域的迅猛发展,给了很多互联网公司高效处理海量数据的方案,但是Spark人才的稀缺使得很多公司心有余而力不足,以至于不能将企业的生产力量化提高成了很多企业面临的主要问题,大数据Spark工程师的缺少直接制约了很多公司的转型和发展,在此情况下本书以零基础实战为主导,由基础部分细致地带领初学者从零基础入门直到深入学习Spark。本书主要面向的对象是预从事大数据领域的初学者、高校学生以及有一定大数据从事经验的工作人员等。
本书以零基础实战Spark为主导,首先实战讲解Scala基础语法与定义、Scala面向对象编程、Scala函数式编程、Scala类型系统模式匹配、Scala因式转换以及Scala并发编程等,基本包含了Scala所有重要内容并且每一部分在实战的同时配合Scala在Spark源码中的应用带领读者彻底理解Scala语言的艺术。其次对Spark源码在不同方式下的编译进行演示,对Hadoop不同模式的集群搭建、Spark集群的搭建以及Spark在IDE、IntelliJ IDEA不同工具下的实战和源码导入均作了细致讲解,相信通过源码的学习和不同工具下对Spark程序的开发实战可以帮助读者对Spark有一个全面的理解和认识,并能快速投入到实际开发中。然后对Spark中为重要的核心组件之一RDD(弹性分布式数据集)进行了详细地解析,并介绍Spark Master HA的4种策略,解密如何通过ZOOKEEPER这种企业经常使用的策略来保证Spark Master HA。本书后一部分综合讲解了Spark内核架构以及实战解析Spark在不同模式下的运行原理。希望本书可以引领读者细致高效地学习Spark框架,并成为企业渴求的Spark高端人才。
参与本书编写的有王家林、孔祥瑞等。本书能顺利出版,离不开化学工业出版社的大力支持与帮助,包括进度把控、技术服务、排版等各个方面,在此表示诚挚地感谢。
在本书阅读过程中,如发现任何问题或有任何疑问,可以加入本书的阅读群(QQ:302306504)提出讨论,会有专人帮忙答疑。同时,该群中也会提供本书所用案例代码。
如果读者想要了解或者学习更多大数据的相关技术,可以关注DT大数据梦工厂微信公众号DT_Spark及QQ群437123764,或者扫描下方二维码咨询,也可以通过YY客户端登录68917580频道直接体验。王家林老师的新浪微博是http://weibocom/ilovepains/ 欢迎大家在微博上进行互动。
由于时间仓促,书中难免存在不妥之处,请读者谅解,并提出宝贵意见。
王家林 2016.8.13于北京
王家林,DT大数据梦工厂/Spark亚太研究院,DT大数据梦工厂创始人/Spark亚太研究院院长及首席专家,DT 大数据梦工厂创始人和首席专家,Spark 亚太研究院院长和首席专家,移动互联网和大数据技术领域集大成者,多家公司的技术顾问,业界技术培训专家。
大数据技术公益推广人,大数据在线教育世界技术专家,Spark 大数据中国区培训专家。彻底研究了Spark 从0.5.0 到1.6.1 中共22 个版本的Spark 源码,目前致力于开发全球优化的Spark 中国版本。尤其擅长Spark 在生产环境下各种类型和场景故障的排除和解决,痴迷于Spark 生产环境下任意类型(例如Shuffle 和各种内存问题)的Spark 程序的深度性能优化。
从2014 年6 月24 日起,已开启免费的Spark 公开课《决胜大数据时代Spark100 期公益大讲堂》。在2015 年12 月27 日成立DT 大数据梦工厂,开启IMF(Impossible Mission Force)行动,率先在全球开展以Spark 为核心的,免费为社会培养100 万企业级实战高级大数据人才行动计划,截止目前已有数千人参与到这个行动之中。
曾负责某公司的类Hadoop 框架开发工作,是Hadoop 一站式解决方案的提供者,同时也是云计算和分布式大数据处理的较早实践者之一,在实践中用Hadoop 解决不同领域的大数据的高效处理和存储。致力于Android、HTML5、Hadoop 等的软、硬、云整合的一站式解决方案专家。
2007 年国内较早从事于Android 系统移植、软硬整合、框架修改、应用程序软件开发以及Android 系统测试和应用软件测试的技术专家。
2015年12月,在电视媒体录制了《大数据的奥秘》,《大数据时代的九大神器》等视频光盘。
? 2016年1月至今,直播培训课程Hadoop,MySQL,Linux,Scala,Java,Spark零基础到高级企业级实战,Spark源码解析及性能优化,JVM性能调优,机器学习从零基础到企业级实战持续中。
第1章Scala光速入门1
1.1Scala基础与语法入门实战1
1.1.1Scala基本数据类型1
1.1.2Scala变量声明2
1.1.3算术操作符介绍2
1.1.4条件语句5
1.1.5循环6
1.1.6异常控制8
1.2Scala中Array、Map等数据结构实战10
1.2.1定长数组和可变数组10
1.2.2数组常用算法10
1.2.3Map映射11
1.2.4Tuple元组12
1.2.5List列表12
1.2.6Set集合14
1.2.7Scala集合方法大全15
1.2.8综合案例及Spark源码解析17
1.3小结18
第2章Scala面向对象彻底精通及Spark源码阅读19
2.1Scala面向对象详解19
2.1.1Scala中的class、object初介绍19
2.1.2主构造器与辅助构造器22
2.1.3类的字段和方法彻底精通23
2.1.4抽象类、接口的实战详解24
2.1.5Scala Option类详解26
2.1.6object的提取器27
2.1.7Scala的样例类实战详解27
2.2Scala综合案例及Spark源码解析28
2.3小结29
第3章Scala函数式编程彻底精通及Spark源码阅读30
3.1函数式编程概述30
3.2函数定义35
3.3函数式对象37
3.4本地函数41
3.5头等函数42
3.6函数字面量和占位符43
3.6.1Scala占位符43
3.6.2函数字面量43
3.6.3部分应用函数44
3.7闭包和Curring46
3.8高阶函数49
3.9从Spark源码角度解析Scala函数式编程55
3.10小结57
第4章Scala模式匹配、类型系统彻底精通与Spark源码阅读58
4.1模式匹配语法58
4.2模式匹配实战59
4.2.1模式匹配基础实战59
4.2.2数组、元祖实战59
4.2.3Option实战60
4.2.4提取器60
4.2.5Scala异常处理与模式匹配61
4.2.6sealed密封类62
4.3类型系统62
4.3.1泛型62
4.3.2边界63
4.3.3协变与逆变63
4.4Spark源码阅读64
4.5小结65
第5章Scala隐式转换等彻底精通及Spark源码阅读66
5.1隐式转换66
5.1.1隐式转换的使用条件66
5.1.2隐式转换实例66
5.2隐式类68
5.3隐式参数详解68
5.4隐式值69
5.5Spark源码阅读解析69
5.6小结70
第6章并发编程及Spark源码阅读71
6.1并发编程彻底详解71
6.1.1actor工作模型71
6.1.2发送消息72
6.1.3回复消息74
6.1.4actor创建74
6.1.5用上下文context创建actor75
6.1.6用ActorSystem创建actor76
6.1.7用匿名类创建actor76
6.1.8actor生命周期77
6.1.9终止actor78
6.1.10actor实战80
6.2小结82
第7章源码编译83
7.1Windows下源码编译83
7.1.1下载Spark源码83
7.1.2Sbt方式84
7.1.3Maven方式89
7.1.4需要注意的几个问题90
7.2Ubuntu下源码编译92
7.2.1下载Spark源码93
7.2.2Sbt方式95
7.2.3Maven方式96
7.2.4makedistribution.sh脚本方式98
7.2.5需要注意的几个问题99
7.3小结100
第8章Hadoop分布式集群环境搭建101
8.1搭建Hadoop单机环境101
8.1.1安装软件下载101
8.1.2Ubuntu系统的安装101
8.1.3Hadoop集群的安装和设置109
8.1.4Hadoop单机模式下运行WordCount示例113
8.2Hadoop伪分布式环境115
8.2.1Hadoop伪分布式环境搭建115
8.2.2Hadoop伪分布式模式下运行WordCount示例117
8.3Hadoop完全分布式环境120
8.3.1Hadoop完全分布式环境搭建120
8.3.2Hadoop完全分布式模式下运行WordCount示例123
8.4小结125
第9章精通Spark集群搭建与测试127
9.1Spark集群所需软件的安装127
9.1.1安装JDK127
9.1.2安装Scala130
9.2Spark环境搭建132
9.2.1Spark单机与单机伪分布式环境132
9.2.2Spark Standalone集群环境搭建与配置135
9.2.3Spark Standalone环境搭建的验证136
9.3Spark集群的测试137
9.3.1通过sparkshell脚本进行测试137
9.3.2通过sparksubmit脚本进行测试145
9.4小结145
第10章Scala IDE开发Spark程序实战解析146
10.1Scala IDE安装146
10.1.1Ubuntu系统下安装146
10.1.2Windows系统下安装147
10.2ScalaIDE开发重点步骤详解148
10.3Wordcount创建实战152
10.4Spark源码导入Scala IDE154
10.5小结164
第11章实战详解IntelliJ IDEA下的Spark程序开发165
11.1IDEA安装165
11.1.1Ubuntu系统下安装165
11.1.2Windows系统下安装167
11.2IDEA开发重点步骤详解168
11.2.1环境配置168
11.2.2项目创建170
11.2.3Spark包引入174
11.3Wordcount创建实战174
11.4IDEA导入Spark源码177
11.5小结183
第12章Spark简介184
12.1Spark发展历史184
12.2Spark在国内外的使用185
12.3Spark生态系统简介188
12.3.1Hadoop生态系统189
12.3.2BDAS生态系统195
12.3.3其他199
12.4小结199
第13章Spark RDD解密200
13.1浅谈RDD200
13.2创建RDD的几种常用方式204
13.3Spark RDD API解析及其实战206
13.4RDD的持久化解析及其实战217
13.5小结218
第14章Spark程序之分组TopN开发实战解析219
14.1分组TopN动手实战219
14.1.1Java之分组TopN开发实战219
14.1.2Scala之分组TopN开发实战226
14.2Scala之分组TopN运行原理解密232
14.2.1textFile232
14.2.2map234
14.2.3groupByKey234
14.3小结237
第15章MasterHA工作原理解密238
15.1Spark需要Master HA的原因238
15.2Spark Master HA的实现238
15.3Spark和ZOOKEEPER的协同工作机制240
15.4ZOOKEEPER实现应用实战242
15.5小结247
第16章Spark内核架构解密248
16.1Spark的运行过程248
16.1.1SparkContext的创建过程248
16.1.2Driver的注册过程249
16.1.3Worker中任务的执行254
16.1.4任务的调度过程255
16.1.5Job执行结果的产生257
16.2小结259
第17章Spark运行原理实战解析260
17.1用户提交程序Driver端解析260
17.1.1SparkConf解析263
17.1.2SparkContext解析264
17.1.3DAGScheduler创建271
17.1.4TaskScheduler创建272
17.1.5SchedulerBackend创建273
17.1.6Stage划分与TaskSet生成274
17.1.7任务提交280
17.2Spark运行架构解析283
17.2.1Spark基本组件介绍283
17.2.2Spark的运行逻辑285
17.3Spark在不同集群上的运行架构291
17.3.1Spark在Standalone模式下的运行架构291
17.3.2Spark on yarn的运行架构294
17.3.3Spark在不同模式下的应用实战297
17.4Spark运行架构的实战解析300
17.5小结307