Job提交源码解读
Job整体流程
流程:在Driver类中,最终Job对象会调用waitForCompletion()完成提交。深入源码其实是调用commit()方法完成提交。
commit()方法具体做了哪些事呢?
- 首先调用connect()方法建立连接。
- 最后通过JobSubmiter实例化对象调用submitJobInternal()完成提交任务。
那么connect()方法又调用了什么实现连接呢?
- 首先是通过代理类Cluster先判断当前程序是在yarn集群上还是当地主机上,再由此选择是否要不要提交jar包。
通过源码知道,submitJobInternal()方法里做了以下几个核心操作:
- 创建了stag路径,用与提交数据的路径;
- 获得了jobId,用于唯一标识;
- 将jar包打包到集群上,这里当地主机无须此步;
- 计算切片大小,规划生成的数据文件;
- 向stag路径写入xml配置文件;
当然还有提交任务啦!!!
切片规划
- 切片是以文件为单元进行切割的,比如文件1有250M数据,文件2有100M数据,如果以每块128M为大小,则需要分( 2 + 1 )切片。