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中的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示