大数据科学丛书 Spark 内核机制解析及性能调优
作者:王家林等编
出版时间:2017
丛编项: 大数据科学丛书
内容简介
本书致力于Spark内核的深入解析,带领读者掌握Spark内核的各个关键知识点。具体内容由详细讲述RDD提供的功能以及内部实现的机制开始,通过源码引导读者深入理解Spark的集群部署的内部机制、Spark内部调度的机制、Executor的内部机制、Shuffle的内部机制,进而讲述Tungsten的内部机制,接着又进一步深入分析了SparkStreaming的内部机制。本书的后部分,是任何Spark应用者都非常关注的Spark性能调优的内容。本书可以使读者对Spark内核有更深入彻底的理解,从而实现对Spark系统深度调优、Spark生产环境下故障的定位和排除、Spark的二次开发和系统高级运维。本书的每章开篇均有重点介绍以引导读者有目的有重点的阅读或查阅。本书适合于对大数据开发有兴趣的在校学生。同时,对有分布式计算框架应用经验的人员,本书也可以作为Spark源码解析的参考书籍。
目录
前言
第1章RDD功能解析
1.1RDD产生的技术背景及功能
1.2RDD的基本概念
1.2.1RDD的定义
1.2.2RDD五大特性
1.2.3RDD弹性特性的7个方面
1.3创建RDD的方式
1.3.1通过已经存在的Scala集合创建RDD
1.3.2通过HDFS和本地文件系统创建RDD
1.3.3其他的RDD的转换
1.3.4其他的RDD的创建
1.4RDD算子
1.5RDD的Transformation算子
1.5.1Transformation的定义
1.5.2Transformation在RDD中的角色定位及功能
1.5.3Transformation操作的Lazy特性
1.5.4通过实践说明Transformation的Lazy特性
1.6RDD的Action算子
1.6.1Action的定义
1.6.2Action 在RDD中的角色定位及功能
1.7小结
第2章RDD的运行机制
2.1RDD依赖关系
2.1.1窄依赖(Narrow Dependency)
2.1.2宽依赖(Shuffle Dependency)
2.2有向无环图(Directed Acyclic Graph,DAG)
2.2.1什么是DAG
2.2.2DAG的生成机制
2.2.3DAG的逻辑视图
2.3RDD内部的计算机制
2.3.1RDD的计算任务(Task)
2.3.2RDD的计算过程
2.4RDD中缓存的适用场景和工作机制
2.4.1缓存的使用
2.4.2缓存的适用场景
2.4.3缓存工作机制解析
2.5RDD的检查点(Checkpoint)的适用场景和工作机制
2.5.1Checkpoint的触发
2.5.2Checkpoint的适用场景
2.5.3Checkpoint工作机制解析
2.6RDD容错原理及其四大核心要点
2.6.1RDD容错原理
2.6.2RDD容错的四大核心要点
2.7通过WordCount实践RDD内部机制
2.7.1WordCount案例实践
2.7.2解析RDD生成的内部机制
2.8小结
第3章部署模式(Deploy)解析
3.1部署模式概述
3.2应用程序的部署
3.2.1应用程序部署的脚本解析
3.2.2应用程序部署的源代码解析
3.3Local与Local-Cluster部署
3.3.1Local部署
3.3.2Local[*]与Local[N]部署
3.3.3Local[*,M]与Local[N,M]部署
3.3.4Local-Cluster[S,C,M]部署
3.4Spark Standalone部署
3.4.1部署框架
3.4.2应用程序的部署
3.4.3Master的部署
3.4.4Worker的部署
3.4.5内部交互的消息机制
3.4.6Master HA的部署
3.5Spark on YARN的部署模型
3.5.1部署框架
3.5.2应用程序的部署
3.6小结
第4章Spark调度器(Scheduler)运行机制
4.1Spark运行的核心概念
4.1.1Spark运行的基本对象
4.1.2Spark运行框架及各组件的基本运行原理
4.2Spark Driver Program剖析
4.2.1什么是Spark Driver Program
4.2.2SparkContext原理剖析
4.2.3SparkContext源代码解析
4.3Spark Job的触发
4.3.1Job的逻辑执行(General Logical Plan)
4.3.2Job具体的物理执行
4.3.3Job触发流程源代码解析
4.4高层的DAG调度器(DAGScheduler)
4.4.1DAG的定义
4.4.2DAG的实例化
4.4.3DAGScheduer划分Stage的原理
4.4.4DAGScheduer划分Stage的具体算法
4.4.5Stage内部Task获取最佳位置的算法
4.5底层的Task调度器(TaskScheduler)
4.5.1TaskScheduer原理剖析
4.5.2TaskScheduer源代码解析
4.6调度器的通信终端(SchedulerBackend)
4.6.1SchedulerBackend原理
4.6.2SchedulerBackend源代码解析
4.6.3Spark程序的注册机制
4.6.4Spark程序对计算资源Executor的管理
4.7小结
第5章执行器(Executor)
5.1Executor的创建、分配、启动及异常处理
5.1.1Executor的创建
5.1.2Executor的资源分配
5.1.3Executor的启动
5.1.4Executor的异常处理
5.2执行器的通信接口(ExecutorBackend)
5.2.1ExecutorBackend接口与Executor的关系
5.2.2ExecutorBackend的不同实现
5.2.3ExecutorBackend中的通信
5.3执行器(Executor)中任务的执行
5.3.1Executor中任务的加载
5.3.2Executor中的任务线程池
5.3.3任务执行失败处理
5.3.4剖析TaskRunner
5.4小结
第6章Spark的存储模块(Storage)
6.1Storage概述
6.1.1Storage的概念
6.1.2Storage的设计模式
6.2Storage模块整体架构
6.2.1通信层
6.2.2存储层
6.2.3Partition与Block的对应关系
6.3不同Storage Level对比
6.4Executor内存模型
6.5Tachyon
6.5.1Tachyon简介
6.5.2Tachyon API的使用
6.5.3Tachyon在Spark中的使用
6.6小结
第7章Shuffle机制
7.1Shuffle概述
7.2Shuffle的框架
7.2.1Shuffle的框架演进
7.2.2Shuffle的框架内核
7.2.3Shuffle框架的源代码解析
7.2.4Shuffle 的注册
7.2.5Shuffle读写数据的源代码解析
7.3基于Hash的Shuffle
7.3.1基于Hash的Shuffle内核
7.3.2基于Hash的Shuffle写数据的源代码解析
7.4基于Sort的Shuffle
7.4.1基于Sort的Shuffle内核
7.4.2基于Sort的Shuffle写数据的源代码解析
7.5基于Tungsten Sort的Shuffle
7.5.1基于Tungsten Sort的Shuffle内核
7.5.2基于Tungsten Sort的Shuffle写数据的源代码解析
7.6小结
第8章钨丝计划(Project Tungsten)
8.1钨丝计划(Project Tungsten)概述
8.2内存管理模型
8.2.1现有内存管理的机制
8.2.2Project Tungsten内存管理的模型及其源代码的解析
8.3基于内存管理模型的Shuffle二进制数据处理
8.3.1插入记录时二进制数据的处理
8.3.2spill时二进制数据的处理
8.4小结
第9章性能优化
9.1Spark的配置机制
9.1.1