Spark操作算子本质-RDD的容错

Spark操作算子本质-RDD的容错
spark模式
1.standalone
master 资源调度
worker
2.yarn
resourcemanager 资源调度
nodemanager
在一个集群中只能有一个资源调度,如果有两个资源调度的话,master和resourcemanager之间是不通信的,master分配某个资源,resourcemanager是不知道的
一个application对应一个driver,driver是用来分配任务的

流程示意
分布式文件系统(File system)加载数据集
transformations延迟执行 针对RDD的操作
Action触发执行(生成并提交job)

 


默认缓存策略是MEMORY_ONLY
OFF_HEAP:不使用Java堆内存,使用tachyon,但是需要spark和tachyon做对接(百度用的多,tachyon是国产)

转换算子 操作算子

 

transformations:延时执行,从一个RDD到另一个RDD
map:通过匿名函数将RDD中T类型的数据转换为U类型的数据
filter:通过匿名函数判断某个字段返回true/false,true保留,false过滤,RDD中的数据类型不变,但是有可能会被过滤掉
flatMap::通过匿名函数将RDD中的T类型的每条数据转换为类型为U的序列集合,先做一步Map操作,再做一步flat操作,压扁
sample:传一个Float进来,随机采样
groupByKey:按照key分组,把key相同的值聚合在一起,每个key对应一个序列集合,有个shuffle,上游的partition根据某些规则将数据分到下游不同的partition中去
reduceByKey:对键值对操作,消除重复的key,相邻元素依次进行操作,操作产生的结果类型不可变
union:合并两个RDD,RDD类型必须一致
join:传入两个键值对的RDD,将两个RDD相同key的value值整合到一起,并进行一个排列组合
cogroup:传入两个键值对的RDD,将两个RDD相同key的value放到两个序列集合中
crossProduct():将两个RDD封装为一个RDD,一个RDD的值为key,一个为value
mapValues:RDD中元素为键值对的,对每个元素进行操作,但是只对value进行操作。
sort:对某个值进行排序
partitionBy:可以传一个自定义的partitioner,如果RDD为键值对,就可以传一个新的partitioner进行分区
actions:立即执行,从RDD到最终结果
count():返回RDD中元素个数
collect():慎用,把RDD中的元素全部返回,放入序列集合中
reduce():把RDD中的元素依次进行操作,生成最后的一个值
lookup():根据传入的key在RDD中找对应的值,放入序列集合中
save():对操作结果做存储,比如存入HDFS,本地文件系统

transformations和actions的本质区别
transformations是从一个RDD到另一个RDD
actions是从一个RDD到最终结果
现象:碰到action操作就封装一个job执行

 

 

checkpoint
Lineage过长
对RDD做doCheckpoint()
SparkContext.setCheckPointDir() 需要设置磁盘路径,通常是HDFS中。
设置数据库路径
把RDD存到磁盘中去,即使内存中的缓存被清掉,也可以去磁盘中读取,计算效率更高。
坏处:占用DiskIO

如果RDD的代价特别大,除了普通缓存,还可以使用checkpoint,存入磁盘,RDD复用时会先找cache() persist(),再找checkpoint中的

 

posted on 2018-03-12 22:07  嘣嘣嚓  阅读(279)  评论(0编辑  收藏  举报

导航