spark学习起步(三)--作业提交

一个application运行期间可以执行多个spark job(作业),有多少作业是由多少个action操作的rdd决定。几次action,就有几个job


每个job 分为多个stage,stage划分是依据shuffleDependency(宽依赖)。每次遇到一个,就要新产生一个stage。shuffle类算子会产生新的stage。从RDD角度看,ShuffledRDD,CoGroupedRDD,SubtractedRDD会产生ShuffleDependency。


因此在我们的开发过程中,能避免则尽可能避免使用reduceByKey、sortByKey,GroupByKey,cogroupbyKey,cartensian,join、distinct、repartition等会进行shuffle的算子,尽量使用map类的非shuffle算子。这样的话,没有shuffle操作或者仅有较少shuffle操作的Spark作业,可以大大减少性能开销。


每个stage有多少个task(任务)是由多少partition决定。一个partition可以由一个task来处理。partition是由pationtioner(分区器)决定。

牛人可以根据业务的数据分布情况自定义分区器,让每个partition得到的数据量大小差不多,避免数据倾斜。


抽象类Task有两个子类实现分别是ResultTask和ShuffleMapTask。ResultTask会将计算结果返回到driver application,而ShuffleMapTask是把RDD中的元素依照ShuffleDependency中的定义发送到多个bucket中。


任务提交过程中主要涉及Driver和Executor两个节点:

Driver侧在任务提交过程中最主要解决如下几个问题:

1,RDD依赖性分析,生成DAG

2,根据RDD DAG将Job分割为多个Stage

3,Stage一经确认,即生成相应的Task,将task分发到Executor



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值