上篇 内核解密 2
第1章 电光石火间体验Spark 2.2开发实战 2
1.1通过RDD实战电影点评系统入门及源码阅读 2
1.1.1 Spark核心概念图解 2
1.1.2通过RDD实战电影点评系统案例 4
1.2通过DataFrame和DataSet实战电影点评系统 7
1.2.1通过DataFrame实战电影点评系统案例 7
1.2.2通过DataSet实战电影点评系统案例 10
1.3 Spark 2.2源码阅读环境搭建及源码阅读体验 11
第2章Spark 2.2技术及原理 14
2.1Spark 2.2综述 14
2.1.1连续应用程序 14
2.1.2新的API 15
2.2 Spark 2.2 Core 16
2.2.1第二代Tungsten引擎 16
2.2.2 SparkSession 16
2.2.3累加器API 17
2.3 Spark 2.2 SQL 19
2.3.1 Spark SQL 20
2.3.2 DataFrame和Dataset API 20
2.3.3 Timed Window 21
2.4 Spark 2.2 Streaming 21
2.4.1 Structured Streaming 21
2.4.2增量输出模式 23
2.5 Spark 2.2 MLlib 27
2.5.1基于DataFrame的Machine Learning API 28
2.5.2 R的分布式算法 28
2.6 Spark 2.2 GraphX 29
第3章Spark的灵魂:RDD和DataSet 30
3.1为什么说RDD和DataSet是 Spark的灵魂 30
3.1.1 RDD的定义及五大特性剖析 30
3.1.2 DataSet的定义及内部机制剖析 34
3.2 RDD弹性特性七个方面解析 36
3.3 RDD依赖关系 43
3.3.1窄依赖解析 43
3.3.2宽依赖解析 45
3.4解析Spark中的DAG逻辑视图 46
3.4.1 DAG生成的机制 46
3.4.2 DAG逻辑视图解析 47
3.5 RDD内部的计算机制 49
3.5.1Task解析 49
3.5.2计算过程深度解析 49
3.6 Spark RDD容错原理及其四大核心要点解析 57
3.6.1 Spark RDD容错原理 57
3.6.2 RDD容错的四大核心要点 57
3.7 Spark RDD中Runtime流程解析 59
3.7.1 Runtime架构图 59
3.7.2生命周期 60
3.8通过WordCount实战解析Spark RDD内部机制 70
3.8.1 Spark WordCount动手实践 70
3.8.2解析RDD生成的内部机制 72
3.9基于DataSet的代码到底是如何一步步转化成为RDD的 78
第4章Spark Driver启动内幕剖析 81
4.1 Spark Driver Program剖析 81
4.1.1 Spark Driver Program 81
4.1.2 SparkContext深度剖析 81
4.1.3 SparkContext源码解析 82
4.2 DAGScheduler解析 96
4.2.1 DAG的定义 96
4.2.2 DAG的实例化 97
4.2.3 DAGScheduler划分Stage的原理 98
4.2.4 DAGScheduler划分Stage的具体算法 99
4.2.5 Stage内部Task获取最佳位置的算法 113
4.3 TaskScheduler解析 116
4.3.1 TaskScheduler原理剖析 116
4.3.2 TaskScheduler源码解析 117
4.4 SchedulerBackend解析 132
4.4.1 SchedulerBackend原理剖析 132
4.4.2 SchedulerBackend源码解析 132
4.4.3 Spark程序的注册机制 133
4.4.4 Spark程序对计算资源Executor的管理 134
4.5打通Spark系统运行内幕机制循环流程 135
4.6本章总结 145
第5章Spark集群启动原理和源码详解 146
5.1 Master启动原理和源码详解 146
5.1.1 Master启动的原理详解 146
5.1.2 Master启动的源码详解 147
5.1.3 MasterHA双机切换 157
5.1.4 Master的注册机制和状态管理解密 163
5.2 Worker启动原理和源码详解 170
5.2.1 Worker启动的原理流程 170
5.2.2 Worker启动的源码详解 174
5.3 ExecutorBackend启动原理和源码详解 178
5.3.1 ExecutorBackend接口与Executor的关系 178
5.3.2 ExecutorBackend的不同实现 179
5.3.3 ExecutorBackend中的通信 181
5.3.4 ExecutorBackend的异常处理 183
5.4 Executor中任务的执行 184
5.4.1 Executor中任务的加载 184
5.4.2 Executor中的任务线程池 185
5.4.3任务执行失败处理 186
5.4.4揭秘TaskRunner 188
5.5 Executor执行结果的处理方式 189
5.6本章总结 197
第6章Spark Application提交给集群的原理和源码详解 198
6.1 Spark Application到底是如何提交给集群的 198
6.1.1 Application提交参数配置详解 198
6.1.2 Application提交给集群原理详解 199
6.1.3 Application提交给集群源码详解 201
6.2 Spark Application是如何向集群申请资源的 211
6.2.1 Application申请资源的两种类型详解 211
6.2.2 Application申请资源的源码详解 213
6.3从Application提交的角度重新审视Driver 219
6.3.1 Driver到底是什么时候产生的 220
6.3.2 Driver和Master交互原理解析 238
6.3.3 Driver和Master交互源码详解 244
6.4从Application提交的角度重新审视Executor 249
6.4.1 Executor到底是什么时候启动的 249
6.4.2 Executor如何把结果交给Application 254
6.5 Spark 1.6 RPC内幕解密:运行机制、源码详解、Netty与Akka等 254
6.6本章总结 267
第7章Shuffle原理和源码详解 268
7.1概述 268
7.2 Shuffle的框架 269
7.2.1 Shuffle的框架演进 269
7.2.2 Shuffle的框架内核 270
7.2.3 Shuffle框架的源码解析 272
7.2.4 Shuffle数据读写的源码解析 275
7.3 Hash Based Shuffle 281
7.3.1概述 281
7.3.2 Hash Based Shuffle内核 282
7.3.3 Hash Based Shuffle数据读写的源码解析 285
7.4 Sorted Based Shuffle 290
7.4.1概述 292
7.4.2 Sorted Based Shuffle内核 293
7.4.3 Sorted Based Shuffle数据读写的源码解析 294
7.5 Tungsten Sorted Based Shuffle 302
7.5.1概述 302
7.5.2 Tungsten Sorted Based Shuffle内核 302
7.5.3 Tungsten Sorted Based Shuffle数据读写的源码解析 303
7.6 Shuffle与Storage模块间的交互 309
7.6.1 Shuffle注册的交互 310
7.6.2 Shuffle写数据的交互 314
7.6.3 Shuffle读数据的交互 315
7.6.4 BlockManager架构原理、运行流程图和源码解密 315
7.6.5 BlockManager解密进阶:BlockManager初始化和注册解密、BlockManager-Master工作解密、BlockTransferService解密、本地数据读写解密、远程数据读写解密 324
7.7本章总结 341
第8章Job工作原理和源码详解 342
8.1 Job到底在什么时候产生 342
8.1.1触发Job的原理和源码解析 342
8.1.2触发Job的算子案例 344
8.2 Stage划分内幕 345
8.2.1 Stage划分原理详解 345
8.2.2 Stage划分源码详解 346
8.3 Task全生命周期详解 346
8.3.1 Task的生命过程详解 347
8.3.2 Task在Driver和Executor中交互的全生命周期原理和源码详解 348
8.4 ShuffleMapTask和ResultTask处理结果是如何被Driver管理的 364
8.4.1 ShuffleMapTask执行结果和Driver的交互原理及源码详解 364
8.4.2 ResultTask执行结果与Driver的交互原理及源码详解 370
第9章Spark中Cache和checkpoint原理和源码详解 372
9.1 Spark中Cache原理和源码详解 372
9.1.1 Spark中Cache原理详解 372
9.1.2 Spark中Cache源码详解 372
9.2 Spark中checkpoint原理和源码详解 381
9.2.1 Spark中checkpoint原理详解 381
9.2.2 Spark中checkpoint源码详解 381
第10章Spark中Broadcast和Accumulator原理和源码详解 391
10.1 Spark中Broadcast原理和源码详解 391
10.1.1 Spark中Broadcast原理详解 391
10.1.2 Spark中Broadcast源码详解 393
10.2 Spark中Accumulator原理和源码详解 396
10.2.1 Spark中Accumulator原理详解 396
10.2.2 Spark中Accumulator源码详解 396
第11章Spark与大数据其他经典组件整合原理与实战 399
11.1 Spark组件综合应用 399
11.2 Spark与Alluxio整合原理与实战 400
11.2.1 Spark与Alluxio整合原理 400
11.2.2 Spark与Alluxio整合实战 401
11.3 Spark与Job Server整合原理与实战 403
11.3.1 Spark与Job Server整合原理 403
11.3.2 Spark与Job Server整合实战 404
11.4 Spark与Redis整合原理与实战 406
11.4.1 Spark与Redis整合原理 406
11.4.2 Spark与Redis整合实战 407
中篇 商业案例 412
第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通过Spark SQL中的SQL语句实现电影点评系统用户行为分析 447
12.7通过Spark SQL下的两种不同方式实现口碑最佳电影分析 451
12.8通过Spark SQL下的两种不同方式实现最流行电影分析 456
12.9通过DataFrame分析最受男性和女性喜爱电影TopN 457
12.10纯粹通过DataFrame分析电影点评系统仿QQ和微信、淘宝等用户群 460
12.11纯粹通过DataSet对电影点评系统进行流行度和不同年龄阶段兴趣分析等 462
12.11.1通过DataSet实现某特定电影观看者中男性和女性不同年龄的人数 463
12.11.2通过DataSet方式计算所有电影中平均得分最高(口碑最好)的电影TopN 464
12.11.3通过DataSet方式计算所有电影中粉丝或者观看人数最多(最流行电影)的电影TopN 465
12.11.4纯粹通过DataSet的方式实现所有电影中最受男性、女性喜爱的电影Top 10 466
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章Spark 2.2实战之 Dataset开发实战企业人员管理系统应用案例 498
13.1企业人员管理系统应用案例业务需求分析 498
13.2企业人员管理系统应用案例数据建模 499
13.3通过SparkSession创建案例开发实战上下文环境 500
13.3.1 Spark 1.6.0版本SparkContext 500
13.3.2 Spark 2.0.0版本SparkSession 501
13.3.3 DataFrame、 DataSet剖析与实战 507
13.4通过map、 flatMap、 mapPartitions等分析企业人员管理系统 510
13.5通过dropDuplicate、 coalesce、 repartition等分析企业人员管理系统 512
13.6通过sort、 join、 joinWith等分析企业人员管理系统 514
13.7通过randomSplit、 sample、 select等分析企业人员管理系统 515
13.8通过groupBy、 agg、 col等分析企业人员管理系统 517
13.9通过collect list、 collect set等分析企业人员管理系统 518
13.10通过avg、 sum、 countDistinct等分析企业人员管理系统 519
13.11 Dataset开发实战企业人员管理系统应用案例代码 519
13.12本章总结 522
第14章Spark商业案例之电商交互式分析系统应用案例 523
14.1纯粹通过DataSet进行电商交互式分析系统中特定时段访问次数TopN 523
14.1.1电商交互式分析系统数据说明 523
14.1.2特定时段内用户访问电商网站排名TopN 525
14.2纯粹通过DataSet分析特定时段购买金额Top10和访问次数增长Top10 527
14.3纯粹通过DataSet进行电商交互式分析系统中各种类型TopN分析实战详解 530
14.3.1统计特定时段购买金额最多的Top5用户 530
14.3.2统计特定时段访问次数增长最多的Top5用户 530
14.3.3统计特定时段购买金额增长最多的Top 5用户 531
14.3.4统计特定时段注册之后前两周内访问次数最多的Top 10用户 533
14.3.5统计特定时段注册之后前两周内购买总额最多的Top 10用户 534
14.4电商交互式分析系统应用案例涉及的核心知识点原理、源码及案例代码 535
14.4.1知识点:Functions.scala 535
14.4.2电商交互式分析系统应用案例完整代码 548
14.5本章总结 555
第15章Spark商业案例之NBA篮球运动员大数据分析系统应用案例 556
15.1 NBA篮球运动员大数据分析系统架构和实现思路 556
15.2 NBA篮球运动员大数据分析系统代码实战:数据清洗和初步处理 561
15.3 NBA篮球运动员大数据分析代码实战之核心基础数据项编写 565
15.3.1 NBA球员数据每年基础数据项记录 565
15.3.2 NBA球员数据每年标准分Z-Score计算 567
15.3.3 NBA球员数据每年归一化计算 568
15.3.4 NBA历年比赛数据按球员分组统计分析 572
15.3.5 NBA球员年龄值及经验值列表获取 575
15.3.6 NBA球员年龄值及经验值统计分析 576
15.3.7 NBA球员系统内部定义的函数、辅助工具类 578
15.4 NBA篮球运动员大数据分析完整代码测试和实战 582
15.5 NBA篮球运动员大数据分析系统应用案例涉及的核心知识点、原理、源码 594
15.5.1知识点:StatCounter源码分析 594
15.5.2知识点:StatCounter应用案例 598
15.6本章总结 601
第16章 电商广告点击大数据实时流处理系统案例 602
16.1电商广告点击综合案例需求分析和技术架构 602
16.1.1电商广告点击综合案例需求分析 602
16.1.2电商广告点击综合案例技术架构 603
16.1.3电商广告点击综合案例整体部署 606
16.1.4生产数据业务流程及消费数据业务流程 607
16.1.5 Spark JavaStreamingContext初始化及启动 607
16.1.6 Spark Streaming使用No Receivers方式读取Kafka数据及监控 609
16.2电商广告点击综合案例在线点击统计实战 612
16.3电商广告点击综合案例黑名单过滤实现 615
16.3.1基于用户广告点击数据表,动态过滤黑名单用户 616
16.3.2黑名单的整个RDD进行去重操作 617
16.3.3将黑名单写入到黑名单数据表 618
16.4电商广告点击综合案例底层数据层的建模和编码实现(基于MySQL) 618
16.4.1电商广告点击综合案例数据库链接单例模式实现 619
16.4.2电商广告点击综合案例数据库操作实现 622
16.5电商广告点击综合案例动态黑名单过滤真正的实现代码 624
16.5.1从数据库中获取黑名单封装成RDD 624
16.5.2黑名单RDD和批处理RDD进行左关联,过滤掉黑名单 625
16.6动态黑名单基于数据库MySQL的真正操作代码实战 627
16.6.1 MySQL数据库操作的架构分析 627
16.6.2 MySQL数据库操作的代码实战 628
16.7通过updateStateByKey等实现广告点击流量的在线更新统计 634
16.8实现每个省份点击排名Top5广告 639
16.9实现广告点击Trend趋势计算实战 643
16.10实战模拟点击数据的生成和数据表SQL的建立 648
16.10.1电商广告点击综合案例模拟数据的生成 648
16.10.2电商广告点击综合案例数据表SQL的建立 651
16.11电商广告点击综合案例运行结果 654
16.11.1电商广告点击综合案例Hadoop集群启动 654
16.11.2电商广告点击综合案例Spark集群启动 655
16.11.3电商广告点击综合案例Zookeeper集群启动 656
16.11.4电商广告点击综合案例Kafka集群启动 658
16.11.5电商广告点击综合案例Hive metastore集群启动 660
16.11.6电商广告点击综合案例程序运行 660
16.11.7电商广告点击综合案例运行结果 661
16.12电商广告点击综合案例Scala版本关注点 663
16.13电商广告点击综合案例课程的Java源码 666
16.14电商广告点击综合案例课程的Scala源码 694
16.15本章总结 711
第17章Spark在通信运营商生产环境中的应用案例 712
17.1Spark在通信运营商融合支付系统日志统计分析中的综合应用案例 712
17.1.1融合支付系统日志统计分析综合案例需求分析 712
17.1.2融合支付系统日志统计分析数据说明 714
17.1.3融合支付系统日志清洗中Scala正则表达式与模式匹配结合的代码实战 718
17.1.4融合支付系统日志在大数据Splunk中的可视化展示 722
17.1.5融合支付系统日志统计分析案例涉及的正则表达式知识点及案例代码 733
17.2 Spark在光宽用户流量热力分布GIS系统中的综合应用案例 742
17.2.1光宽用户流量热力分布GIS系统案例需求分析 742
17.2.2光宽用户流量热力分布GIS应用的数据说明 742
17.2.3光宽用户流量热力分布GIS应用Spark实战 744
17.2.4光宽用户流量热力分布GIS应用Spark实战成果 748
17.2.5光宽用户流量热力分布GIS应用Spark案例代码 749
17.3本章总结 752
第18章 使用Spark GraphX实现婚恋社交网络多维度分析案例 753
18.1 Spark GraphX发展演变历史和在业界的使用案例 753
18.2 Spark GraphX设计实现的核心原理 757
18.3 Table operator和Graph Operator 760
18.4 Vertices、 edges、 triplets 762
18.5以最原始的方式构建Graph 765
18.6第一个Graph代码实例并进行Vertices、 edges.triplets操作实战 765
18.7数据加载成为Graph并进行操作实战 775
18.8图操作之Property Operators实战 782
18.9图操作之Structural Operators实战 784
18.10图操作之Computing Degree实战 788
18.11图操作之Collecting Neighbors实战 791
18.12图操作之Join Operators实战 793
18.13图操作之aggregateMessages实战 796
18.14图算法之Pregel API原理解析与实战 799
18.15 图算法之ShortestPaths原理解析与实战 804
18.16图算法之PageRank原理解析与实战 805
18.17图算法之TriangleCount原理解析与实战 807
18.18使用Spark GraphX实现婚恋社交网络多维度分析实战 809
18.18.1婚恋社交网络多维度分析实战图的属性演示 811
18.18.2婚恋社交网络多维度分析实战图的转换操作 814
18.18.3婚恋社交网络多维度分析实战图的结构操作 815
18.18.4婚恋社交网络多维度分析实战图的连接操作 816
18.18.5婚恋社交网络多维度分析实战图的聚合操作 818
18.18.6婚恋社交网络多维度分析实战图的实用操作 822
18.19婚恋社交网络多维度分析案例代码 823
18.20本章总结 832
下篇 性能调优 834
第19章 对运行在YARN上的Spark进行性能调优 834
19.1运行环境Jar包管理及数据本地性原理调优实践 834
19.1.1运行环境Jar包管理及数据本地性原理 834
19.1.2运行环境Jar包管理及数据本地性调优实践 835
19.2 Spark on YARN两种不同的调度模型及其调优 836
19.2.1 Spark on YARN的两种不同类型模型优劣分析 836
19.2.2 Spark on YARN的两种不同类型调优实践 837
19.3 YARN队列资源不足引起的Spark应用程序失败的原因及调优方案 838
19.3.1失败的原因剖析 838
19.3.2调优方案 838
19.4 Spark on YARN模式下Executor经常被杀死的原因及调优方案 838
19.4.1原因剖析 838
19.4.2调优方案 839
19.5 YARN-Client模式下网卡流量激增的原因及调优方案 839
19.5.1原因剖析 839
19.5.2调优方案 840
19.6 YARN-Cluster模式下JVM栈内存溢出的原因及调优方案 840
19.6.1原因剖析 841
19.6.2调优方案 841
第20章Spark算子调优最佳实践 842
20.1使用mapPartitions或者mapPartitionW ithIndex取代map操作 842
20.1.1 mapPartitions内部工作机制和源码解析 842
20.1.2 mapPartitionWithIndex内部工作机制和源码解析 842
20.1.3使用mapPartitions取代map案例和性能测试 843
20.2使用foreachPartition把Spark数据持久化到外部存储介质 844
20.2.1 foreachPartition内部工作机制和源码解析 844
20.2.2使用foreachPartition写数据到MySQL中案例和性能测试 845
20.3使用coalesce取代rePartition操作 845
20.3.1 coalesce和repartition工作机制和源码剖析 845
20.3.2通过测试对比coalesce和repartition的性能 847
20.4使用repartitionAndSortW ithinPartitions取代repartition和sort的联合操作 847
20.4.1 repartitionAndSortWithinPartitions工作机制和源码解析 847
20.4.2 repartitionAndSortWithinPartitions性能测试 848
20.5使用treeReduce取代reduce的原理和源码 848
20.5.1 treeReduce进行reduce的工作原理和源码 848
20.5.2使用treeReduce进行性能测试 849
20.6使用treeAggregate取代Aggregate的原理和源码 851
20.6.1 treeAggregate进行Aggregate的工作原理和源码 851
20.6.2使用treeAggregate进行性能测试 852
20.7 reduceByKey高效运行的原理和源码解密 853
20.8使用AggregateByKey取代groupByKey的原理和源码 857
20.8.1使用AggregateByKey取代groupByKey的原理 857
20.8.2源码剖析 858
20.8.3使用AggregateByKey取代groupByKey进行性能测试 859
20.9 Join不产生Shuffle的情况及案例实战 860
20.9.1 Join在什么情况下不产生Shuffle及其运行原理 860
20.9.2 Join不产生Shuffle的情况案例实战 860
20.10 RDD复用性能调优最佳实践 861
20.10.1什么时候需要复用RDD 861
20.10.2如何复用 RDD算子 862
第21章Spark频繁遇到的性能问题及调优技巧 864
21.1使用BroadCast广播大变量和业务配置信息原理和案例实战 864
21.1.1使用BroadCast广播大变量和业务配置信息原理 864
21.1.2使用BroadCast广播大变量和业务配置信息案例实战 865
21.2使用Kryo取代Scala默认的序列器原理和案例实战 865
21.2.1使用Kryo取代Scala默认的序列器原理 865
21.2.2使用Kryo取代Scala默认的序列器案例实战 866
21.3使用FastUtil优化JVM数据格式解析和案例实战 866
21.3.1使用FastUtil优化JVM数据格式解析 866
21.3.2使用FastUtil优化JVM数据格式案例实战 867
21.4 Persist及checkpoint使用时的正误方式 868
21.5序列化导致的报错原因解析和调优实战 870
21.5.1报错原因解析 870
21.5.2调优实战 870
21.6算子返回NULL产生的问题及解决办法 874
第22章Spark集群资源分配及并行度调优最佳实践 875
22.1实际生产环境下每个Executor内存及CPU的具体配置及原因 875
22.1.1内存的具体配置及原因 875
22.1.2实际生产环境下一般每个Executor的CPU的具体配置及原因 877
22.2 Spark并行度设置最佳实践 878
22.2.1并行度设置的原理和影响因素 878
22.2.2并行度设置最佳实践 878
第23章Spark集群中Mapper端、Reducer端内存调优 880
23.1 Spark集群中Mapper端内存调优实战 880
23.1.1内存使用详解 880
23.1.2内存性能调优实战 881
23.2 Spark集群中Reducer端内存调优实战 881
23.2.1内存使用详解 881
23.2.2内存性能调优实战 883
第24章 使用Broadcast实现Mapper端Shuffle聚合功能的原理和调优实战 885
24.1使用Broadcast实现Mapper端Shuffle聚合功能的原理 885
24.2使用Broadcast实现Mapper端Shuffle聚合功能调优实战 885
第25章 使用Accumulator高效地实现分布式集群全局计数器的原理和调优案例 887
25.1 Accumulator内部工作原理 887
25.2 Accumulator自定义实现原理和源码解析 887
25.3 Accumulator作全局计数器案例实战 888
第26章Spark下JVM性能调优最佳实践 889
26.1 JVM内存架构详解及调优 889
26.1.1 JVM的堆区、栈区、方法区等详解 889
26.1.2 JVM线程引擎及内存共享区域详解 890
26.1.3 JVM中年轻代和老年代及元空间原理详解 891
26.1.4 JVM进行GC的具体工作流程详解 895
26.1.5 JVM常见调优参数详解 895
26.2 Spark中对JVM使用的内存原理图详解及调优 896
26.2.1Spark中对JVM使用的内存原理图说明 896
26.2.2 Spark中对JVM使用的内存原理图内幕详解 897
26.2.3 Spark下的常见的JVM内存调优参数最佳实践 899
26.3 Spark下JVM的On-Heap和Off-Heap解密 900
26.3.1 JVM的On-Heap和Off-Heap详解 901
26.3.2 Spark是如何管理JVM的On-Heap和Off-Heap的 902
26.3.3 Spark下JVM的On-Heap和Off-Heap调优最佳实践 903
26.4 Spark下的JVM GC导致的Shuffle拉取文件失败及调优方案 905
26.4.1 Spark下的JVM GC导致的Shuffle拉取文件失败原因解密 905
26.4.2 Spark下的JVM GC导致的Shuffle拉取文件失败时调优 906
26.5 Spark下的Executor对JVM堆外内存连接等待时长调优 906
26.5.1 Executor对堆外内存等待工作过程 906
26.5.2 Executor对堆外内存等待时长调优 907
26.6 Spark下的JVM内存降低Cache内存占比的调优 907
26.6.1什么时候需要降低Cache的内存占用 907
26.6.2降低Cache的内存占比调优最佳实践 908
第27章Spark五大子框架调优最佳实践 909
27.1 Spark SQL调优原理及调优最佳实践 909
27.1.1 Spark SQL调优原理 909
27.1.2 Spark SQL调优参数及调优最佳实践 943
27.2 Spark Streaming调优原理及调优最佳实践 944
27.2.1 Spark Streaming调优原理 944
27.2.2 Spark Streaming调优参数及调优最佳实践 946
27.3 Spark GraphX调优原理及调优最佳实践 948
27.3.1 Spark GraphX调优原理 948
27.3.2 Spark GraphX调优参数及调优最佳实践 949
27.4 Spark ML调优原理及调优最佳实践 950
27.4.1 Spark ML 调优原理 950
27.4.2 Spark ML 调优参数及调优最佳实践 951
27.5 SparkR调优原理及调优最佳实践 953
27.5.1 SparkR调优原理 953
27.5.2 SparkR调优参数及调优最佳实践 955
第28章Spark 2.2.0新一代钨丝计划优化引擎 957
28.1概述 957
28.2内存管理与二进制处理 958
28.2.1概述 958
28.2.2内存管理的模型及其实现类的解析 960
28.2.3二进制处理及其实现类的解析 975
28.3缓存感知计算 982
28.3.1概述 982
28.3.2缓存感知计算的解析 982
28.3.3缓存感知计算类的解析 983
28.4代码生成 983
28.4.1概述 983
28.4.2新型解析器的解析 983
28.4.3代码生成的解析 984
28.4.4表达式代码生成的应用解析 986
28.5本章总结 989
第29章Spark Shuffle调优原理及实践 990
29.1 Shuffle对性能消耗的原理详解 990
29.2 Spark.Shuffle.manager参数调优原理及实践 992
29.3 Spark.Shuffle.blockTransferService参数调优原理及实践 993
29.4 Spark.Shuffle.compress参数调优原理及最佳实践 993
29.5 Spark.io.compression.codec参数调优原理及实践 994
29.6 Spark.Shuffle.consolidateFiles参数调优原理及实践 995
29.7 Spark.Shuffle.file. buffer参数调优原理及实践 995
29.8 Spark.Shuffle.io.maxRetries参数调优原理及实践 997
29.9 Spark.Shuffle.io.retryWait参数调优原理及实践 997
29.10 Spark.Shuffle.io.numConnectionsPerPeer参数调优原理及实践 998
29.11 Spark.reducer.maxSizeInFlight参数调优原理及实践 998
29.12 Spark.Shuffle.io.preferDirectBufs参数调优原理及实践 999
29.13 Spark.Shuffle.memoryFraction参数调优原理及实践 999
29.14 Spark.Shuffle.service.enabled参数调优原理及实践 1000
29.15 Spark.Shuffle.service.port参数调优原理及实践 1001
29.16 Spark.Shuffle.Sort.bypassMergeThreshold参数调优原理及实践 1002
29.17 Spark.Shuffle.spill参数调优原理及实践 1003
29.18 Spark.Shuffle.spill.compress参数调优原理及实践 1004
第30章Spark性能调优之数据倾斜调优一站式解决方案原理与实战 1005
30.1为什么数据倾斜是分布式大数据系统的性能噩梦 1005
30.1.1什么是数据倾斜 1005
30.1.2数据倾斜对性能的巨大影响 1006
30.1.3如何判断Spark程序运行中出现了数据倾斜 1007
30.1.4如何定位数据倾斜 1008
30.2数据倾斜解决方案之一:对源数据进行聚合并过滤掉导致倾斜的Keys 1008
30.2.1适用场景分析 1009
30.2.2原理剖析 1009
30.2.3使用Hive等ETL工具对源数据进行聚合并过滤掉导致倾斜的Keys 1009
30.2.4使用Spark SQL对源数据进行聚合并过滤掉导致倾斜的Keys 1010
30.3数据倾斜解决方案之二:适当提高Reducer端的并行度 1010
30.3.1适用场景分析 1010
30.3.2原理剖析 1011
30.3.3案例实战 1011
30.3.4注意事项 1012
30.4数据倾斜解决方案之三:使用随机Key实现双重聚合 1013
30.4.1什么是随机Key双重聚合 1013
30.4.2适用场景分析 1013
30.4.3原理剖析 1014
30.4.4案例实战 1014
30.4.5注意事项 1015
30.5数据倾斜解决方案之四:使用Mapper端进行Join操作 1015
30.5.1为什么要在Mapper端进行Join操作 1015
30.5.2适用场景分析 1015
30.5.3原理剖析 1015
30.5.4案例实战 1017
30.5.5注意事项 1017
30.6数据倾斜解决方案之五:对倾斜的Keys采样后进行单独的Join操作 1017
30.6.1为什么对倾斜的Keys采样进行单独的Join操作 1018
30.6.2如何对倾斜的Keys进行采样 1018
30.6.3适用场景分析 1018
30.6.4案例实战 1019
30.6.5注意事项 1019
30.7数据倾斜解决方案之六:使用随机数进行Join 1020
30.7.1如何使用随机数 1020
30.7.2适用场景分析 1020
30.7.3案例实战 1020
30.7.4注意事项 1021
30.8数据倾斜解决方案之七:通过扩容进行Join 1021
30.8.1如何进行扩容 1021
30.8.2适用场景分析 1022
30.8.3案例实战 1022
30.8.4注意事项 1022
30.9结合电影点评系统进行数据倾斜解决方案的小结 1023
第31章Spark大数据性能调优实战专业之路 1025
31.1大数据性能调优的本质和Spark性能调优要点分析 1025
31.2 Spark性能调优之系统资源使用原理和调优最佳实践 1027
31.3 Spark性能调优之使用更高性能算子及其源码剖析 1028
31.4 Spark旧版本中性能调优之HashShuffle剖析及调优 1033
31.5 Shuffle如何成为Spark性能杀手 1035
31.6 Spark Hash Shuffle源码解读与剖析 1037
31.7 Sort-Based Shuffle产生的内幕及其tungsten-sort背景解密 1051
31.8 Spark Shuffle令人费解的6大经典问题 1055
31.9 Spark Sort-Based Shuffle排序具体实现内幕和源码详解 1056
31.10 Spark 1.6.X以前Shuffle中JVM内存使用及配置内幕详情 1063
31.11 Spark 2.2.X中Shuffle中内存管理源码解密:StaticMemory和UnifiedMemory 1069
31.12 Spark 2.2.X中Shuffle中JVM Unified Memory内幕详情 1085
31.13 Spark 2.2.X中Shuffle中Task视角内存分配管理 1090
31.14 Spark 2.2.X中Shuffle中Mapper端的源码实现 1097
31.15 Spark 2.2.X中Shuffle中SortShuffleWriter排序源码内幕解密 1107
31.16 Spark 2.2.X中Sort Shuffle中timSort排序源码具体实现 1113
31.17 Spark 2.2.X中Sort Shuffle中Reducer端源码内幕 1126
后记 1141