编辑推荐

  基于*新的Spark2.2.X版本,分为内核解密篇,商业案例篇,性能调优篇,共31章,学习过程中有任何疑问,可加入QQ群,有专业人员答疑解惑。

内容简介

  《Spark大数据商业实战三部曲:内核解密|商业案例|性能调优》基于Spark2.2.X,以Spark商业案例实战和Spark在生产环境下几乎所有类型的性能调优为核心,以Spark内核解密为基石,分为上篇、中篇、下篇,对企业生产环境下的Spark商业案例与性能调优抽丝剥茧地进行剖析。上篇基于Spark源码,从一个动手实战案例入手,循序渐进地全面解析了Spark2.2新特性及Spark内核源码;中篇选取Spark开发中*具有代表的经典学习案例,深入浅出地介绍,在案例中综合应用Spark的大数据技术;下篇性能调优内容基本完全覆盖了Spark在生产环境下的所有调优技术。

目录

上篇内核解密
第1章电光石火间体验Spark2.2开发实战2
1.1通过RDD实战电影点评系统入门及源码阅读2
1.1.1Spark核心概念图解2
1.1.2通过RDD实战电影点评系统案例4
1.2通过DataFrame和DataSet实战电影点评系统7
1.2.1通过DataFrame实战电影点评系统案例7
1.2.2通过DataSet实战电影点评系统案例10
1.3Spark2.2源码阅读环境搭建及源码阅读体验11
第2章Spark2.2技术及原理14
2.1Spark2.2综述14
2.1.1连续应用程序14
2.1.2新的API15
2.2Spark2.2Core16
2.2.1第二代Tungsten引擎16
2.2.2SparkSession16
2.2.3累加器API17
2.3Spark2.2SQL19
2.3.1SparkSQL20
2.3.2DataFrame和DatasetAPI20
2.3.3TimedWindow21
2.4Spark2.2Streaming21
2.4.1StructuredStreaming21
2.4.2增量输出模式23
2.5Spark2.2MLlib27
2.5.1基于DataFrame的MachineLearningAPI28
2.5.2R的分布式算法28
2.6Spark2.2GraphX29
第3章Spark的灵魂:RDD和DataSet30
3.1为什么说RDD和DataSet是Spark的灵魂30
3.1.1RDD的定义及五大特性剖析30
3.1.2DataSet的定义及内部机制剖析34
3.2RDD弹性特性七个方面解析36
3.3RDD依赖关系43
3.3.1窄依赖解析43
3.3.2宽依赖解析45
3.4解析Spark中的DAG逻辑视图46
3.4.1DAG生成的机制46
3.4.2DAG逻辑视图解析47
3.5RDD内部的计算机制49
3.5.1Task解析49
3.5.2计算过程深度解析49
3.6SparkRDD容错原理及其四大核心要点解析57
3.6.1SparkRDD容错原理57
3.6.2RDD容错的四大核心要点57
3.7SparkRDD中Runtime流程解析59
3.7.1Runtime架构图59
3.7.2生命周期60
3.8通过WordCount实战解析SparkRDD内部机制70
3.8.1SparkWordCount动手实践70
3.8.2解析RDD生成的内部机制72
3.9基于DataSet的代码到底是如何一步步转化成为RDD的78
第4章SparkDriver启动内幕剖析81
4.1SparkDriverProgram剖析81
4.1.1SparkDriverProgram81
4.1.2SparkContext深度剖析81
4.1.3SparkContext源码解析82
4.2DAGScheduler解析96
4.2.1DAG的定义96
4.2.2DAG的实例化97
4.2.3DAGScheduler划分Stage的原理98
4.2.4DAGScheduler划分Stage的具体算法99
4.2.5Stage内部Task获取最佳位置的算法113
4.3TaskScheduler解析116
4.3.1TaskScheduler原理剖析116
4.3.2TaskScheduler源码解析117
4.4SchedulerBackend解析132
4.4.1SchedulerBackend原理剖析132
4.4.2SchedulerBackend源码解析132
4.4.3Spark程序的注册机制133
4.4.4Spark程序对计算资源Executor的管理134
4.5打通Spark系统运行内幕机制循环流程135
4.6本章总结145
第5章Spark集群启动原理和源码详解146
5.1Master启动原理和源码详解146
5.1.1Master启动的原理详解146
5.1.2Master启动的源码详解147
5.1.3MasterHA双机切换157
5.1.4Master的注册机制和状态管理解密163
5.2Worker启动原理和源码详解170
5.2.1Worker启动的原理流程170
5.2.2Worker启动的源码详解174
5.3ExecutorBackend启动原理和源码详解178
5.3.1ExecutorBackend接口与Executor的关系178
5.3.2ExecutorBackend的不同实现179
5.3.3ExecutorBackend中的通信181
5.3.4ExecutorBackend的异常处理183
5.4Executor中任务的执行184
5.4.1Executor中任务的加载184
5.4.2Executor中的任务线程池185
5.4.3任务执行失败处理186
5.4.4揭秘TaskRunner188
5.5Executor执行结果的处理方式189
5.6本章总结197
第6章SparkApplication提交给集群的原理和源码详解198
6.1SparkApplication到底是如何提交给集群的198
6.1.1Application提交参数配置详解198
6.1.2Application提交给集群原理详解199
6.1.3Application提交给集群源码详解201
6.2SparkApplication是如何向集群申请资源的211
6.2.1Application申请资源的两种类型详解211
6.2.2Application申请资源的源码详解213
6.3从Application提交的角度重新审视Driver219
6.3.1Driver到底是什么时候产生的220
6.3.2Driver和Master交互原理解析238
6.3.3Driver和Master交互源码详解244
6.4从Application提交的角度重新审视Executor249
6.4.1Executor到底是什么时候启动的249
6.4.2Executor如何把结果交给Application254
6.5Spark1.6RPC内幕解密:运行机制、源码详解、Netty与Akka等254
6.6本章总结267
第7章Shuffle原理和源码详解268
7.1概述268
7.2Shuffle的框架269
7.2.1Shuffle的框架演进269
7.2.2Shuffle的框架内核270
7.2.3Shuffle框架的源码解析272
7.2.4Shuffle数据读写的源码解析275
7.3HashBasedShuffle281
7.3.1概述281
7.3.2HashBasedShuffle内核282
7.3.3HashBasedShuffle数据读写的源码解析285
7.4SortedBasedShuffle290
7.4.1概述292
7.4.2SortedBasedShuffle内核293
7.4.3SortedBasedShuffle数据读写的源码解析294
7.5TungstenSortedBasedShuffle302
7.5.1概述302
7.5.2TungstenSortedBasedShuffle内核302
7.5.3TungstenSortedBasedShuffle数据读写的源码解析303
7.6Shuffle与Storage模块间的交互309
7.6.1Shuffle注册的交互310
7.6.2Shuffle写数据的交互314
7.6.3Shuffle读数据的交互315
7.6.4BlockManager架构原理、运行流程图和源码解密315
7.6.5BlockManager解密进阶:BlockManager初始化和注册解密、BlockManager-Master工作解密、BlockTransferService解密、本地数据读写解密、远程数据读写解密324
7.7本章总结341
第8章Job工作原理和源码详解342
8.1Job到底在什么时候产生342
8.1.1触发Job的原理和源码解析342
8.1.2触发Job的算子案例344
8.2Stage划分内幕345
8.2.1Stage划分原理详解345
8.2.2Stage划分源码详解346
8.3Task全生命周期详解346
8.3.1Task的生命过程详解347
8.3.2Task在Driver和Executor中交互的全生命周期原理和源码详解348
8.4ShuffleMapTask和ResultTask处理结果是如何被Driver管理的364
8.4.1ShuffleMapTask执行结果和Driver的交互原理及源码详解364
8.4.2ResultTask执行结果与Driver的交互原理及源码详解370
第9章Spark中Cache和checkpoint原理和源码详解372
9.1Spark中Cache原理和源码详解372
9.1.1Spark中Cache原理详解372
9.1.2Spark中Cache源码详解372
9.2Spark中checkpoint原理和源码详解381
9.2.1Spark中checkpoint原理详解381
9.2.2Spark中checkpoint源码详解381
第10章Spark中Broadcast和Accumulator原理和源码详解391
10.1Spark中Broadcast原理和源码详解391
10.1.1Spark中Broadcast原理详解391
10.1.2Spark中Broadcast源码详解393
10.2Spark中Accumulator原理和源码详解396
10.2.1Spark中Accumulator原理详解396
10.2.2Spark中Accumulator源码详解396
第11章Spark与大数据其他经典组件整合原理与实战399
11.1Spark组件综合应用399
11.2Spark与Alluxio整合原理与实战400
11.2.1Spark与Alluxio整合原理400
11.2.2Spark与Alluxio整合实战401
11.3Spark与JobServer整合原理与实战403
11.3.1Spark与JobServer整合原理403
11.3.2Spark与JobServer整合实战404
11.4Spark与Redis整合原理与实战406
11.4.1Spark与Redis整合原理406
11.4.2Spark与Redis整合实战407
中篇商业案例
第12章Spark商业案例之大数据电影点评系统应用案例412
12.1通过RDD实现分析电影的用户行为信息412
12.1.1搭建IDEA开发环境412
12.1.2大数据电影点评系统中电影数据说明425
12.1.3电影点评系统用户行为分析统计实战428
12.2通过RDD实现电影流行度分析431
12.3通过RDD分析各种类型的最喜爱电影TopN及性能优化技巧433
12.4通过RDD分析电影点评系统仿QQ和微信等用户群分析及广播
背后机制解密436
12.5通过RDD分析电影点评系统实现Java和Scala版本的二次排序系统439
12.5.1二次排序自定义Key值类实现(Java)440
12.5.2电影点评系统二次排序功能实现(Java)442
12.5.3二次排序自定义Key值类实现(Scala)445
12.5.4电影点评系统二次排序功能实现(Scala)446
12.6通过SparkSQL中的SQL语句实现电影点评系统用户行为分析447
12.7通过SparkSQL下的两种不同方式实现口碑最佳电影分析451
12.8通过SparkSQL下的两种不同方式实现最流行电影分析456
12.9通过DataFrame分析最受男性和女性喜爱电影TopN457
12.10纯粹通过DataFrame分析电影点评系统仿QQ和微信、淘宝等用户群460
12.11纯粹通过DataSet对电影点评系统进行流行度和不同年龄阶段兴趣分析等462
12.11.1通过DataSet实现某特定电影观看者中男性和女性不同年龄的人数463
12.11.2通过DataSet方式计算所有电影中平均得分最高
(口碑最好)的电影TopN464
12.11.3通过DataSet方式计算所有电影中粉丝或者观看人数最多(最流行电影)的电影TopN465
12.11.4纯粹通过DataSet的方式实现所有电影中最受男性、女性喜爱的
电影Top10466
12.11.5纯粹通过DataSet的方式实现所有电影中QQ或者微信核心目标
用户最喜爱电影TopN分析467
12.11.6纯粹通过DataSet的方式实现所有电影中淘宝核心目标用户最喜爱电影TopN分析469
12.12大数据电影点评系统应用案例涉及的核心知识点原理、源码及案例代码470
12.12.1知识点:广播变量Broadcast内幕机制470
12.12.2知识点:SQL全局临时视图及临时视图473
12.12.3大数据电影点评系统应用案例完整代码474
12.13本章总结496
第13章Spark2.2实战之Dataset开发实战企业人员管理系统应用案例498

精彩书摘

  第5章Spark集群启动原理和源码详解
  本章深入讲解Spark集群启动原理和源码。5.1节讲解Master启动原理和源码;5.2节讲解Worker启动原理和源码;5.3节阐述了ExecutorBackend启动原理和源码、ExecutorBackend接口与Executor的关系、ExecutorBackend的不同实现、ExecutorBackend中的通信及异常处理;5.4节讲解Executor中任务的执行、加载、任务线程池、任务执行失败处理、TaskRunner运行内幕;5.5节讲解Executor执行结果的处理方式。
  5.1Master启动原理和源码详解
  本节讲解Master启动的原理和源码;MasterHA双机切换;Master的注册机制和状态管理解密等内容。
  5.1.1Master启动的原理详解
  Spark应用程序作为独立的集群进程运行,由主程序中的SparkContext对象(称为驱动程序)协调。Spark集群部署组件图5-1所示。
  图5-1Spark集群部署组件图
  其中各个术语及相关术语的描述如下。
  (1)DriverProgram:运行Application的main函数并新建SparkContext实例的程序,称为驱动程序(DriverProgram)。通常可以使用SparkContext代表驱动程序。
  (2)ClusterManager:集群管理器(ClusterManager)是集群资源管理的外部服务。Spark上现在主要有Standalone、YARN、Mesos3种集群资源管理器。Spark自带的Standalone模式能够满足绝大部分纯粹的Spark计算环境中对集群资源管理的需求,基本上只有在集群中运行多套计算框架的时候才建议考虑YARN和Mesos。
  (3)WorkerNode:集群中可以运行Application代码的工作节点(WorkerNode),相当于Hadoop的Slave节点。
  (4)Executor:在WorkerNode上为Application启动的一个工作进程,在进程中负责任务(Task)的运行,并且负责将数据存放在内存或磁盘上,在Executor内部通过多线程的方式(即线程池)并发处理应用程序的具体任务。
  每个Application都有各自独立的Executors,因此应用程序之间是相互隔离的。
  (5)Task:任务(Task)是指被Driver送到Executor上的工作单元。通常,一个任务会处理一个Partition的数据,每个Partition一般是一个HDFS的Block块的大小。
  (6)Application:是创建了SparkContext实例对象的Spark用户程序,包含了一个Driverprogram和集群中多个Worker上的Executor。
  (7)Job:和Spark的action对应,每个action,如count、savaAsTextFile等都会对应一个Job实例,每个Job会拆分成多个Stages,一个Stage中包含一个任务集(TaskSet),任务集中的各个任务通过一定的调度机制发送到工作单位(Executor)上并行执行。
  SparkStandalone集群的部署采用典型的Master/Slave架构。其中,Master节点负责整个集群的资源管理与调度,Worker节点(也可以称Slave节点)在Master节点的调度下启动Executor,负责执行具体工作(包括应用程序以及应用程序提交的任务)。
  5.1.2Master启动的源码详解
  Spark中各个组件是通过脚本来启动部署的。下面以脚本为入口点开始分析Master的部署。每个组件对应提供了启动的脚本,同时也会提供停止的脚本。停止脚本比较简单,在此仅分析启动脚本。
  1.Master部署的启动脚本解析
  首先看一下Master的启动脚本./sbin/start-master.sh,内容如下。
  1.#在脚本的执行节点启动Master组件
  2.
  3.#如果没有设置环境变量SPARK_HOME,会根据脚本所在位置自动设置
  4.if[-z"${SPARK_HOME}"];then
  5.exportSPARK_HOME="$(cd"`dirname"$0"`"/..;pwd)"
  6.fi
  7.
  8.#注:提取的类名必须和SparkSubmit的类相匹配。任何变化都需在类中进行反映
  ……

前言/序言

  前言
  大数据像当年的石油、人工智能(ArtificialIntelligence)像当年的电力一样,正以前所未有的广度和深度影响所有的行业,现在及未来公司的核心壁垒是数据,核心竞争力来自基于大数据的人工智能的竞争。Spark是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台,2009年诞生于美国加州大学伯克利分校AMP实验室,2010年正式开源,2013年成为Apache基金项目,2014年成为Apache基金的顶级项目。基于RDD,Spark成功构建起了一体化、多元化的大数据处理体系。
  在任何规模的数据计算中,Spark在性能和扩展性上都更具优势。
  (1)Hadoop之父DougCutting指出:UseofMapReduceengineforBigDataprojectswilldecline,replacedbyApacheSpark(大数据项目的MapReduce引擎的使用将下降,由ApacheSpark取代。)
  (2)Hadoop商业发行版本的市场领导者Cloudera、HortonWorks、MapR纷纷转投Spark,并把Spark作为大数据解决方案的首选和核心计算引擎。
  2014年的SortBenchmark测试中,Spark秒杀Hadoop,在使用十分之一计算资源的情况下,相同数据的排序上,Spark比MapReduce快3倍!在没有官方PB排序对比的情况下,首次将Spark推到了1PB数据(十万亿条记录)的排序,在使用190个节点的情况下,工作负载在4小时内完成,同样远超雅虎之前使用3800台主机耗时16个小时的记录。
  2015年6月,Spark最大的集群来自腾讯——8000个节点,单个Job最大分别是阿里巴巴和Databricks——1PB,震撼人心!同时,Spark的Contributor比2014年涨了3倍,达到730人;总代码行数也比2014年涨了2倍多,达到40万行。IBM于2015年6月承诺大力推进ApacheSpark项目,并称该项目为:以数据为主导的,未来十年最重要的新的开源项目。这一承诺的核心是将Spark嵌入IBM业内领先的分析和商务平台,并将Spark作为一项服务,在IBMBluemix平台上提供给客户。IBM还将投入超过3500名研究和开发人员在全球10余个实验室开展与Spark相关的项目,并将为Spark开源生态系统无偿提供突破性的机器学习技术——IBMSystemML。同时,IBM还将培养超过100万名Spark数据科学家和数据工程师。
  2016年,在有“计算界奥运会”之称的国际著名SortBenchmark全球数据排序大赛中,由南京大学计算机科学与技术系PASA大数据实验室、阿里巴巴和Databricks公司组成的参赛团队NADSort,以144美元的成本完成100TB标准数据集的排序处理,创下了每TB数据排序1.44美元成本的最新世界纪录,比2014年夺得冠军的加州大学圣地亚哥分校TritonSort团队每TB数据4.51美元的成本降低了近70%,而这次比赛依旧使用ApacheSpark大数据计算平台,在大规模并行排序算法以及Spark系统底层进行了大量的优化,以尽可能提高排序计算性能并降低存储资源开销,确保最终赢得比赛。
  在FullStack理想的指引下,Spark中的SparkSQL、SparkStreaming、MLLib、GraphX、R五大子框架和库之间可以无缝地共享数据和操作,这不仅打造了Spark在当今大数据计算领域其他计算框架都无可匹敌的优势,而且使得Spark正在加速成为大数据处理中心首选通用计算平台,而Spark商业案例和性能优化必将成为接下来的重中之重!
  《Spark大数据商业实战三部曲:内核解密 商业案例 性能调优》根据王家林老师亲授课程及结合众多大数据项目经验编写而成,其中王家林、段智华编写了《Spark大数据商业实战三部曲:内核解密 商业案例 性能调优》近90%的内容,具体编写章节如下:
  第3章Spark的灵魂:RDD和DataSet;
  第4章SparkDriver启动内幕剖析;
  第5章Spark集群启动原理和源码详解;
  第6章SparkApplication提交给集群的原理和源码详解;
  第7章Shuffle原理和源码详解;
  第8章Job工作原理和源码详解;
  第9章Spark中Cache和checkpoint原理和源码详解;
  第10章Spark中Broadcast和Accumulator原理和源码详解;
  第11章Spark与大数据其他经典组件整合原理与实战;
  第12章Spark商业案例之大数据电影点评系统应用案例;
  第13章Spark2.2实战之Dataset开发实战企业人员管理系统应用案例;
  第14章Spark商业案例之电商交互式分析系统应用案例;
  第15章Spark商业案例之NBA篮球运动员大数据分析系统应用案例;
  第16章电商广告点击大数据实时流处理系统案例;
  第17章Spark在通信运营商生产环境中的应用案例;
  第18章使用SparkGraphX实现婚恋社交网络多维度分析案例;
  第23章Spark集群中Mapper端、Reducer端内存调优;
  第24章使用Broadcast实现Mapper端Shuffle聚合功能的原理和调优实战;
  第25章使用Accumulator高效地实现分布式集群全局计数器的原理和调优案例;
  第27章Spark五大子框架调优最佳实践;
  第28章Spark2.2.0新一代钨丝计划优化引擎;
  第30章Spark性能调优之数据倾斜调优一站式解决方案原理与实战;
  第31章Spark大数据性能调优实战专业之路。
  其中,段智华根据自身多年的大数据工作经验对《Spark大数据商业实战三部曲:内核解密 商业案例 性能调优》的案例等部分进行了扩展。
  除上述章节外,剩余内容由夏阳、郑采翎、闫恒伟三位作者根据王家林老师的大数据授课内容而完成。
  在阅读《Spark大数据商业实战三部曲:内核解密 商业案例 性能调优》的过程中,如发现任何问题或有任何疑问,可以加入《Spark大数据商业实战三部曲:内核解密 商业案例 性能调优》的阅读群讨论,会有专人答疑。同时,该群也会提供《Spark大数据商业实战三部曲:内核解密 商业案例 性能调优》所用案例源码及《Spark大数据商业实战三部曲:内核解密 商业案例 性能调优》的配套学习视频。
  如果读者想要了解或者学习更多大数据相关技术,可以关注DT大数据梦工厂微信公众号DT_Spark,也可以通过YY客户端登录68917580永久频道直接体验。
  王家林老师的新浪微博是http://weibo.com/ilovepains/欢迎大家在微博上与作者进行互动。
  由于时间仓促,书中难免存在不妥之处,请读者谅解,并提出宝贵意见。
  王家林2017年中秋之夜于美国硅谷


其他推荐