具体描述
Spark是一个高效的分布式计算系统,相比Hadoop,它在性能上比Hadoop要高100倍。Spark提供比Hadoop更上层的API,同样的算法在Spark中实现往往只有Hadoop的1/10或者1/100的长度。
Spark较大的集群来自腾讯——8000个节点,而单个较大的Job分别是阿里巴巴和Databricks——1PB,震撼人心!同时,截止2015年6月,Spark的Contributor比2014年涨了3倍,达到730人;总代码行数也比2014年涨了2倍多,达到40万行。
本书是国内(包括Github社区)较新的基于Spark 1.4版本的技术书籍,涵盖Spark技术的环境搭建、RDD实操应用、内部机制、调优和企业应用等内容,具体如下。
1)基于IntelliJ IDEA的运行、开发和编译环境的详细搭建过程。
2)详细介绍Spark技术基础概念和应用实践。
3)基于Spark 1.4官方文档对Spark四大应用框架进行解读。
4)基于源码深入剖析Spark的资源调度、任务调度和shuffle过程。
5)深入解读近两年Spark峰会和国内企业分享的典型应用案例。
本书的编写系统完整,力争以通俗易懂的语言全方位精细解读Spark技术,本书主要针对大数据技术初学者,包括但不限于大学生、研究生和工程师。此外,Spark应用开发人员、运维工程师和开源软件爱好者也可以将本书作为参考用书。
本书共分为概念、开发、机制和应用四篇,概念篇介绍Spark的背景概念和环境配置方法,开发篇介绍了Spark核心开发、四大应用框架和调优策略,机制篇则对Spark的RDD、调度和shuffle等机制进行解读,应用篇针对Spark在业界的典型应用进行阐述。
作者简介
刘驰,博士,现任北京理工大学软件学院教授,软件服务工程系系主任。入选“北京理工大学杰出中青年支持与发展计划”。主持了国家自然科学基金、工信部电子商务集成试点工程等多项国家省部级重点项目。分别于清华大学和英国帝国理工学院获得学士和博士学位,后历任德国电信研究院(柏林)博士后研究员、美国IBM TJ Watson研究中心研究员和IBM中国研究院研究主管。研究方向为:物联网、云计算和大数据技术。
目录信息
第一篇概念篇
第1章Spark概述
1.1Spark初见
1.1.1Spark的发展史及近况
1.1.2Spark的特点
1.1.3Spark的作用
1.1.4Spark的体系结构
1.1.5Spark的发展趋势
1.2Spark框架
1.2.1批处理框架
1.2.2流处理框架
1.3Spark的生态系统
1.4Spark的数据存储
1.5本章小结
第2章Spark环境配置
2.1Spark运行环境配置
2.1.1先决条件
2.1.2下载与运行Spark
2.1.3使用交互式Shell
2.1.4搭建Spark Standalone集群
2.2Spark开发环境配置
2.2.1Spark独立应用程序
2.2.2构建IDE开发环境
2.3Spark编译环境配置
2.3.1使用Maven编译项目源码
2.3.2使用IDEA搭建源码编译与阅读环境
2.4本章小结
第二篇开发篇
第3章Spark核心开发
3.1Spark编程模型概述
3.2SparkContext
3.2.1SparkContext的作用
3.2.2SparkContext的创建
3.2.3使用Shell
3.2.4应用实践
3.3RDD简介
3.3.1RDD创建
3.3.2RDD转换操作
3.3.3RDD动作操作
3.3.4RDD惰性计算
3.3.5RDD持久化
3.3.6RDD检查点
3.4共享变量
3.4.1广播变量
3.4.2累加器
3.5Spark核心开发实践
3.5.1单值型Trasnformation算子
3.5.2键值对型Transformation算子
3.5.3Action算子
3.6本章小结
第4章Spark四大应用技术框架
4.1Spark SQL
4.1.1Spark SQL入门
4.1.2数据源
4.1.3性能调优
4.1.4分布式SQL引擎
4.1.5Shark迁移至SparkSQL指南
4.1.6Hive的兼容性
4.1.7Spark SQL数据类型
4.2Spark Streaming
4.2.1Spark Streaming简介
4.2.2入门实例
4.2.3基本概念
4.3Spark GraphX
4.3.1Spark GraphX简介
4.3.2属性图
4.3.3图操作
4.3.4Pregel API
4.3.5图构造器
4.3.6顶点与边相关RDD
4.3.7最优化表示
4.3.8图算法
4.3.9Ex锄ple
4.4Spark Mllib
4.4.1Spark Mllib简介
4.4.2数据类型
4.4.3基本统计分析
4.4.4分类与回归
4.4.5协同过滤
4.4.6聚类
4.4.7降维
4.4.8特征提取与转换
4.4.9频繁模式挖掘
4.4.10最优化算法
4.4.11导出PMMl模式
4.5SparkR
4.5.1SparkR DataFrame
4.5.2DataFrame的相关操作
4.5.3从SparkR运行SQL查询
第5章Spark系统配置与调优
5.1Spark运行监控
5.2Spark配置参数
5.2.1应用属性
5.2.2运行环境属性
5.2.3Shuffle操作属性
5.2.4压缩与序列化属性
5.2.5数据序列化
5.3内存调优
5.3.1调整数据结构
5.3.2序列化RDD存储
5.3.3GC
5.4其他调优
5.4.1并行度
5.4.2Reduce任务
5.4.3广播变量
5.4.4数据本地化
5.4.5网络通信调优
5.4.6磁盘空间优化
5.4.7任务执行速度“倾斜”
5.5本童小结
第三篇机制篇
第6章RDD内部结构
6.1RDD接口
6.2分区
6.2.1分区接口
6.2.2分区个数
6.2.3分区内部的记录个数
6.3依赖关系
6.3.1依赖与RDD
6.3.2依赖分类
6.3.3窄依赖
6.3.4Shuffle依赖
6.3.5依赖与容错机制
6.3.6依赖与并行计算
6.4计算函数
6.4.1compute方法
6.4.2iterator方法
6.5分区器
6.5.1哈希分区器
6.5.2范围分区器
6.5.3默认分区器
6.6持久化
6.7检查点
6.8本章小结
第7章Spark调度机制
7.1调度基础
7.1.1基本概念
7.1.2通信框架
7.2集群资源调度
7.2.1集群部署图
7.2.2集群资源注册
7.2.3集群资源申请与分配
7.3DAG调度
7.3.1DAG调度通信机制
7.3.2作业处理流程
7.3.3阶段划分
7.4任务调度
7.4.1任务分类与执行
7.4.2任务划分与提交
7.4.3任务调度算法
7.4.4任务调度相关类
7.4.5任务分配
7.4.6任务接收与执行
7.5本章小结
第8章Shuffle过程
8.1与Hadoop Shuffle过程的区别
8.1.1MR模型的Shuffle过程
8.1.2聚合器
8.1.3哈希Shuffle与排序Shuffle
8.1.4Spark的Shufne过程
8.2Shume写过程
8.2.1哈希Shuffle写过程
8.2.2排序Shuffle写过程
8.3Shume读过程
8.4本章小结
第四篇应用篇
第9章视频娱乐领域
9.1腾讯公司在Hadoop和Spark平台上的应用
9.1.1公司背景特点
9.1.2业务需求
9.1.3解决方案
9.1.4方案效果
9.1.5小结
9.2Spotify公司在Hadoop和Spark平台AlS算法的运行时间对比
9.2.1公司背景特点
9.2.2业务需求
9.2.3解决方案
9.2.4方案效果
9.2.5小结
9.3本章小结
第10章电商领域
10.1淘 宝公司在Spark平台上对GraphX与Bagel的运行效果对比
10.1.1公司背景特点
10.1.2业务需求
10.1.3解决方案
10.1.4方案效果
10.1.5小结
10.2Yahoo!关于Hive与Shark的应用
10.2.1公司背景特点
10.2.2业务需求
10.2.3解决方案
10.2.4方案效果
10.2.5小结
10.3本章小结
第11章电信领域
11.1Telefonica应用Spark和Cassandra方案解决多用户事务查询
11.1.1公司背景特点
11.1.2业务需求
11.1.3解决方案
11.1.4方案效果
11.1.5小结
11.2NTTDATA对Spark on YARN架构各项性能测试分析
11.2.1公司背景特点
11.2.2业务需求
11.2.3解决方案
11.2.4方案效果
11.2.5小结
11.3本章小结
第12章零售领域
12.1Euclid Analysis基于Spark的地理位置分析服务
12.1.1公司背景特点
12.1.2业务需求
12.1.3解决方案
12.1.4方案效果
12.1.5小结
12.2Graphflow应用Spark Mllib进行实时个性化推荐
12.2.1公司背景特点
12.2.2业务需求
12.2.3解决方案
12.2.4方案效果
12.2.5小结
12.3本章小结
第13章其他领域
13.1Uber基于Spark的私家车搭乘服务
13.1.1公司背景特点
13.1.2业务需求
13.1.3解决方案
13.1.4方案效果
13.1.5小结
13.2PubMatic应用Spark提供广告服务
13.2.1公司背景特点
13.2.2业务需求
13.2.3解决方案
13.2.4方案效果
13.2.5小结
13.3本章小结
· · · · · · (收起)
读后感
用户评价
刚读完这本号称“深度剖析”大数据处理框架的书,说实话,心情挺复杂的。作者的叙事风格与其说是技术讲解,不如说是在试图重构一个已有的知识体系,这对于初学者来说可能是一场灾难。书中对底层数据结构和内存模型的描述,与其说是精准到位,不如说是在玩弄概念的堆砌,很多地方需要读者自行脑补缺失的逻辑链条。我尤其对其中关于容错机制的章节感到不满,它似乎过于依赖对现有成熟解决方案的简单复述,缺乏真正深入到实现细节的勇气和能力。比如,对于Shuffle阶段的数据传输优化,书中只是泛泛而谈了网络I/O的理论基础,却对实际生产环境中可能遇到的网络抖动、磁盘瓶颈等具体问题,以及框架层面是如何用巧妙的编码技巧去规避这些问题,几乎没有着墨。这使得这本书在实战指导价值上大打折扣,更像是一本面向学术研讨的理论概述,而非面向工程师的实操指南。读完后,我感觉自己知识的广度增加了那么一点点,但深度上却像踩在了棉花上,总觉得少了点“骨气”。
这本书的翻译质量,或者说本土化的处理,也让我感到一丝不适。虽然大部分技术术语的对应尚可接受,但在一些关键的上下文语境中,表达显得非常生硬和不自然,让人阅读时频繁地需要在大脑中进行二次解码。这不仅拖慢了阅读速度,更重要的是,它阻碍了作者试图建立的那种流畅的技术思维链条。例如,在描述数据倾斜处理时,有些句子结构冗长且主谓不明,使得原本就棘手的概念变得更加晦涩难懂。优秀的译作,应该如同原著一样,让人感受不到翻译的痕迹,直接与作者的思想进行对话。遗憾的是,这本书给我的感觉更像是在一个技术“黑话”的迷宫中穿行,需要不断地停下来,辨认和修正那些错位的词语组合。这无疑极大地影响了阅读体验,对于希望快速掌握核心技术的读者来说,这种障碍是不可忽视的。
这本书的排版和设计实在是一言难尽,厚厚一沓纸,内容组织上却透露着一种散乱的、缺乏规划的痕迹。它更像是一系列零散技术笔记的拼凑,而不是一本精心编纂的教材。我花了大量时间试图在不同章节之间建立起逻辑上的联系,但往往发现,作者似乎更热衷于罗列各种参数和配置项,却鲜少解释这些配置背后的设计哲学是什么。例如,在谈论高级API的使用时,它只是给出了一堆函数签名的解释,却没有深入探讨为什么使用这种声明式编程范式能带来性能上的优势,或者在什么场景下回归到底层API会是更明智的选择。这种“知其然,而不知其所以然”的写作方式,极大地削弱了读者的学习兴趣。我更欣赏那种能将复杂技术融入到清晰的故事线中的作品,让读者在跟随作者的思路时,自然而然地领悟到技术的精髓。遗憾的是,这本书似乎更偏爱堆砌术语,用密集的专业名词来营造一种“专业”的假象,但实质上,它提供的洞察力是极其有限的。
我必须承认,本书的某些图示在试图简化概念时,反而起到了反作用。有些流程图复杂到需要我用尺子来辅助阅读,而且箭头和标记的指向性常常模糊不清,似乎是为了展示内容的“丰富性”而强行塞入的元素,与实际需要表达的技术逻辑脱节严重。更让人抓狂的是,书中对性能调优的章节处理得过于草率。它罗列了一系列调优参数(如JVM堆大小、GC策略等),却很少提供一个系统的、可重复的诊断流程。一个优秀的调优指南,应该教会读者如何观察、如何定位瓶颈,而不是仅仅提供一个参数清单让读者去盲目试错。我期待的是一种“调试的艺术”,一种基于对执行计划深入理解后进行的精准干预,而不是这种“碰运气”式的参数调整建议。读完这一部分,我更想做的是打开一个真实集群的监控界面,而不是对着书本上的参数列表发呆。
从一个资深从业者的角度来看,这本书在对“应用”层面的探讨上,显得尤为肤浅和保守。它花了大量的篇幅去解释“如何搭建集群”或者“如何运行一个基础的MapReduce作业”,这些内容在任何官方文档和在线教程中都能找到更清晰、更及时的版本。真正有价值的经验,往往隐藏在那些“为什么这样做会失败”或者“在海量数据下我们应该如何调整策略”的讨论中。然而,本书几乎完全避开了这些高风险、高回报的讨论领域。比如,关于工作负载隔离和资源调度器(如YARN)的深入集成,书中只是简单提及了资源队列的概念,却完全没有触及到企业级复杂调度策略的博弈,比如如何平衡批处理和流处理之间的资源争夺,或者如何设计定制化的容器启动脚本以优化冷启动时间。这些在真实世界中决定项目成败的关键点,在这本书里被轻描淡写地带过了,让人感觉作者的经验可能主要停留在了一个相对理想化的测试环境,而非充满各种“惊喜”的生产线上。
入门……
不错 入门级 易懂
不错 入门级 易懂
不错 入门级 易懂
不错 入门级 易懂