Job提交源码解读
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 )切片。
-
如果一个文件的数据大小等于128.1M,我们以128M分块,则还是分为1块切片,因为源码中表示如果该数据块大于(128M×1.1)才进行切片。
切片大小计算
数据块的大小是无法修改的,但我们可以修改切片大小,但一般默认数据块大小==切出片的大小。
- 计算:由min、LongMax跟数据块进行比较,数据块先跟LongMax比较取出最小值,然后跟min比较取出最大值。
- 特殊情况1:min<LongMax<数据块,则切片大小修改为LongMax;
- 特殊情况2:数据块<min<longMax,则切片大小修改为min。
比任何人都要努力
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)