《Spark大数据商业实战三部曲》是一本基于Spark 2.2.X的重要参考书。通过以Spark商业案例实战和性能调优为核心,本书从多个角度全面解析了Spark 2.2的内核机制和应用场景。书中内容循序渐进,涵盖了Spark在生产环境下几乎所有类型的性能调优技巧。不仅如此,本书还以实用性为目标,通过详细的商业案例和解读,帮助读者在实际应用中更好地理解和应用Spark。无论是初学者还是有一定经验的开发者,都可以从本书中获得实践经验和解密Spark内核的深入知识。《Spark大数据商业实战三部曲》是一部完全全面的Spark实战指南,强烈推荐下载。
Spark大数据商业实战三部曲:内核解密|商业案例|性能调优 电子书封面
读者评价
不适合初学者需要读者对Spark有一定的了解,Scala也要掌握
书厚不厚没问题,就是内容不怎么样。章节比较混乱,认为首先将RPC放在第一章来讲,接着RDD等内容.......感觉作者自己就没有吃透
不太适合初学者,连什么是spark都不知道, 一打开就是源码,蒙了。
全都是scala开发, 对于我java开发来说还是看不懂。
内容介绍
《Spark大数据商业实战三部曲:内核解密|商业案例|性能调优》基于Spark 2.2.X,以Spark商业案例实战和Spark在生产环境下几乎所有类型的性能调优为核心,以Spark内核解密为基石,分为上篇、中篇、下篇,对企业生产环境下的Spark商业案例与性能调优抽丝剥茧地进行剖析。上篇基于Spark源码,从一个动手实战案例入手,循序渐进地全面解析了Spark 2.2新特性及Spark内核源码;中篇选取Spark开发中最有代表的经典学习案例,深入浅出地介绍,在案例中综合应用Spark的大数据技术;下篇性能调优内容基本wan全覆盖了Spark在生产环境下的所有调优技术。
内容节选
Spark入门简介
SPARK
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。
Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎 。现在形成一个高速发展应用广泛的生态系统。
学习大数据的起点
Spark 主要有三个特点 :
首先,高级 API 剥离了对集群本身的关注,Spark 应用开发者可以专注于应用所要做的计算本身。
其次,Spark 很快,支持交互式计算和复杂算法。
最后,Spark 是一个通用引擎,可用它来完成各种各样的运算,包括 SQL 查询、文本处理、机器学习等,而在 Spark 出现之前,我们一般需要学习各种各样的引擎来分别处理这些需求。
性能特点
更快的速度
内存计算下,Spark 比 Hadoop 快100倍。
易用性
Spark 提供了80多个高级运算符。
通用性
Spark 提供了大量的库,包括SQL、DataFrames、MLlib、GraphX、Spark Streaming。 开发者可以在同一个应用程序中无缝组合使用这些库。
支持多种资源管理器
Spark 支持 Hadoop YARN,Apache Mesos,及其自带的独立集群管理器
Spark生态系统
Shark:Shark基本上就是在Spark的框架基础上提供和Hive一样的HiveQL命令接口,为了最大程度的保持和Hive的兼容性,Shark使用了Hive的API来实现query Parsing和 Logic Plan generation,最后的PhysicalPlan execution阶段用Spark代替HadoopMapReduce。通过配置Shark参数,Shark可以自动在内存中缓存特定的RDD,实现数据重用,进而加快特定数据集的检索。同时,Shark通过UDF用户自定义函数实现特定的数据分析学习算法,使得SQL数据查询和运算分析能结合在一起,最大化RDD的重复使用。
SparkR:SparkR是一个为R提供了轻量级的Spark前端的R包。 SparkR提供了一个分布式的data frame数据结构,解决了 R中的data frame只能在单机中使用的瓶颈,它和R中的data frame 一样支持许多操作,比如select,filter,aggregate等等。(类似dplyr包中的功能)这很好的解决了R的大数据级瓶颈问题。 SparkR也支持分布式的机器学习算法,比如使用MLib机器学习库。 SparkR为Spark引入了R语言社区的活力,吸引了大量的数据科学家开始在Spark平台上直接开始数据分析之旅。
基本原理
Spark Streaming:构建在Spark上处理Stream数据的框架,基本的原理是将Stream数据分成小的时间片断(几秒),以类似batch批量处理的方式来处理这小部分数据。Spark Streaming构建在Spark上,一方面是因为Spark的低延迟执行引擎(100ms+),虽然比不上专门的流式数据处理软件,也可以用于实时计算,另一方面相比基于Record的其它处理框架(如Storm),一部分窄依赖的RDD数据集可以从源数据重新计算达到容错处理目的。此外小批量处理的方式使得它可以同时兼容批量和实时数据处理的逻辑和算法。方便了一些需要历史数据和实时数据联合分析的特定应用场合。
计算方法
Bagel: Pregel on Spark,可以用Spark进行图计算,这是个非常有用的小项目。Bagel自带了一个例子,实现了Google的PageRank算法。
当下Spark已不止步于实时计算,目标直指通用大数据处理平台,而终止Shark,开启SparkSQL或许已经初见端倪。
近几年来,大数据机器学习和数据挖掘的并行化算法研究成为大数据领域一个较为重要的研究热点。早几年国内外研究者和业界比较关注的是在 Hadoop 平台上的并行化算法设计。然而, HadoopMapReduce 平台由于网络和磁盘读写开销大,难以高效地实现需要大量迭代计算的机器学习并行化算法。随着 UC Berkeley AMPLab 推出的新一代大数据平台 Spark 系统的出现和逐步发展成熟,近年来国内外开始关注在 Spark 平台上如何实现各种机器学习和数据挖掘并行化算法设计。为了方便一般应用领域的数据分析人员使用所熟悉的 R 语言在 Spark 平台上完成数据分析,Spark 提供了一个称为 SparkR 的编程接口,使得一般应用领域的数据分析人员可以在 R 语言的环境里方便地使用 Spark 的并行化编程接口和强大计算能力。
目录
- 上篇 内核解密
- 第1章 电光石火间体验Spark 2.2开发实战
- 第2章 Spark 2.2技术及原理
- 第3章 Spark的灵魂:RDD和DataSet
- 第4章 Spark Driver启动内幕剖析
- 第5章 Spark集群启动原理和源码详解
- 第6章 Spark Application提交给集群的原理和源码详解
- 第7章 Shuffle原理和源码详解
- 第8章 Job工作原理和源码详解
- 第9章 Spark中Cache和checkpoint原理和源码详解
- 第10章 Spark中Broadcast和Accumulator原理和源码详解
- 第11章 Spark与大数据其他经典组件整合原理与实战
- 中篇 商业案例
- 第12章 Spark商业案例之大数据电影点评系统应用案例
- 第13章 Spark 2.2实战之Dataset开发实战企业人员管理系统应用案例
- 第14章 Spark商业案例之电商交互式分析系统应用案例
- 第15章 Spark商业案例之NBA篮球运动员大数据分析系统应用案例
- 第16章 电商广告点击大数据实时流处理系统案例
- 第17章 Spark在通信运营商生产环境中的应用案例
- 第18章 使用Spark GraphX实现婚恋社交网络多维度分析案例
- 下篇 性能调优
- 第19章 对运行在YARN上的Spark进行性能调优
- 第20章 Spark算子调优最佳实践
- 第21章 Spark频繁遇到的性能问题及调优技巧
- 第22章 Spark集群资源分配及并行度调优最佳实践
- 第23章 Spark集群中Mapper端、Reducer端内存调优
- 第24章 使用Broadcast实现Mapper端Shuffle聚合功能的原理和调优实战
- 第25章 使用Accumulator高效地实现分布式集群全局计数器的原理和调优案例
- 第26章 Spark下JVM性能调优最佳实践
- 第27章 Spark五大子框架调优最佳实践
- 第28章 Spark 2.2.0新一代钨丝计划优化引擎
- 第29章 Spark Shuffle调优原理及实践
- 第30章 Spark性能调优之数据倾斜调优一站式解决方案原理与实战
- 第31章 Spark大数据性能调优实战专业之路
- 后记
1)一组分片(Partition),即数据集的基本组成单位。对于RDD来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度。用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的CPU Core的数目。 2)一个计算每个分区的函数。Spark中RDD的计算是以分片为单位的,每个RDD都会实现compute函数以达到这个目的。compute函数会对迭代器进行复合,不需要保存每次计算的结果。 3)RDD之间的依赖关系。RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。 4)一个Partitioner,即RDD的分片函数。当前Spark中实现了两种类型的分片函数,一个是基于哈希的HashPartitioner,另外一个是基于范围的RangePartitioner。只有对于于key-value的RDD,才会有Partitioner,非key-value的RDD的Parititioner的值是None。Partitioner函数不但决定了RDD本身的分片数量,也决定了parent RDD Shuffle输出时的分片数量。 5)一个列表,存储存取每个Partition的优先位置(preferred location)。对于一个HDFS文件来说,这个列表保存的就是每个Partition所在的块的位置。按照“移动数据不如移动计算”的理念,Spark在进行任务调度的时候,会尽可能地将计算任务分配到其所要处理数据块的存储位置。
RDD及其特点 1、RDD是Spark的核心数据模型,但是个抽象类,全称为Resillient Distributed Dataset,即弹性分布式数据集。 2、RDD在抽象上来说是一种元素集合,包含了数据。它是被分区的,分为多个分区,每个分区分布在集群中的不同节点上,从而让RDD中的数据可以被并行操作。(分布式数据集) 3、RDD通常通过Hadoop上的文件,即HDFS文件或者Hive表,来进行创建;有时也可以通过应用程序中的集合来创建。 4、RDD最重要的特性就是,提供了容错性,可以自动从节点失败中恢复过来。即如果某个节点上的RDDpartition,因为节点故障,导致数据丢了,那么RDD会自动通过自己的数据来源重新计算该partition。这一切对使用者是透明的。 5、RDD的数据默认情况下存放在内存中的,但是在内存资源不足时,Spark会自动将RDD数据写入磁盘。(弹性)