视频:RDD的特性介绍及源码阅读必备基础

本节课主要讲:

RDD相关的基础知识

讲解几种常见的RDD及其分区策略:

textFile

sequenceFile

JDBCRDD

HBaseRDD

RDD的基础讲解

RDD的五大特性

1 - A list of partitions 2 - A function for computing each split 3 - A list of dependencies on other RDDs 4 - Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned) 5 - Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)

翻译成中文:

1,一个分片列表。也即RDD可以进行分片。

2,每个分片都有计算函数。分片是计算的最小单位

3,一个RDD会依赖于一系列的RDD。并不是所有的RDD都是有依赖。

所有的转换操作都会生成新的RDD,所以就形成了RDD的血缘关系,一个RDD计算失败可以利用其血缘关系进行恢复。

4,可选项。针对 key-values类型的RDD才有的分区器。

5,最佳运行位置 或者 叫偏向运行位置 或者 叫数据的本地性。

RDD的操作

转换(Transformations)(如:map, filter, groupBy, join等),Transformations操作是Lazy的,也就是说从一个RDD转换生成另一个RDD的操作不是马上执行,Spark在遇到Transformations操作时只会记录需要这样的操作,并不会去执行,需要等到有Actions操作的时候才会真正启动计算过程进行计算。

操作(Actions)(如:count, collect, save等),Actions操作会返回结果或把RDD数据写到存储系统中。Actions是触发Spark启动计算的动因。

RDD在集群的使用及工作原理

RDD的声明周期可以分为四步:

1,创建RDD。

RDD创建方式

1)从Hadoop文件系统(如HDFS、Hive、HBase)输入创建。

2)从父RDD转换得到新RDD。

3)通过parallelize或makeRDD将单机数据创建为分布式RDD。

4)基于DB(Mysql)、NoSQL(HBase)、S3(SC3)、数据流创建。

2,构建执行计划。

  1. ,RDD在调用转化算子和action算子后会构成一个RDD链条,也即是RDD的血缘关系。
  2. ,DAGScheduler会根据RDD之间的依赖关系进行Stage划分,最终封装成TaskSetManager根据不同的调度模型加入不同的调度队列。

3,调度执行任务。

由TaskScheduler和TaskSetManager对TaskSet进行进一步资源封装可最佳位置计算,然后进行调度到相应的Executor上去执行。

4,结果返回。

最终的执行结果返回给Driver或者输出到指定的位置。

RDD计算链条

RDD的依赖关系

窄依赖:父RDD的一个分区只会被一个子RDD继承:NarrowDependency

宽依赖:父RDD的一个分区可以被若干个子RDD继承:ShuffleDependency

对比,宽依赖,窄依赖:

1,窄依赖允许在一个集群节点上以流水线的方式(pipeline)计算所有父分区。例如,逐个元素地执行map、然后filter操作;宽依赖则需要首先计算好所有父分区数据,然后在节点之间进行Shuffle,与MapReduce类似;

2,窄依赖能够更有效地进行失效节点的恢复,即只需重新计算丢失RDD分区的父分区,而且不同节点之间可以并行计算;而对于一个宽依赖关系的Lineage图,单个节点失效可能导致这个RDD的所有祖先丢失部分分区,因而需要整体重新计算。

RDD数据分区

1,通过控制分区数可以。可以控制task数目。

2,所有key-value类型的RDD都支持分区。HashPartitioner是最常用的。也可以自定义分区策略。

3,RDD的很多操作算子都会导致Shuffle,比如ReduceBykey,GroupByKey等。

Shuffle

Hadoop文件的压缩

压缩格式

工具

算法

扩展名

Splitable

DEFATE

N/A

DEFLATE

.deflate

No

Gzip

gzip

DEFLATE

.gz

No

Bzip2

Bzip2

Bzip2

.bz2

Yes

Lzo

lzop

LZO

.lzo

No

LZ4

N/A

LZ4

.lz4

No

Snappy

N/A

Snappy

.snappy

No

视频内容

原文发布于微信公众号 - Spark学习技巧(bigdatatip)

原文发表时间:2018-06-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏美图数据技术团队

RDD原理与基本操作 | Spark,从入门到精通

欢迎阅读美图数据技术团队的「Spark,从入门到精通」系列文章,本系列文章将由浅入深为大家介绍 Spark,从框架入门到底层架构的实现,相信总有一种姿势适合你,...

2.6K2
来自专栏肖力涛的专栏

Spark踩坑记:Spark Streaming+kafka应用及调优

本文首先对spark streaming嵌入kafka的方式进行归纳总结,之后简单阐述Spark streaming+kafka 在舆情项目中的应用,最后将自己...

5.6K3
来自专栏Albert陈凯

3.0Spark RDD实现详解

Spark技术内幕:深入解析Spark内核架构设计与实现原理 第三章 Spark RDD实现详解 RDD是Spark最基本也是最根本的数据抽象,它具备像MapR...

3347
来自专栏个人分享

SparkStreaming(源码阅读十二)

  要完整去学习spark源码是一件非常不容易的事情,但是咱可以积少成多嘛~那么,Spark Streaming是怎么搞的呢?

1362
来自专栏岑玉海

Spark Streaming编程指南

Overview Spark Streaming属于Spark的核心api,它支持高吞吐量、支持容错的实时流数据处理。 它可以接受来自Kafka, Flume,...

7255
来自专栏about云

让你真正明白spark streaming

spark streaming介绍 Spark streaming是Spark核心API的一个扩展,它对实时流式数据的处理具有可扩展性、高吞吐量、可容错性等...

3577
来自专栏王小雷

Spark学习之基础相关组件(1)

Spark学习之基础相关组件(1) 1. Spark是一个用来实现快速而通用的集群计算的平台。 2. Spark的一个主要特点是能够在内存中进行计算,因而更快。...

2118
来自专栏清墨_iOS分享

iOS开发按时间排序文件

默认的,我们在开发中,写入沙盒里的文件按文件名排序,如0,1,2,3,4,5,a,b,c,.....z等,但有时候咱们需要将里面的文件按创建时间来排序。这时候...

51310
来自专栏牛肉圆粉不加葱

[Spark Q&A]如果中间输出RDD在内存放不下会怎么样?

这个问题其实问的 RDD 缓存机制。我们可以调用 persist() 或 cache()方法来缓存 RDD。Spark 的缓存是具有容错性的,如果 RDD 的任...

932
来自专栏智能计算时代

「大数据系列」:Apache Hive 分布式数据仓库项目介绍

Apache Hive™数据仓库软件有助于读取,编写和管理驻留在分布式存储中的大型数据集并使用SQL语法进行查询

5782

扫码关注云+社区

领取腾讯云代金券