java shuffle原理,Standalone作业提交流程以及Shuffle原理

Standalone模式下有四个重要组成部分,分别为:

Driver:用户编写的Spark应用程序就运行在Driver上,由Driver进程执行

Master:主要负责资源的调度和分配,并进行集群的监控等职责

Worker:Worker运行在集群中的一台服务器上,负责管理该节点上的资源,负责启动节点上的Executor

Executor:一个Worker上可以运行多个Executor,Executor通过启动多个线程(task)对RDD分区进行并行计算

SparkContext中的三大组件:

DAGScheduler:负责将DAG划分成若干个Stage

TaskScheduler:将DAGScheduler提交的Stage进行优先级排序,再将task发送到Executor

SchedulerBackend:定义了许多与Executor事件相关的处理,包括:新的executor注册进来的时候记录executor的信息,增加全局的资源量(核数)。

executor更新状态,若任务完成的话,回收core。其他停止executor、remove executor等事件

Standalone模式下作业提交步骤:

启动应用程序,完成SparkContext的初始化

Driver向Master注册,申请资源

Master检查集群资源状况,若集群资源满足,通知Worker启动Executor

Executor启动后向Driver注册(称为反向注册)

Driver完成DAG的解析,得到Tasks,然后向Executor发送Task

Executor向Driver汇总任务的执行情况

应用程序执行完毕,回收资源

如图所示

0a057b4f4210a52ebc564fd40ca3a68a.png

Shuffle原理

Shuffle的本意是洗牌,目的是为了把牌弄乱。而Spark、Hadoop中的shuffle不是为了把数据弄乱,而是为了将随机排列的数据转换成具有一定规则的数据。

Shuffle是MapReduce计算框架的一个特殊的阶段,介于Map和Reduce之间,当Map的输出结果要被Reduce使用时,输出结果需要按照key排列,并且分发到Reduce上去,这个过程就是shuffle。

shuffle涉及到了本地磁盘(非HDFS)的读写和网络的传输,大多数Spark作业的性能主要是就是消耗在了shuffle环节,因此shuffle性能的高低直接影响到了这个呢个程序的运行效率。

大概的发展历史为:

Spark 1.1 以前是Hash Shuffle

Spark 1.1 引入了Sort Shuffle

Spark 1.6 将Tungsten-sort并入Sort Shuffle

Spark 2.0 Hash Shuffle退出历史舞台

Hash Base Shuffle V1

每个Shuffle Map Task需要为每个下游的Task创建一个单独的文件

Shuffle过程中会生成海量的小文件,同时打开过多文件、低效的随机IO

Hash Base Shuffle V2

Hash Base Shuffle V2核心思想:允许不同的task复用同一批磁盘文件,有效将多个task的磁盘文件进行一定程度上的合并,从而大幅度减少磁盘文件的数量,进而提升shuffle write的性能。一定程度上解决了Hash V1中的问题,但不彻底

Sort Base Shuffle

Sort Base Shuffle大大减少了shuffle过程中产生的文件数,提高Shuffle的效率,如图所示

b12f5e8fb45cb69464ba5eded4eec12b.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值