spark--RDD

RDD是一个弹性、可复原的分布式的数据集

RDD中装的数据是数据的描述信息,描述了从哪读数据,调用什么方法,传入什么函数,一级依赖关系等

RDD特点:

 1.有一些连续的分区:分区编号从0开始,分区数量决定了Task的并行度(每一个分区中都有一个task,一个executor中可以有很多个tsak同时运行)

2.有一个函数作用在每个输入切片上(每一个要处理的文件从hdfs中传输过来足够大的时候是会出现很多物理切片的,都遵循同一个RDD或一系列依赖的RDD中储存的逻辑来进行分析)

3.RDD和RDD之间存在一些依赖关系,RDD调用transformation后生成一个新的RDD,字RDD会记录父RDD的依赖关系,包括窄依赖和宽依赖(窄依赖不会导致shuffle,宽依赖会导致shuffle)

4.KV的RDD在shuffle会有分区器,默认采用hashPartitioner

5.如果从HDFS中读取数据,会有一个最优位置:spark在调度任务之前会读取NameNode的元数据信息,获取数据的位置,移动计算而不是移动数据,这样可以提高计算效率。(有点不太理解)

一些个人理解:

窄依赖就好比 words.map((_, 1)) 

不需要shuffle

rdd在编程时候理解为mapreduce中的方法以及文件来自于哪

为什么说transformation是lazy状态  因为  我个人理解是说他需要先设定rdd中的方法然后包装好 生成task放入excutor执行,之所以说sortby不是lazy  可能是因为他是宽依赖  需要shuffle

所以  sortby  是不是会使driver生成新的task  而sortby之前的方法是不是都在一个task里

 

触发一次action 是一个job

触发一次shuffle 是一个stage

 

 

reduce算不算触发action

不算

如果是前后调用了reduce 和 sortby  为什么只生成了两个stage

生成了三个stage

所以说 sortby是不是就是生成了一个stage

 

stage中有多个task是指相同的类型的task   还是不同方法的task

 

 

 

从hdfs中读数据  有多少个数据切片  就有多少个分区

如果是一个文件夹里有n个文件 并且文件都是小于128  就是有n个切片  但不一定是n个分区   一个文件过大于其他文件  默认可以拥有两个分区两个task  可以在textFile方法中设置textFile("hdfs://linux01:9000/data",3)  后面的参数是规定较大文件会得到几个task

 

一个task中可能会有很多个rdd 

rdd就是一个抽象的集合  但是rdd里面装的就是数据是从哪来的信息

 

task读文件时生成一个迭代器  但是比如说将读出的string 转换成 int int 的 rdd 是不是迭代器 还是相当于整个task就是一个迭代器

分布迭代  一层一层的迭代器

 

写入hdfs为啥要是kv形式(nullwritable,Text)

mapreduce的迭代器

map为啥叫做映射

 

 

rdd每一个分区对应一个task 每一个task对应一个迭代器

 

compute

和filter 之间的联系是啥   

将task扔入executor中就会调用compute方法

 

每一个transformation都先检查闭包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值