具体描述
本书共分为四大部分:
基础篇(1~10章)介绍了Spark的用途、扩展、安装、运行模式、程序开发、编程模型、工作原理,以及SparkSQL、SparkStreaming、MLlib、GraphX、Bagel等重要的扩展;
实战篇(11~14)讲解了搜索结果的排序、个性化推荐系统、日志分析系统、自然语言处理、数据挖掘等方面的案例;
高级篇(15~18)则讲解了Spark的调度管理、存储管理、监控管理、性能优化、最佳实践以及重点算法的解读;
扩展篇(19~20)讲解了Sparkjob-server和Tachyon。
作者简介
于俊,科大讯飞大数据专家,专注大数据Hadoop和spark平台;主要工作是大数据统计分析和机器学习算法工程实现。
向海,科大讯飞大数据专家,spark爱好者,专注于大数据领域,现从事基于spark的用户行为分析相关工作。
代其锋,百分点科技大数据架构师,专注于分布式系统架构;主要工作是负责公司底层基础平台的建设和spark技术的推广。
马海平,科大讯飞大数据高级研究员,专注于用机器学习做大数据商业变现;主要工作是数据挖掘算法研究和spam实现。
目录信息
基础篇
第1章Spark简介2
1.1什么是Spark2
1.1.1概述3
1.1.2Spark大数据处理框架3
1.1.3Spark的特点4
1.1.4Spark应用场景5
1.2Spark的重要扩展6
1.2.1SparkSQL和DataFrame6
1.2.2SparkStreaming7
1.2.3SparkMLlib和ML8
1.2.4GraphX8
1.2.5SparkR9
1.3本章小结10
第2章Spark部署和运行11
2.1部署准备11
2.1.1下载Spark11
2.1.2编译Spark版本12
2.1.3集群部署概述14
2.2Spark部署15
2.2.1Local模式部署16
2.2.2Standalone模式部署16
2.2.3YARN模式部署18
2.3运行Spark应用程序19
2.3.1Local模式运行Spark应用程序19
2.3.2Standalone模式运行Spark应用程序20
2.3.3YARN模式运行Spark22
2.3.4应用程序提交和参数传递23
2.4本章小结26
第3章Spark程序开发27
3.1使用SparkShell编写程序27
3.1.1启动SparkShell28
3.1.2加载text文件28
3.1.3简单RDD操作28
3.1.4简单RDD操作应用29
3.1.5RDD缓存30
3.2构建Spark的开发环境30
3.2.1准备环境30
3.2.2构建Spark的Eclipse开发环境31
3.2.3构建Spark的IntelliJIDEA开发环境32
3.3独立应用程序编程40
3.3.1创建SparkContext对象40
3.3.2编写简单应用程序40
3.3.3编译并提交应用程序40
3.4本章小结43
第4章编程模型44
4.1RDD介绍44
4.1.1RDD特征45
4.1.2RDD依赖45
4.2创建RDD47
4.2.1集合(数组)创建RDD47
4.2.2存储创建RDD48
4.3RDD操作49
4.3.1转换操作50
4.3.2执行操作52
4.3.3控制操作54
4.4共享变量56
4.4.1广播变量57
4.4.2累加器57
4.5本章小结58
第5章作业执行解析59
5.1基本概念59
5.1.1Spark组件59
5.1.2RDD视图60
5.1.3DAG图61
5.2作业执行流程62
5.2.1基于Standalone模式的Spark架构62
5.2.2基于YARN模式的Spark架构64
5.2.3作业事件流和调度分析65
5.3运行时环境67
5.3.1构建应用程序运行时环境68
5.3.2应用程序转换成DAG68
5.3.3调度执行DAG图70
5.4应用程序运行实例71
5.5本章小结72
第6章SparkSQL与DataFrame73
6.1概述73
6.1.1SparkSQL发展74
6.1.2SparkSQL架构74
6.1.3SparkSQL特点76
6.1.4SparkSQL性能76
6.2DataFrame77
6.2.1DataFrame和RDD的区别78
6.2.2创建DataFrame78
6.2.3DataFrame操作80
6.2.4RDD转化为DataFrame82
6.3数据源84
6.3.1加载保存操作84
6.3.2Parquet文件85
6.3.3JSON数据集88
6.3.4Hive表89
6.3.5通过JDBC连接数据库91
6.3.6多数据源整合查询的小例子92
6.4分布式的SQLEngine93
6.4.1运行ThriftJDBC/ODBC服务93
6.4.2运行SparkSQLCLI94
6.5性能调优94
6.5.1缓存数据94
6.5.2调优参数94
6.5.3增加并行度95
6.6数据类型95
6.7本章小结96
第7章深入了解SparkStreaming97
7.1基础知识97
7.1.1SparkStreaming工作原理98
7.1.2DStream编程模型99
7.2DStream操作100
7.2.1InputDStream100
7.2.2DStream转换操作102
7.2.3DStream状态操作104
7.2.4DStream输出操作106
7.2.5缓存及持久化107
7.2.6检查点108
7.3性能调优109
7.3.1优化运行时间109
7.3.2设置合适的批次大小111
7.3.3优化内存使用111
7.4容错处理112
7.4.1文件输入源112
7.4.2基于Receiver的输入源112
7.4.3输出操作113
7.5一个例子113
7.6本章小结115
第8章SparkMLlib与机器学习116
8.1机器学习概述116
8.1.1机器学习分类117
8.1.2机器学习算法117
8.2SparkMLlib介绍118
8.3SparkMLlib库119
8.3.1MLlib数据类型120
8.3.2MLlib的算法库与实例123
8.4ML库142
8.4.1主要概念143
8.4.2算法库与实例145
8.5本章小结147
第9章GraphX图计算框架与应用148
9.1概述148
9.2SparkGraphX架构149
9.3GraphX编程150
9.3.1GraphX的图操作152
9.3.2常用图算法161
9.4应用场景164
9.4.1图谱体检平台164
9.4.2多图合并工具165
9.4.3能量传播模型165
9.5本章小结166
第10章SparkR(RonSpark)167
10.1概述167
10.1.1SparkR介绍168
10.1.2SparkR的工作原理168
10.1.3R语言介绍169
10.1.4R语言与其他语言的通信170
10.2安装SparkR170
10.2.1安装R语言与rJava171
10.2.2SparkR的安装171
10.3SparkR的运行与应用示例172
10.3.1运行SparkR172
10.3.2SparkR示例程序173
10.3.3R的DataFrame操作方法175
10.3.4SparkR的DataFrame183
10.4本章小结186
实战篇
第11章大数据分析系统188
11.1背景188
11.2数据格式189
11.3应用架构189
11.4业务实现190
11.4.1流量、性能的实时分析190
11.4.2流量、性能的统计分析192
11.4.3业务关联分析193
11.4.4离线报表分析195
11.5本章小结199
第12章系统资源分析平台200
12.1业务背景200
12.1.1业务介绍201
12.1.2实现目标201
12.2应用架构201
12.2.1总体架构202
12.2.2模块架构202
12.3代码实现203
12.3.1Kafka集群203
12.3.2数据采集207
12.3.3离线数据处理207
12.3.4数据表现207
12.4结果验证213
12.5本章小结214
第13章在Spark上训练LR模型215
13.1逻辑回归简介215
13.2数据格式216
13.3MLlib中LR模型源码介绍217
13.3.1逻辑回归分类器217
13.3.2优化方法219
13.3.3算法效果评估221
13.4实现案例223
13.4.1训练模型223
13.4.2计算AUC223
13.5本章小结224
第14章获取二级邻居关系图225
14.1理解PageRank225
14.1.1初步理解PageRank225
14.1.2深入理解PageRank227
14.2PageRank算法基于Spark的实现228
14.3基于PageRank的二级邻居获取232
14.3.1系统设计232
14.3.2系统实现232
14.3.3代码提交命令235
14.4本章小结236
高级篇
第15章调度管理238
15.1调度概述238
15.1.1应用程序间的调度239
15.1.2应用程序中的调度241
15.2调度器242
15.2.1调度池243
15.2.2Job调度流程243
15.2.3调度模块245
15.2.4Job的生与死249
15.3本章小结253
第16章存储管理254
16.1硬件环境254
16.1.1存储系统254
16.1.2本地磁盘255
16.1.3内存255
16.1.4网络和CPU255
16.2Storage模块256
16.2.1通信层256
16.2.2存储层258
16.3Shuffle数据持久化261
16.4本章小结263
第17章监控管理264
17.1Web界面264
17.2SparkUI历史监控266
17.2.1使用spark—server的原因266
17.2.2配置spark—server266
17.3监控工具269
17.3.1Metrics工具269
17.3.2其他工具271
17.4本章小结272
第18章性能调优273
18.1文件的优化273
18.1.1输入采用大文件273
18.1.2lzo压缩处理274
18.1.3Cache压缩275
18.2序列化数据277
18.3缓存278
18.4共享变量278
18.4.1广播变量279
18.4.2累加器279
18.5流水线优化280
18.6本章小结280
扩展篇
第19章Spark—jobserver实践282
19.1Spark—jobserver是什么282
19.2编译、部署及体验283
19.2.1编译及部署283
19.2.2体验286
19.3Spark—jobserver程序实战288
19.3.1创建步骤288
19.3.2一些常见的问题289
19.4使用场景:用户属性分布计算289
19.4.1项目需求290
19.4.2计算架构290
19.4.3使用NamedRDD291
19.5本章小结291
第20章SparkTachyon实战292
20.1Tachyon文件系统292
20.1.1文件系统概述293
20.1.2HDFS和Tachyon294
20.1.3Tachyon设计原理294
20.1.4Tachyon特性295
20.2Tachyon入门295
20.2.1Tachyon部署295
20.2.2TachyonAPI297
20.2.3在Spark上使用Tachyon298
20.3容错机制299
20.4本章小结300
· · · · · · (收起)
读后感
1. 把它作为个人学习Spark的入门书,我觉得是个不错的选择,我重点阅读了前面的基础篇和实践篇,让我很快对于Spark的基础概念、逻辑架构的使用有了一个快速的了解; 2. 从书中可以看出作者们对于大数据的使用和发展的历史是比较了解,书中的介绍也能将读者很好地代入到其中去加...
1. 把它作为个人学习Spark的入门书,我觉得是个不错的选择,我重点阅读了前面的基础篇和实践篇,让我很快对于Spark的基础概念、逻辑架构的使用有了一个快速的了解; 2. 从书中可以看出作者们对于大数据的使用和发展的历史是比较了解,书中的介绍也能将读者很好地代入到其中去加...
1. 把它作为个人学习Spark的入门书,我觉得是个不错的选择,我重点阅读了前面的基础篇和实践篇,让我很快对于Spark的基础概念、逻辑架构的使用有了一个快速的了解; 2. 从书中可以看出作者们对于大数据的使用和发展的历史是比较了解,书中的介绍也能将读者很好地代入到其中去加...
1. 把它作为个人学习Spark的入门书,我觉得是个不错的选择,我重点阅读了前面的基础篇和实践篇,让我很快对于Spark的基础概念、逻辑架构的使用有了一个快速的了解; 2. 从书中可以看出作者们对于大数据的使用和发展的历史是比较了解,书中的介绍也能将读者很好地代入到其中去加...
1. 把它作为个人学习Spark的入门书,我觉得是个不错的选择,我重点阅读了前面的基础篇和实践篇,让我很快对于Spark的基础概念、逻辑架构的使用有了一个快速的了解; 2. 从书中可以看出作者们对于大数据的使用和发展的历史是比较了解,书中的介绍也能将读者很好地代入到其中去加...
用户评价
当我拿到这本厚重的著作时,首先感受到的是它在知识体系构建上的严谨性。它不像有些技术书籍那样零散地堆砌知识点,而是呈现出一个清晰的脉络:从基础的架构设计哲学,逐步深入到更复杂的流式处理模型和机器学习库的底层实现。尤其值得称道的是,作者对Spark SQL和Catalyst优化器的解读,简直是艺术品。他将原本晦涩难懂的逻辑计划到物理计划的转换过程,用非常形象的比喻和结构化的图示进行了阐述,使得即便是对查询优化器不甚熟悉的读者,也能迅速掌握其核心思想。我特别欣赏其中关于向量化执行引擎的章节,作者详细对比了不同版本的Spark在处理聚合函数时的性能差异,并解释了背后的CPU指令集层面的优化。这种从宏观架构到微观实现的无缝衔接,极大地拓宽了我的视野,让我明白了为何在某些特定场景下,简单的SQL语句也能爆发出惊人的处理能力。这本书真正做到了“授人以渔”,它提供的不是一堆现成的答案,而是一套可以让你自己解决未来所有性能瓶颈的思维框架。
这本书的写作风格非常独特,它巧妙地平衡了学术的严谨性和工程的实用性。我个人非常欣赏作者在介绍新特性时所采取的辩证分析方式。例如,在讨论结构化流(Structured Streaming)时,作者并没有盲目推崇其优越性,而是详细分析了微批处理模型与原生流模型的适用场景边界,特别是对于低延迟和高吞吐量场景下的权衡取舍。这种不偏不倚、基于数据说话的态度,极大地增强了内容的客观性和可信度。阅读过程中,我感觉自己仿佛在与一位经验深厚的导师进行深度对话,他不仅展示了技术的“光明面”,也毫不避讳地指出了其局限性以及如何通过设计模式来弥补这些不足。这种对技术全景的把握,使得这本书成为了一份真正可靠的参考资料,而不是一份过时的功能说明书。它鼓励读者去思考工具背后的设计哲学,而不是仅仅停留在对API命令的记忆上。
这本书的封面设计着实抓人眼球,那种深沉的蓝色调配上充满科技感的线条,立刻让人联想到数据处理的巨大潜能。我一开始抱着一种审慎的态度翻开这本书,毕竟市面上关于大数据工具的书籍汗牛充栋,真正能深入浅出讲解核心机制的却寥寥无几。然而,在阅读了关于内存计算和弹性分布式数据集(RDD)的章节后,我的疑虑一扫而空。作者似乎对Spark的内部工作原理有着极其透彻的理解,他没有停留在API层面的简单介绍,而是花费了大量篇幅去剖析任务调度、DAG执行器以及数据分区策略是如何协同作用,以实现极致的性能优化。特别是关于Shuffle过程的优化技巧,书中提供的具体代码示例和性能对比分析,对于我们一线工程师来说,简直是教科书级别的指导。它不仅仅是教会你“怎么用”,更重要的是告诉你“为什么这么用效率最高”。我立刻尝试将书中的一些高级优化建议应用到我们现有的数据清洗流程中,结果发现资源消耗显著下降,数据处理速度提升了近三成,这种立竿见影的效果,让我对这本书的价值有了更深层次的认识。对于任何想要从“会用Spark”跨越到“精通Spark”的开发者而言,这本书记载的知识密度和实践指导价值是无可替代的。
对于我们团队中的初级工程师来说,这本书的入门友好度出乎意料地高。尽管它深入探讨了复杂的底层机制,但开篇的章节对Spark生态系统的整体构成和组件间的交互关系描述得极为清晰。通过一系列精心设计的、从小到大的示例,新成员能够逐步建立起对分布式计算的直观理解。我注意到作者在讲解广播变量(Broadcast Variables)的原理时,使用了非常形象的比喻,清晰地区分了Driver端如何分发数据以及Executor端如何高效地缓存和读取这些数据,避免了传统的文件拷贝带来的网络开销。这对于理解Spark中数据共享的效率差异至关重要。更重要的是,这本书的章节组织逻辑非常有利于自学,即使是独自研读,也能感受到清晰的知识递进关系,很少出现需要频繁跳跃章节才能理解前后文的情况。总而言之,这是一本可以陪伴工程师从入门到精通,并在漫长的职业生涯中持续提供价值的工具书,其深度和广度都超出了我的初始预期。
老实说,我阅读许多技术书籍时都会遇到一个问题:理论讲得天花乱坠,但一到实际生产环境的问题,就显得力不从心。然而,这本书似乎完全预料到了这一点。它在每一章的末尾,都设置了“生产环境挑战与应对策略”的专题讨论。我记得有一段描述了在处理TB级数据时,由于集群网络带宽成为瓶颈,如何通过调整序列化协议和数据传输的批次大小来规避这一问题。书中提供的诊断工具清单和对应的故障排查流程,详细到令人感动。例如,如何利用Spark UI中隐藏的Executor Logs来定位OOM(内存溢出)的真正元凶,而不是简单地增加堆内存大小。这种源自实战的经验沉淀,是任何理论教材都无法比拟的宝贵财富。这本书与其说是一本技术手册,不如说是一位经验丰富的大数据架构师在手把手地带你穿越复杂多变的集群故障迷雾。它不仅教会了我如何写出高效的代码,更教会了我如何运维一个稳定、高效的大数据平台。
学习Spark
内容较全面,基础篇的代码分析也基本到位(有一本《Spark技术内幕》专门讲实现会更详细),实战-高级章节可以更细致点,更丰富点。
书的内容基于1.5 对于2018年8月来说的确偏低 但是这书是2016-01-01出版的 其实思路蛮清晰的 适合入门到实践,按照我的标准来说是一本好书,却卖的很不好,国内一些垃圾书却卖的不错,有点不公平。
内容较全面,基础篇的代码分析也基本到位(有一本《Spark技术内幕》专门讲实现会更详细),实战-高级章节可以更细致点,更丰富点。
书的内容基于1.5 对于2018年8月来说的确偏低 但是这书是2016-01-01出版的 其实思路蛮清晰的 适合入门到实践,按照我的标准来说是一本好书,却卖的很不好,国内一些垃圾书却卖的不错,有点不公平。