spark杂记-初识spark

1.rdd 弹性分布式数据集
分区;一个函数处理一个分区;sparkContext;

transformation(转换):延迟加载,算子中并不加载数据,如flatMap,map;
action(动作):真正开始计算数据 ,之前会记录转换rdd的路径,DAG,在执行action的时候会开始真正的计算,加载数据,这就是spark跟mr的区别,mr是分步骤处理数据,处理的中间结果是保存在磁盘中的,这就导致了多次读写磁盘,所以磁盘io是瓶颈,spark是记录运算的算子,在真正开始运算时,才一次导入数据,计算结果保存在内存中,计算完成后才导入hdfs中

wordcount:
sc.textFile(“c:\words.txt”).flatMap(.split(“”)).map((,1)).reduceByKey(+).sortBy(_._2,false).saveAsTextFile(“c:\wordcount”)

DAG:
spark将原始的rdd进行一系列的转换就会形成更DAG,根据RDD不同的依赖关系划分为不同的stage,对于窄依赖,partition的转换在stage中完成,对于宽依赖,由于中间有个shuffle的过程,所以子rdd需要等待父rdd全部完成后才能接下来的计算,因此宽依赖是划分stage的

sc.setCheckPointDir(“…………”)
rdd.checkpoint

血统lineage
容错性有两种策略,一种是记录操作日志(如hadoop的元数据保存,hbase的hlog),还有一种是设置数据检查点,数据计算很多的时候,会导致记录操作日志开销大,数据检查点的开销也很大,所以spark只支持粗粒度的记录,spark程序会记录一系列的rdd转化,类似于记录一种操作流水线叫lineage,当发生失败时,spark会根据他的依赖类型重新计算,窄依赖只需要重新计算父节点,宽依赖需要重新计算所有依赖父节点,两种场景下可以优化,选择设置数据检查点,一是rdd太长,二是出现宽依赖的地方来设置检查点,rdd.checkpoint(),sc.setCheckPointDir(“….”)用来备份计算数据的路径

cache()缓存

spark提交流程
1、客户端提交作业给Master
2、Master让一个Worker启动Driver,即SchedulerBackend。Worker创建一个DriverRunner线程,DriverRunner启动SchedulerBackend进程。
3、另外Master还会让其余Worker启动Exeuctor,即ExecutorBackend。Worker创建一个ExecutorRunner线程,ExecutorRunner会启动ExecutorBackend进程。
4、ExecutorBackend启动后会向Driver的SchedulerBackend注册。SchedulerBackend进程中包含DAGScheduler,它会根据用户程序,生成执行计划,并调度执行。根据依赖切分stage,对于每个stage的task,都会被存放到TaskScheduler中,ExecutorBackend向SchedulerBackend汇报的时候把TaskScheduler中的task调度到ExecutorBackend执行。
5、所有stage都完成后作业结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值