Spork 大数据处理技术 夏俊鸾 刘旭晖 邵赛赛 程浩史鸣飞 黄洁 著 電子工紫出版社 Publishing House of Electronics Industry
序 2009年的时候,Netflix公司举办了一个叫作Netflix Prize的推荐算法比赛。这 个比赛匿名公布了Netflix五十万用户对近两万部电影的一亿个评分数据,希望参赛 者能够开发出更好的推荐算法,以提高推荐系统的质量。这个比赛的奖金有一百万 美元。一百万美元看似很多,但是和一个更好的推荐算法给Ntix带来的效益相比, 实则九牛一毛。 高昂的奖金和Ntix提供的真实数据吸引了不少的参赛者,其中也包括了来自 加州大学伯克利分校(UC Berkeley)的博士生Lester Mackey。Lester师从机器学习 领域泰斗Michael Jordan,在一个叫作AMPLab的大数据实验室里进行博士研究。 AMPLab和大多数学术界实验室不同的地方在于实验室内有多个教授和他们带领的 学生一起合作。这些研究人员来自不同的领域,包括机器学习、数据库、计算机网 络、分布式系统等。当时,要想提高算法研究迭代的效率,需要利用多台机器的分 布式建模。在尝试了当时业界最流行的Hadoop MapReduce后,Lester发现自己的时 间并不是花在提高算法效率上,而是耗费在MapReduce的编程模型和低效的执行模 式上。这个时候,他向实验室内部的另外一名进行分布式系统研究的学生Matei Zaharia求助。 Spark大数据处理技术
目 录 第1章Spark系统概述 01 1.1大数据处理框架 1.2 Spark大数据处理框架 ,3 1.2.1RDD表达能力 3 1.2.2 Spark子系统 4 13小结… 7 第2章Spark RDD及编程接口 9 2.1 Spark程序“Hello World" 9 2.2 Spark RDD......... 12 2.2.1RDD分区(partitions) 13 2.2.2RDD优先位置(preferredLocations) 13 2.2.3RDD依赖关系(dependencies) .l5 2.2.4RDD分区计算(compute) 19 2.2.5RDD分区函数(partitioner) 20 2.3创建操作 23 2.3.1集合创建操作 23 2.3.2存储创建操作 23 2.4转换操作 26 Spark大数据处理技术
X目录 2.4.1RDD基本转换操作 26 2.4.2键值RDD转换操作 35 2.4.3再论RDD依赖关系 43 2.5控制操作(control operation) 46 2.6 行动操作(action operation) 47 2.6.1集合标量行动操作… 47 2.6.2存储行动操作 52 2.7 小结… 56 第3章Spark运行模式及原理 .57 3.1 Spark运行模式概述 57 3.1.1 Spark运行模式列表… 57 3.l.2 Spark基本工作流程 44 58 313相关基本类… 59 3.2L0cal模式 62 3.2.1部署及程序运行… 62 3.2.2内部实现原理 63 3.3 Standalone模式 64 3.3.1部署及程序运行… .64 3.3.2 内部实现原理 67 3.4 Local cluster模式 68 3.4.1部署及程序运行 68 3.4.2内部实现原理 69 3.5 Mesos模式… 69 3.5.1部署及程序运行… 69 3.52内部实现原理 70 3.6 YARN standalone/YARN cluster模式,. 72 3.6.1部署及程序运行 72 3.62内部实现原理 75 3.7 YARN client模式… …76 3.7.1 部署及程序运行 76 3.7.2内部实现原理 …77 Spark大数据处理技术
xIl 3.8各种模式的实现细节比较… 78 3.8.1环境变量的传递 78 3.8.2JAR包和各种依赖文件的分发 80 3.83任务管理和序列化 82 3.8.4用户参数配置 83 3.8.5用户及权限控制 84 3.9 Spark1.0版本之后的变化 85 3.10小结… 86 第4章 Spark调度管理原理 .87 4.1 Spark作业调度管理概述 87 4.2 Spark调度相关基本概念 88 4.3 作业调度模块顶层逻辑概述 89 4.4作业调度具体工作流程 92 4.4.1调度阶段的拆分 94 4.4.2调度阶段的提交.… 97 4.4.3任务集的提交.… 99 4.4.4完成状态的监控 99 4.4.5任务结果的获取… 101 4.5 任务集管理模块详解 102 4.6 调度池和调度模式分析… 104 4.7 其他调度相关内容…… 106 4.7.1 Spark应用之间的调度关系 106 4.7.2调度过程中的数据本地性问题 106 4.8小结… 107 第5章 Spark的存储管理 109 5.1存储管理模块整体架构 109 5.1.1通信层架构.… 110 5.1.2通信层消息传递.… 112 5.13注册存储管理模块 113 5.1.4存储层架构… 114 Spark大数据处理技术
XIV目录 5.1.5 数据块(B0ck)… 5.2 RDD持久化 5.2.1 RDD分区和数据块的关系 117 5.2.2 内存缓存 …118 52.3 磁盘缓存… 119 5.2.4持久化选项… 120 5.2.5 如何选择不同的持久化选项 122 5.3 Shuf们e数据持久化… 122 5.4广播(Broadcast)变量持久化 125 5.5 小结… 126 第6章 Spark监控管理 …127 6.1 UI管理 127 6.1.1实时UI管理 128 6.1.2历史UI管理 132 6.2 Metrics管理 133 6.2.1 Metrics系统架构 133 6.2.2 Metrics系统配置. 135 6.2.3 输入源(Metrics Source)介绍 136 6.2.4 输出方式(Metrics Sink)介绍 138 6.3 小结 139 第7章 Shark架构与安装配置. .141 7.1 Shark架构浅析 +44444454* 142 7.2 Hive/Shark各功能组件对比. 143 7.2.1 MetaStore......... 143 7.2.2 CLI/Beeline 143 7.2.3 JDBC/ODBC4… 144 7.2.4 Hive Server/2 Shark Server/2. 144 7.2.5 Driver .....… 145 7.2.6 SQL Parser.… 4606060006.604444444 146 7.2.7 查询优化器(Query Optimizer) 147 Spark大数据处理技术
XV 7.2.8物理计划与执行… 147 7.3 Shark安装配置与使用 148 73.1安装前准备工作 149 7.3.2在不同运行模式下安装Shark 149 7.4 Shark SQL命令行工具(CLI) 152 7.5使用Shark Shell命令 155 7.6启动Shark Server… 155 7.7 Shark Server.2配置与启动 156 7.8缓存数据表… …157 7.8.1数据缓存级别 158 7.8.2创建不同缓存级别的Shark数据表 158 7.8.3指定数据表缓存策略 .…159 7.8.4使用Tachy0n… 160 7.9常见问题分析 160 7.9.1 OutOfMemory异常 160 7.9.2 数据处理吞吐量低 …161 7.9.3 Shark查询比Hive慢 161 7.10小结… 162 第8章SQL程序扩展… 163 8.1 程序扩展并行运行模式 164 8.2 Evaluator ObjectInspector. 164 8.3自定义函数扩展… 168 8.3.1自定义函数扩展分类… 168 83.2CLI中的用户自定义函数扩展相关命令 170 8.3.3用户自定义函数(UDF) .171 8.3.4通用用户自定义函数(Generic UDF) .175 8.3.5用户自定义聚合函数(UDAF) 178 8.3.6通用用户自定义聚合函数(Generic UDAF) .182 8.3.7通用用户自定义表函数(Generic UDTF) 186 8.4自定义数据存取格式… 190 8.4.1 SerDe 4.190 Spark大数据处理技术
XVI 目录 8.4.2 StorageHandler 197 8.5小结… 198 第9章 Spark SQL… 199 9.1 Spark SQL逻辑架构 199 9.l.1 Catalyst功能边界 200 9.1.2SQL解析阶段 201 9.1.3 逻辑计划元数据绑定和语义分析阶段 202 9.1.4逻辑计划优化阶段 202 9.1.5物理计划生成阶段 202 9.l.6 Shark和Spark SQL对比 203 9.2 Catalyst上下文(Context) 204 9.2.lS0 LContext...… 204 9.2.2 HiveContext...… 205 9.3 SQL DSL API… 206 9.3.1 数据源管理 206 9.3.2 SchemaRDD 208 9.3.3 Row API 210 9.3.4 数据类型 211 9.3.5 DSL API举例 .213 93.6 表达式计算… .214 9.3.7 Parquet列式存储文件 218 9.3.8代码演示 218 9.4 Java API 221 9.5 Python API 224 9.6 Spark SQL CLI. 225 9.7 Thrift服务 225 9.8 小结 225 第10章 Spark Streaming流数据处理框架 227 10.1 快速入门… 227 10.2 Spark Streaming基本概念 229 Spark大数据处理技术
XVII 10.2.1 链接和初始化 229 10.2.2 时间和窗口概念 231 10.2.3 DStream原理 232 10.2.4 DStream输入源 234 10.2.5 DStream操作 235 10.2.6 DStream持久化 237 10.3性能调优 238 10.3.1运行时间优化.… 238 10.3.2内存使用优化… 238 10.4容错处理 239 10.4.1工作节点失效 239 10.4.2驱动节点失效… 240 10.5 DStream作业的产生和调度 242 10.5.1 作业产生 242 10.5.2 作业调度 243 10.5.3 Streaming作业与Spark作业之间的关系 244 10.6 DStream与RDD关系 246 10.7 数据接收原理… 248 10.8自定义数据输入源 251 10.9 自定义监控接口(StreamingListener) 253 10.I0 Spark Streaming案例分析 254 10.11小结… 256 第11章 GraphX计算框架… 259 11.1图并行计算.… 259 11.1.1数据并行与图并行计算 259 11.1.2图并行计算框架简介 260 1l.1.3 GraphX简介… 264 11.2 GraphX模型设计. 264 11.2.1 数据模型.… 264 11.2.2图计算接口… 265 113 GraphX模型实现 269 Spark大数据处理技术
XVⅢ>目录 11.3.1图的分布式存储 269 11.3.2图操作执行策略 278 11.3.3 图操作执行优化 280 11.3.4序列化和反序列化 283 11.3.5 GraphX内置算法库 284 1l.4 GraphX应用. 285 11.4.1 Pregel模型 285 11.4.2N维邻接关系计算 288 11.5小结… 291 第12章 Tachyon存储系统 293 12.1设计原理… 294 12.1.1高效的内存读写… 294 12.1.2无副本的可靠性实现—Lineage. 297 12.2框架设计. 299 12.2.1主节点 300 12.2.2工作节点 304 12.2.3客户端… 306 12.2.4读写工作流程 307 12.3 Tachyon的部署 ,313 12.3.1单机部署.… ,313 12.3.2 分布式部署… …316 12.3.3 Tachyon的配置 44+ 317 12.4 Tachyon应用 321 12.4.1 Shark原始表(RawTable) 321 I2.4.2 Spark的堆外RDD… ,325 12.4.3 Tachyon用户接口(API) 327 12.5相关项目讨论 335 12.6小结… 336 Spark大数据处理技术