2018年新春报喜!热烈祝贺王家林大咖大数据经典传奇著作《SPARK大数据商业实战三部曲》 畅销书籍 清华大学出版社发行上市!

2018年新春报喜!热烈祝贺王家林大咖大数据经典传奇著作《SPARK大数据商业实战三部曲》畅销书籍 清华大学出版社发行上市!

本书基于Spark 2.2.0最新版本(2017年7月11日发布),以Spark商业案例实战和Spark在生产环境下几乎所有类型的性能调优为核心,以Spark内核解密为基石,分为上篇、中篇、下篇,对企业生产环境下的Spark商业案例与性能调优抽丝剥茧地进行剖析。上篇基于Spark源码,从一个动手实战案例入手,循序渐进地全面解析了Spark 2.2新特性及Spark内核源码;中篇选取Spark开发中最具有代表的经典学习案例,深入浅出地介绍,在案例中综合应用Spark的大数据技术;下篇性能调优内容基本完全覆盖了Spark在生产环境下的所有调优技术。

本书适合所有Spark学习者和从业人员使用。对于有分布式计算框架应用经验的人员,本书也可以作为Spark高手修炼的参考书籍。同时,本书也特别适合作为高等院校的大数据教材使用。

清华大学出版社官方旗舰店(天猫)、京东、当当网、亚马逊等网店已可购买!欢迎大家购买学习!

清华大学出版社官方旗舰店(天猫) 点击打开链接

京东网购地址:点击打开链接

当当网址:点击打开链接

目    录

上篇  内核解密

第1章 电光石火间体验Spark 2.2开发实战... 2

1.1  通过RDD实战电影点评系统入门及源码阅读... 2

1.1.1  Spark核心概念图解... 2

1.1.2  通过RDD实战电影点评系统案例... 4

1.2  通过DataFrameDataSet实战电影点评系统... 7

1.2.1  通过DataFrame实战电影点评系统案例... 7

1.2.2  通过DataSet实战电影点评系统案例... 10

1.3  Spark 2.2源码阅读环境搭建及源码阅读体验... 11

第2章 Spark 2.2技术及原理... 14

2.1  Spark 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  DataFrameDatasetAPI 20

2.3.3  Timed Window.. 21

2.4  Spark 2.2 Streaming. 21

2.4.1  StructuredStreaming. 21

2.4.2  增量输出模式... 23

2.5  Spark 2.2 MLlib. 27

2.5.1  基于DataFrameMachineLearning API 28

2.5.2  R的分布式算法... 28

2.6  Spark 2.2 GraphX.. 29

第3章 Spark的灵魂:RDD和DataSet30

3.1  为什么说RDDDateSetSpark的灵魂... 30

3.1.1  RDD的定义及五大特性剖析... 30

3.1.2  DateSet的定义及内部机制剖析... 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.1  Task解析... 49

3.5.2  计算过程深度解析... 49

3.6  Spark RDD容错原理及其四大核心要点解析... 57

3.6.1  Spark RDD容错原理... 57

3.6.2  RDD容错的四大核心要点... 57

3.7  Spark RDDRuntime流程解析... 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 DriverProgram.. 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  Master HA双机切换... 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提交的角度重新审视Driver219

6.3.1  Driver到底是什么时候产生的... 220

6.3.2  DriverMaster交互原理解析... 238

6.3.3  DriverMaster交互源码详解... 244

6.4  Application提交的角度重新审视Executor249

6.4.1  Executor到底是什么时候启动的... 249

6.4.2  Executor如何把结果交给Application. 254

6.5  Spark 1.6 RPC内幕解密:运行机制、源码详解、NettyAkka... 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 BasedShuffle内核... 293

7.4.3  Sorted BasedShuffle数据读写的源码解析... 294

7.5  Tungsten Sorted Based Shuffle. 302

7.5.1  概述... 302

7.5.2  Tungsten SortedBased内核... 302

7.5.3  Tungsten SortedBased数据读写的源码解析... 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 TaskDriverExecutor中交互的全生命周期原理和源码详解... 348

8.4  ShuffleMapTaskResultTask处理结果是如何被Driver管理的... 364

8.4.1  ShuffleMapTask执行结果和Driver的交互原理及源码... 364

8.4.2 ResultTask执行结果与Driver的交互原理及源码详解... 370

第9章 Spark中Cache和checkpoint原理和源码详解... 372

9.1  SparkCache原理和源码详解... 372

9.1.1  SparkCache原理详解... 372

9.1.2  SparkCache源码详解... 372

9.2  Sparkcheckpoint原理和源码详解... 381

9.2.1  Sparkcheckpoint原理详解... 381

9.2.2  Sparkcheckpoint源码详解... 381

第10章 Spark中Broadcast和Accumulator原理和源码详解... 391

10.1  SparkBroadcast原理和源码详解... 391

10.1.1  SparkBroadcast原理详解... 391

10.1.2  SparkBroadcast源码详解... 393

10.2 SparkAccumulator原理和源码详解... 396

10.2.1  SparkAccumulator原理详解... 396

10.2.2  SparkAccumulator源码详解... 396

第11章 Spark与大数据其他经典组件整合原理与实战... 399

11.1 Spark组件综合应用... 399

11.2  SparkAlluxio整合原理与实战... 400

11.2.1  SparkAlluxio整合原理... 400

11.2.2  SparkAlluxio整合实战... 401

11.3  SparkJob Server整合原理与实战... 403

11.3.1  SparkJobServer整合原理... 403

11.3.2  SparkJobServer整合实战... 404

11.4  SparkRedis整合原理与实战... 406

11.4.1  SparkRedis整合原理... 406

11.4.2  SparkRedis整合实战... 407

中篇  商业案例

第12章 Spark商业案例之大数据电影点评系统应用案例... 412

12.1  通过RDD实现分析电影的用户行为信息... 412

12.1.1  搭建IDEA开发环境... 412

12.1.2  大数据电影点评系统中电影数据说明... 426

12.1.3  电影点评系统用户行为分析统计实战... 429

12.2  通过RDD实现电影流行度分析... 432

12.3  通过RDD分析各种类型的最喜爱电影TopN及性能优化技巧... 434

12.4  通过RDD分析电影点评系统仿QQ和微信等用户群分析及广播
背后机制解密... 437

12.5  通过RDD分析电影点评系统实现JavaScala版本的二次排序系统... 441

12.5.1  二次排序自定义Key值类实现(Java... 441

12.5.2  电影点评系统二次排序功能实现(Java... 444

12.5.3  二次排序自定义Key值类实现(Scala... 446

12.5.4  电影点评系统二次排序功能实现(Scala... 447

12.6  通过Spark SQL中的SQL语句实现电影点评系统用户行为分析... 448

12.7  通过Spark SQL下的两种不同方式实现口碑最佳电影分析... 452

12.8  通过Spark SQL下的两种不同方式实现最流行电影分析... 457

12.9  通过DataFrame分析最受男性和女性喜爱电影TopN.. 459

12.10  纯粹通过DataFrame分析电影点评系统仿QQ和微信、淘宝等用户群... 461

12.11  纯粹通过DataSet对电影点评系统进行流行度和不同年龄阶段兴趣分析等... 463

12.11.1  通过DataSet实现某特定电影观看者中男性和女性不同年龄的人数... 464

12.11.2  通过纯粹使用DataSet方式计算所有电影中平均得分最高
(口碑最好)的电影TopN.. 465

12.11.3  通过DataSet方式计算所有电影中粉丝或者观看人数最多(最流行电影)的电影TopN   466

12.11.4  纯粹使用DataSet实现所有电影中最受男性、女性喜爱的
电影Top10. 467

12.11.5  纯粹通过DataSet的方式实现所有电影中QQ或者微信核心目标
用户最喜爱电影TopN分析... 468

12.11.6  纯粹通过DataSet的方式实现所有电影中淘宝核心目标用户最喜爱电影TopN分析    470

12.12  大数据电影点评系统应用案例涉及的核心知识点原理、源码及案例代码... 471

12.12.1  知识点:广播变量Broadcast内幕机制... 472

12.12.2  知识点:SQL全局临时视图及临时视图... 475

12.12.3  大数据电影点评系统应用案例完整代码... 476

12.13  本章总结... 498

第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  DataFrameDataSet剖析与实战... 507

13.4  通过mapflatMapmapPartitions实战分析企业人员管理系统... 510

13.5  通过dropDuplicatecoalescerepartition等分析企业人员管理系统... 512

13.6  通过sortjoinjoinWith等分析企业人员管理系统... 514

13.7  通过randomSplitsampleselect等分析企业人员管理系统... 515

13.8  通过groupByaggcol等分析企业人员管理系统... 517

13.9  通过collect_listcollect_set等分析企业人员管理系统... 518

13.10  通过avgsumcountDistinct等分析企业人员管理系统... 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

NBA篮球运动员大数据分析系统应用数据说明如下。... 557

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  SparkJavaStreamingContext初始化及启动... 607

16.1.6  Spark Streaming使用NoReceivers方式读取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.1  Spark在通信运营商融合支付系统日志统计分析中的综合应用案例... 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 operatorGraph Operator760

18.4  Verticesedgestriplets762

18.5  以最原始的方式构建Graph. 765

18.6  实战第一个Graph代码实例并进行Verticesedgestriplets操作... 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

下篇  性能调优

第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或者mapPartitionWithIndex取代map操作... 842

20.1.1  mapPartitions内部工作机制和源码解析... 842

20.1.2  mapPartitionWithIndex内部工作机制和源码解析... 842

20.1.3  使用mapPartitions取代map案例和性能测试... 843

20.2  使用foreachPartitionSpark数据持久化到外部存储介质... 844

20.2.1  foreachPartition内部工作机制和源码解析... 844

20.2.2  使用foreachPartition写数据到MySQL中案例和性能测试... 845

20.3  使用coalesce取代rePartition操作... 845

20.3.1  coalescerepartition工作机制和源码剖析... 845

20.3.2  通过测试对比coalescerepartition的性能... 847

20.4  使用repartitionAndSortWithinPartitions取代repartitionsort的联合操作... 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 Persistcheckpoint使用时的正误方式... 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  实际生产环境下一般每个ExecutorCPU的具体配置及原因... 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实现MapperShuffle聚合功能的原理... 885

24.2  使用Broadcast实现MapperShuffle聚合功能调优实战... 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.1  Spark中对JVM使用的内存原理图说明... 896

26.2.2  Spark中对JVM使用的内存原理图内幕详解... 897

26.2.3  Spark下的常见的JVM内存调优参数最佳实践... 899

26.3 SparkJVMOn-HeapOff-Heap解密... 900

26.3.1  JVMOn-HeapOff-Heap详解... 901

26.3.2  Spark是如何管理JVMOn-HeapOff-Heap... 902

26.3.3  SparkJVMOn-HeapOff-Heap调优最佳实践... 903

26.4 Spark下的JVM GC导致的Shuffle拉取文件失败及调优方案... 905

26.4.1  Spark下的JVMGC导致的Shuffle拉取文件失败原因解密... 905

26.4.2  Spark下的JVMGC导致的Shuffle拉取文件失败时调优... 906

26.5 Spark下的ExecutorJVM 堆外内存连接等待时长调优... 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  SparkStreaming调优原理... 944

27.2.2  SparkStreaming调优参数及调优最佳实践... 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  使用HiveETL工具对源数据进行聚合并过滤掉导致倾斜的Keys 1009

30.2.4  使用SparkSQL对源数据进行聚合并过滤掉导致倾斜的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以前ShuffleJVM内存使用及配置内幕详情... 1063

31.11  Spark 2.2.XShuffle中内存管理源码解密:StaticMemory
UnifiedMemory
. 1069

31.12  Spark 2.2.XShuffleJVMUnified Memory内幕详情... 1085

31.13  Spark 2.2.XShuffle Task视角内存分配管理... 1090

31.14  Spark 2.2.XShuffleMapper端的源码实现... 1097

31.15  Spark 2.2.XShuffleSortShuffleWriter排序源码内幕解密... 1107

31.16 Spark 2.2.XSort ShuffletimSort排序源码具体实现... 1113

31.17  Spark 2.2.XSort ShuffleReducer端源码内幕... 1126



猜你喜欢

转载自blog.csdn.net/duan_zhihua/article/details/79322951
今日推荐