深入理解SPARK:核心思想与源码分析


深入理解SPARK:核心思想与源码分析

文章插图
深入理解SPARK:核心思想与源码分析【深入理解SPARK:核心思想与源码分析】《深入理解SPARK:核心思想与源码分析》结合大量图和示例,对Spark的架构、部署模式和工作模组的设计理念、实现源码与使用技巧进行了深入的剖析与解读 。
本书特色:
按照源码分析的习惯设计,条分缕析 。
多图、多示例,帮读者快速在头脑中“建模” 。
原理与实现剖析,帮助读者提升架构设计、程式设计等方面的能力 。
儘可能保留较多的源码,方便离线和移动环境的阅读 。
基本介绍中文名:深入理解SPARK:核心思想与源码分析
外文名:Spark Internals:Core Design and Source Code Analysis
作    者:耿嘉安
ISBN:9787111522348
技术範畴:大数据
出版社:机械工业出版社
出版时间:2016-01-01
包装:平装
开本:16开
页数:469
定价:99
内容简介《深入理解SPARK:核心思想与源码分析》一书对Spark1.2.0版本的原始码进行了全面而深入的分析,旨在为Spark的最佳化、定製和扩展提供原理性的指导 。阿里巴巴集团专家鼎力推荐、阿里巴巴资深Java开发和大数据专家撰写 。本书分为三篇:準备篇(第1~2章),介绍了Spark的环境搭建、设计理念与基本架构,帮助读者了解一些背景知识 。核心设计篇(第3~7章),着重讲解SparkContext的初始化、存储体系、任务提交与执行、计算引擎及部署模式的原理和源码分析 。通过这部分的内容,读者可以通过源码剖析更加深入理解Spark的核心设计与实现,以便在实际使用中能够快速解决线上问题并对性能进行调优 。扩展篇(第8~11章),主要讲解基于Spark核心的各种扩展及套用,包括SQL处理引擎、Hive处理、流式计算框架Spark Streaming、图计算框架GraphX、机器学习库MLlib等内容 。通过阅读这部分内容,读者可以扩展实际项目中对Spark的套用场景,让Spark焕发活力 。作者简介耿嘉安,10年IT行业相关经验 。就职于阿里巴巴商家业务事业部,任资深Java工程师,专注于开源和大数据领域,目前与小伙伴们基于ODPS构建阿里的大数据商业解决方案——御膳房 。在大量的工作实践中,对J2EE、JVM、Tomcat、Spring、Hadoop、Spark、MySQL、Redis都有深入研究,尤其喜欢剖析开源项目的源码实现 。早期从事J2EE企业级套用开发,对Java相关技术有独到见解 。业余时间喜欢研究中国古代历史,古诗词,旅游,足球等 。精彩书评伴随着网际网路的不断演进,人类所面临的数据在体量,产生速度和多样性方面阶跃性发展,随之而来的是数据计算和处理方式的多样化,目前越来越多的数据处理链路是通过多种计算组合而成,例如批量与流式计算,图计算,互动式查询等 。而以往几个独立计算系统“物理”拼装组合成的複杂系统在处理这些问题时,往往在成本和效率上产生瓶颈 。Spark从叠代计算的数据复用切入,底层一个runtime来支撑多种计算模型,越来越受到业界的重视,社区发展非常迅速 。而本书从源码分析角度深入剖析系统,希望读者不仅做到知其然,更要知其所以然,对Spark有更加深入的研究 。本书作者在相关领域有多年丰富的实践和套用经验,相信通过研读本书必定可以给读者带来事半功倍的效果 。——强琦 阿里云计算平台资深技术专家这是一本不错的Spark的入门书籍,完全从工程师的视角出发,从安装到使用再到高阶套用 。有些时候甚至有些啰嗦,但这不正是我们读者需要的幺?作者用他专一的一线工程师视角与在阿里面临的场景结合,写作的落笔相当接地气 。这是一本难得的工程师参考用书 。——张茂森 阿里巴巴商家业务事业部资深数据挖掘专家目录前言準 备 篇第1章 环境準备 21.1 运行环境準备 21.1.1 安装JDK 31.1.2 安装Scala 31.1.3 安装Spark 41.2 Spark初体验 41.2.1 运行spark-shell 41.2.2 执行word count 51.2.3 剖析spark-shell 71.3 阅读环境準备 111.4 Spark源码编译与调试 131.5 小结 17第2章 Spark设计理念与基本架构 182.1 初识Spark 182.1.1 Hadoop MRv1的局限 182.1.2 Spark使用场景 202.1.3 Spark的特点 202.2 Spark基础知识 202.3 Spark基本设计思想 222.3.1 Spark模组设计 222.3.2 Spark模型设计 242.4 Spark基本架构 252.5 小结 26核心设计篇第3章 SparkContext的初始化 283.1 SparkContext概述 283.2 创建执行环境SparkEnv 303.2.1 安全管理器SecurityManager 313.2.2 基于Akka的分散式讯息系统ActorSystem 313.2.3 map任务输出跟蹤器mapOutputTracker 323.2.4 实例化ShuffleManager 343.2.5 shuffle执行绪记忆体管理器ShuffleMemoryManager 343.2.6 块传输服务BlockTransferService 353.2.7 BlockManagerMaster介绍 353.2.8 创建块管理器BlockManager 363.2.9 创建广播管理器Broadcast-Manager 363.2.10 创建快取管理器CacheManager 373.2.11 HTTP档案伺服器HttpFile-Server 373.2.12 创建测量系统MetricsSystem 393.2.13 创建SparkEnv 403.3 创建metadataCleaner 413.4 SparkUI详解 423.4.1 listenerBus详解 433.4.2 构造JobProgressListener 463.4.3 SparkUI的创建与初始化 473.4.4 Spark UI的页面布局与展示 493.4.5 SparkUI的启动 54 3.5 Hadoop相关配置及Executor环境变数 543.5.1 Hadoop相关配置信息 543.5.2 Executor环境变数 543.6 创建任务调度器TaskScheduler 553.6.1 创建TaskSchedulerImpl 553.6.2 TaskSchedulerImpl的初始化 573.7 创建和启动DAGScheduler 573.8 TaskScheduler的启动 603.8.1 创建LocalActor 603.8.2 ExecutorSource的创建与注册 623.8.3 ExecutorActor的构建与注册 643.8.4 Spark自身ClassLoader的创建 643.8.5 启动Executor的心跳执行绪 663.9 启动测量系统MetricsSystem 693.9.1 注册Sources 703.9.2 注册Sinks 703.9.3 给Sinks增加Jetty的Servlet-ContextHandler 713.10 创建和启动ExecutorAllocation-Manager 723.11 ContextCleaner的创建与启动 733.12 Spark环境更新 743.13 创建DAGSchedulerSource和BlockManagerSource 763.14 将SparkContext标记为激活 773.15 小结 78第4章 存储体系 794.1 存储体系概述 794.1.1 块管理器BlockManager的实现 794.1.2 Spark存储体系架构 814.2 shuffle服务与客户端 834.2.1 Block的RPC服务 844.2.2 构造传输上下文Transpor-tContext 854.2.3 RPC客户端工厂Transport-ClientFactory 864.2.4 Netty伺服器TransportServer 874.2.5 获取远程shuffle档案 884.2.6 上传shuffle档案 894.3 BlockManagerMaster对Block-Manager的管理 904.3.1 BlockManagerMasterActor 904.3.2 询问Driver并获取回複方法 924.3.3 向BlockManagerMaster注册BlockManagerId 934.4 磁碟块管理器DiskBlockManager 944.4.1 DiskBlockManager的构造过程 94 4.4.2 获取磁碟档案方法getFile 964.4.3 创建临时Block方法create-TempShuffleBlock 964.5 磁碟存储DiskStore 974.5.1 NIO读取方法getBytes 974.5.2 NIO写入方法putBytes 984.5.3 数组写入方法putArray 984.5.4 Iterator写入方法putIterator 984.6 记忆体存储MemoryStore 994.6.1 数据存储方法putBytes 1014.6.2 Iterator写入方法putIterator详解 1014.6.3 安全展开方法unrollSafely 1024.6.4 确认空闲记忆体方法ensureFreeSpace 1054.6.5 记忆体写入方法putArray 1074.6.6 尝试写入记忆体方法tryToPut 1084.6.7 获取记忆体数据方法getBytes 1094.6.8 获取数据方法getValues 1104.7 Tachyon存储TachyonStore 1104.7.1 Tachyon简介 1114.7.2 TachyonStore的使用 1124.7.3 写入Tachyon记忆体的方法putIntoTachyonStore 1134.7.4 获取序列化数据方法getBytes 1134.8 块管理器BlockManager 1144.8.1 移出记忆体方法dropFrom-Memory 1144.8.2 状态报告方法reportBlockStatus 1164.8.3 单对象块写入方法putSingle 1174.8.4 序列化位元组块写入方法putBytes 1184.8.5 数据写入方法doPut 1184.8.6 数据块备份方法replicate 1214.8.7 创建DiskBlockObjectWriter的方法getDiskWriter 1254.8.8 获取本地Block数据方法getBlockData 1254.8.9 获取本地shuffle数据方法doGetLocal 1264.8.10 获取远程Block数据方法doGetRemote 1274.8.11 获取Block数据方法get 1284.8.12 数据流序列化方法dataSerializeStream 1294.9 metadataCleaner和broadcastCleaner 1294.10 快取管理器CacheManager 1304.11 压缩算法 1334.12 磁碟写入实现DiskBlockObjectWriter 133 4.13 块索引shuffle管理器IndexShuffleBlockManager 1354.14 shuffle记忆体管理器ShuffleMemoryManager 1374.15 小结 138第5章 任务提交与执行 1395.1 任务概述 1395.2 广播Hadoop的配置信息 1425.3 RDD转换及DAG构建 1445.3.1 为什幺需要RDD 1445.3.2 RDD实现分析 1465.4 任务提交 1525.4.1 任务提交的準备 1525.4.2 finalStage的创建与Stage的划分 1575.4.3 创建Job 1635.4.4 提交Stage 1645.4.5 提交Task 1655.5 执行任务 1765.5.1 状态更新 1765.5.2 任务还原 1775.5.3 任务运行 1785.6 任务执行后续处理 1795.6.1 计量统计与执行结果序列化 1795.6.2 记忆体回收 1805.6.3 执行结果处理 1815.7 小结 187第6章 计算引擎 1886.1 叠代计算 1886.2 什幺是shuffle 1926.3 map端计算结果快取处理 1946.3.1 map端计算结果快取聚合 1956.3.2 map端计算结果简单快取 2006.3.3 容量限制 2016.4 map端计算结果持久化 2046.4.1 溢出分区档案 2056.4.2排序与分区分组 2076.4.3 分区索引档案 2096.5 reduce端读取中间计算结果 2106.5.1 获取map任务状态 2136.5.2 划分本地与远程Block 2156.5.3 获取远程Block 2176.5.4 获取本地Block 2186.6 reduce端计算 2196.6.1 如何同时处理多个map任务的中间结果 2196.6.2 reduce端在快取中对中间计算结果执行聚合和排序 2206.7 map端与reduce端组合分析 2216.7.1 在map端溢出分区档案,在reduce端合併组合 2216.7.2 在map端简单快取、排序分组,在reduce端合併组合 2226.7.3 在map端快取中聚合、排序分组,在reduce端组合 2226.8 小结 223第7章 部署模式 2247.1 local部署模式 2257.2 local-cluster部署模式 2257.2.1 LocalSparkCluster的启动 2267.2.2 CoarseGrainedSchedulerBackend的启动 236 7.2.3 启动AppClient 2377.2.4 资源调度 2427.2.5 local-cluster模式的任务执行 2537.3 Standalone部署模式 2557.3.1 启动Standalone模式 2557.3.2 启动Master分析 2577.3.3 启动Worker分析 2597.3.4 启动Driver Application分析 2617.3.5 Standalone模式的任务执行 2637.3.6 资源回收 2637.4 容错机制 2667.4.1 Executor异常退出 2667.4.2 Worker异常退出 2687.4.3 Master异常退出 2697.5 其他部署方案 2767.5.1 YARN 2777.5.2 Mesos 2807.6 小结 282扩 展 篇第8章 Spark SQL 2848.1 Spark SQL总体设计 2848.1.1 传统关係型资料库SQL运行原理 2858.1.2 Spark SQL运行架构 2868.2 字典表Catalog 2888.3 Tree和TreeNode 2898.4 词法解析器Parser的设计与实现 2938.4.1 SQL语句解析的入口 2948.4.2 建表语句解析器DDLParser 2958.4.3 SQL语句解析器SqlParser 2968.4.4 Spark代理解析器SparkSQLParser 2998.5 Rule和RuleExecutor 3008.6 Analyzer与Optimizer的设计与实现 3028.6.1 语法分析器Analyzer 3048.6.2 最佳化器Optimizer 3058.7 生成物理执行计画 3068.8 执行物理执行计画 3088.9 Hive 3118.9.1 Hive SQL语法解析器 3118.9.2 Hive SQL元数据分析 3138.9.3 Hive SQL物理执行计画 3148.10 套用举例:JavaSparkSQL 3148.11 小结 320第9章 流式计算 3219.1 Spark Streaming总体设计 3219.2 StreamingContext初始化 3239.3 输入流接收器规範Receiver 3249.4 数据流抽象DStream 3259.4.1 Dstream的离散化 326 9.4.2 数据源输入流InputDStream 3279.4.3 Dstream转换及构建DStream Graph 3299.5 流式计算执行过程分析 3309.5.1 流式计算例子CustomReceiver 3319.5.2 Spark Streaming执行环境构建 3359.5.3 任务生成过程 3479.6 视窗操作 3559.7 套用举例 3579.7.1 安装mosquitto 3589.7.2 启动mosquitto 3589.7.3 MQTTWordCount 3599.8 小结 361第10章 图计算 36210.1 Spark GraphX总体设计 36210.1.1 图计算模型 36310.1.2 属性图 36510.1.3 GraphX的类继承体系 36710.2 图操作 36810.2.1 属性操作 36810.2.2 结构操作 36810.2.3 连线操作 36910.2.4 聚合操作 37010.3 Pregel API 37110.3.1 Dijkstra算法 37310.3.2 Dijkstra的实现 37610.4 Graph的构建 37710.4.1 从边的列表载入Graph 37710.4.2 在Graph中创建图的方法 37710.5 顶点集合抽象VertexRDD 37810.6 边集合抽象EdgeRDD 37910.7 图分割 38010.8 常用算法 38210.8.1 网页排名 38210.8.2 Connected Components的套用 38610.8.3 三角关係统计 38810.9 套用举例 39010.10 小结 391第11章 机器学习 39211.1 机器学习概论 39211.2 Spark MLlib总体设计 39411.3 数据类型 39411.3.1 局部向量 39411.3.2 标记点 39511.3.3 局部矩阵 39611.3.4 分散式矩阵 39611.4 基础统计 39811.4.1 摘要统计 39811.4.2 相关统计 39911.4.3 分层抽样 40111.4.4 假设检验 40111.4.5 随机数生成 40211.5 分类和回归 40511.5.1 数学公式 40511.5.2 线性回归 40711.5.3 分类 40711.5.4 回归 41011.6 决策树 41111.6.1 基本算法 41111.6.2 使用例子 41211.7 随机森林 41311.7.1 基本算法 41411.7.2 使用例子 414 11.8 梯度提升决策树 41511.8.1 基本算法 41511.8.2 使用例子 41611.9 朴素贝叶斯 41611.9.1 算法原理 41611.9.2 使用例子 41811.10 保序回归 41811.10.1 算法原理 41811.10.2 使用例子 41911.11 协同过滤 41911.12 聚类 42011.12.1 K-means 42011.12.2 高斯混合 42211.12.3 快速叠代聚类 42211.12.4 latent Dirichlet allocation 42211.12.5 流式K-means 42311.13 维数减缩 42411.13.1 奇异值分解 42411.13.2 主成分分析 42511.14 特徵提取与转型 42511.14.1 术语频率反转 42511.14.2 单词向量转换 42611.14.3 标準尺度 42711.14.4 正规化尺度 42811.14.5 卡方特徵选择器 42811.14.6 Hadamard积 42911.15 频繁模式挖掘 42911.16 预言模型标记语言 43011.17 管道 43111.17.1 管道工作原理 43211.17.2 管道API介绍 43311.17.3 交叉验证 43511.18 小结 436附录A Utils 437附录B Akka 446附录C Jetty 450附录D Metrics 453附录E Hadoop word count 456附录F CommandUtils 458附录G Netty 461附录H 源码编译错误 465