Job提交源码解读

Job提交源码解读

Job整体流程

流程:在Driver类中,最终Job对象会调用waitForCompletion()完成提交。深入源码其实是调用commit()方法完成提交。

commit()方法具体做了哪些事呢?

  • 首先调用connect()方法建立连接。
  • 最后通过JobSubmiter实例化对象调用submitJobInternal()完成提交任务。

那么connect()方法又调用了什么实现连接呢?

  • 首先是通过代理类Cluster先判断当前程序是在yarn集群上还是当地主机上,再由此选择是否要不要提交jar包。

通过源码知道,submitJobInternal()方法里做了以下几个核心操作:

  1. 创建了stag路径,用与提交数据的路径;
  2. 获得了jobId,用于唯一标识;
  3. 将jar包打包到集群上,这里当地主机无须此步;
  4. 计算切片大小,规划生成的数据文件;
  5. 向stag路径写入xml配置文件;

当然还有提交任务啦!!!

切片规划

  1. 切片是以文件为单元进行切割的,比如文件1有250M数据,文件2有100M数据,如果以每块128M为大小,则需要分( 2 + 1 )切片。

  2. 如果一个文件的数据大小等于128.1M,我们以128M分块,则还是分为1块切片,因为源码中表示如果该数据块大于(128M×1.1)才进行切片。

切片大小计算

数据块的大小是无法修改的,但我们可以修改切片大小,但一般默认数据块大小==切出片的大小。

  • 计算:由min、LongMax跟数据块进行比较,数据块先跟LongMax比较取出最小值,然后跟min比较取出最大值。
  • 特殊情况1:min<LongMax<数据块,则切片大小修改为LongMax;
  • 特殊情况2:数据块<min<longMax,则切片大小修改为min。
posted @ 2023-06-01 01:11  郭培鑫同学  阅读(13)  评论(0编辑  收藏  举报