热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Spark2_RDD定义

Spark2什么是RDD1.RDD1.1RDD定义让开发者大大降低开发分布式应用程序的门槛以及提高执行效率ResilientDistributedDataset(RDD)也就是弹性



Spark2什么是RDD


1.RDD


1.1RDD定义

让开发者大大降低开发分布式应用程序的门槛以及提高执行效率

Resilient Distributed Dataset(RDD) 也就是弹性分布数据集


弹性体现在计算之上,代表的是spark可以做到在做分布式计算的时候可以容错,比如说某个节点挂了,或者是某个节点数据丢失了,可以用RDD的机制进行数据修复,这是计算层面得.

分布式也就是数据可以跨节点存储在不同的节点上,spark计算的时候也一样,代码可以运行在一个和多个节点之上,提升计算效率.

数据集在spark中可以通过读文件创建,或者通过编程的方式创建,或者通过一个数据集转换成另一个数据集,类似于hdfs的block.


1.RDD是不可变的,但是能通过RDDA转换为RDDB

2.RDD的元素可以被拆成分区,可以理解成hdfs的block或者是mapreduce的Inputsplit

3.并且RDD的分区可以被并行操作.


例如:RDDA:(1,2,3,4,5,6,7,8,9) operated +1

hadoop000:Partition1:(1,2,3) +1

hadoop000:Partition2:(4,5,6) +1

hadoop000:Partition3:(7,8,9) +1

RDDA执行了+1的操作,那么RDDA的3个partition分区都会执行+1操作,并且是并行的



1.2RDD源码定义

abstract class RDD[T: ClassTag](
@transient private var _sc: SparkContext,
@transient private var deps: Seq[Dependency[_]]
) extends Serializable with Logging

1.抽象类:RDD必然是有子类实现的,使用时直接使用其子类即可.

2.Serializable:网络传输需要序列化,序列化好坏直接影响框架的性能

3.Logging:日志

4.T:泛型,RDD支持各种数据类型

5.SparkContext:

6.@transient:


2.RDD的五大特性


Internally, each RDD is characterized by five main properties:

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有很多分区partition.

2.函数对RDD的操作是作用于所有的分区partition,函数的应用实现了RDD之间partition的转换.

3.RDD跟RDD之间有依赖关系,当依赖关系为窄依赖时,RDD中某个分区数据丢失的时候,spark可以通过依赖关系重新计算分区里的数据,而不是对所有RDD进行重新计算.

RDDA => RDDB => RDDC => RDDD

4.(可选项)Partitioner 都是key-value形式的(默认使用hash).例如这里自定义的Partitioner是基于key进行分区,那则会将不同RDD里面的相同key的数据放到同一个partition里面

5.(可选项)对某个分区(分片)进行计算的时候,会在最优的位置去计算,也就是数据本地性。


3.RDD特性和源码的对应关系

def compute(split: Partition, context: TaskContext): Iterator[T]

可以看到这个compute计算方法传入参数包含了split: Partition,这就是RDD的第二特性

protected def getPartitions: Array[Partition]

getPartitions方法返回类型是一个Array[Partition]类型,得到的是partition的集合.对应了RDD的第一特性

protected def getDependencies: Seq[Dependency[_]] = deps

getDependencies方法返回类型是Seq[Dependency[_]],对应了RDD的第三特性

protected def getPreferredLocations(split: Partition): Seq[String] = Nil

进行计算的时候要获得最佳位置PreferredLocation,也就是getPreferredLocations方法,最后的返回结果是一个Seq[String],也就是路径的集合,对应了RDD的第五特性

@transient val partitioner: Option[Partitioner] = None

可以被子类覆盖,可以指定需要的partitioner,对应了RDD的第四特性


4.RDD图解



推荐阅读
author-avatar
微公号莆田鞋园
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有