RDD特性介绍

转载:https://blog.csdn.net/fengfengchen95/article/details/80431315

一.Driver Program

包含程序的main()方法程序入口,RDDs的定义和操作,它管理很多节点executors


二、SparkContext

Driver Program通过SparkContext对象访问Spark

SparkContext对象代表和一个集合的连接

每一个可用的JVM中只有一个SparkContext,在创建一个新的SparkContext之前必须先停止该JVM中可用的SparkContext.

实例化时需要一个SparkConf对象去描述应用的配置信息。

在Shell中SparkContext自动创建好了,就是sc

三、RDD

Resilient distributed datasets(弹性分布式数据集,简写RDD)

RDD是并行的分布到整个集群中,比如:如下的语句中wordcount.txt中数据load line这个RDD后,数据会分片自动存放到集群的每个节点上,数据计算时也是各几点并行计算。

 val lines=sc.textFile("/data/shellScript/wordcount.txt")

RDD是Spark 分发数据和计算的抽象类。

RDD是一个不可改变的分布式式集合对象,Spark中所有的计算都是通过RDD的创建,转换,操作完成的,一个RDD的内部是有很多分片组成的。

四、RDD的特性

1.分区列表(a list of partitions)

RDD是被分区的,每一个分区都会被一个计算任务(Task)处理,分区数决定了并行计算的数量,RDD的默认并行数从父RDD传给子RDD.

2.每一个分区都有一个计算函数(a function for computint each split)

3.依赖于其他RDD的列表(a list of dependencies on other RDDs)

由于RDD每次转换都会生成新的RDD,所以RDD会形成类似流水线一样的前后依赖关系。RDD的依赖关系分为宽依赖和窄依赖:

窄依赖:每一个parent RDD的Partition最多被Child RDD的一个Partition使用。

宽依赖:多个child RDD的partition会依赖同一个parent RDD,典型操作:groupByKey,sortByKey

4.key-value数据类型的RDD分区器、控制分区策略和分区数

每个Key-value形式的RDD都有Partitoner属性,它决定了RDD如何分区。

5.每一个分区都有一个优先位置列表

五、RDD弹性特性的7方面

1.自动进行内存和磁盘数据存储的切换

2.基于血统的高效容错机制

3.Task如果失败会自动进行特定次数的重试。

4.Stage如果失败会自动进行特定次数的重试。

5.Checkpoint和Persist(检查点,持久化),可主动或被动触发。

6、数据调度弹性

7、数据分片的高度弹性。

六、RDD的创建方式

1.通过已经存在的scala集合创建RDD

val data=Array(1,2,3,4,5)

val disData=sc.parallelize(data)

2.通过HDFS和本地文件系统创建RDD

val file=spark.textFile("hdfs://...")

val infos=file.filter(line=>line.contains("info")

val count=infos.count()

3,其它的RDD的转换

从父RDD转换可得到新的RDD,通过Spark内核给用户提供transformation来对RDD进行各种算子的转化,形成新的RDD

4.其它的RDD的创建

基于DB创建RDD,基于S3创建RDD,或者基于数据流创建RDD都是比较常见的创建RDD的方式。




.



一.Driver Program

包含程序的main()方法程序入口,RDDs的定义和操作,它管理很多节点executors


二、SparkContext

Driver Program通过SparkContext对象访问Spark

SparkContext对象代表和一个集合的连接

每一个可用的JVM中只有一个SparkContext,在创建一个新的SparkContext之前必须先停止该JVM中可用的SparkContext.

实例化时需要一个SparkConf对象去描述应用的配置信息。

在Shell中SparkContext自动创建好了,就是sc

三、RDD

Resilient distributed datasets(弹性分布式数据集,简写RDD)

RDD是并行的分布到整个集群中,比如:如下的语句中wordcount.txt中数据load line这个RDD后,数据会分片自动存放到集群的每个节点上,数据计算时也是各几点并行计算。

 val lines=sc.textFile("/data/shellScript/wordcount.txt")

RDD是Spark 分发数据和计算的抽象类。

RDD是一个不可改变的分布式式集合对象,Spark中所有的计算都是通过RDD的创建,转换,操作完成的,一个RDD的内部是有很多分片组成的。

四、RDD的特性

1.分区列表(a list of partitions)

RDD是被分区的,每一个分区都会被一个计算任务(Task)处理,分区数决定了并行计算的数量,RDD的默认并行数从父RDD传给子RDD.

2.每一个分区都有一个计算函数(a function for computint each split)

3.依赖于其他RDD的列表(a list of dependencies on other RDDs)

由于RDD每次转换都会生成新的RDD,所以RDD会形成类似流水线一样的前后依赖关系。RDD的依赖关系分为宽依赖和窄依赖:

窄依赖:每一个parent RDD的Partition最多被Child RDD的一个Partition使用。

宽依赖:多个child RDD的partition会依赖同一个parent RDD,典型操作:groupByKey,sortByKey

4.key-value数据类型的RDD分区器、控制分区策略和分区数

每个Key-value形式的RDD都有Partitoner属性,它决定了RDD如何分区。

5.每一个分区都有一个优先位置列表

五、RDD弹性特性的7方面

1.自动进行内存和磁盘数据存储的切换

2.基于血统的高效容错机制

3.Task如果失败会自动进行特定次数的重试。

4.Stage如果失败会自动进行特定次数的重试。

5.Checkpoint和Persist(检查点,持久化),可主动或被动触发。

6、数据调度弹性

7、数据分片的高度弹性。

六、RDD的创建方式

1.通过已经存在的scala集合创建RDD

val data=Array(1,2,3,4,5)

val disData=sc.parallelize(data)

2.通过HDFS和本地文件系统创建RDD

val file=spark.textFile("hdfs://...")

val infos=file.filter(line=>line.contains("info")

val count=infos.count()

3,其它的RDD的转换

从父RDD转换可得到新的RDD,通过Spark内核给用户提供transformation来对RDD进行各种算子的转化,形成新的RDD

4.其它的RDD的创建

基于DB创建RDD,基于S3创建RDD,或者基于数据流创建RDD都是比较常见的创建RDD的方式。




.



猜你喜欢

转载自blog.csdn.net/yue_2018/article/details/88386841
rdd