`

job运行流程(1)---客户端提交job

阅读更多

1、通过hadoop -jar命令提交一个job,并且解析提交的各个参数,保存对应的属性或内容到configuration;

 

优化点:这里可以通过修改GenerticOptionPaser类,来解析自定义的属性,比如public jar包更新等。

2、调用waitForCompletion提交job并轮询job运行状态;


优化点:这里的job状态轮询在ResourceManager返回app finish后回去查询historyserver,查询historyserver失败的话会默认重试三次,由于historyserver是单点并且无状态的,可以启用备用节点,当主节点挂掉或阻塞超时,就去查询备用节点,从而实现historyserver的高可用。


3、在提交job前根据configuration属性构建job提交时需要的ApplicationSubmissionContext,其中比较重要的就是LocalResource资源的封装。这里会包含job运行时需要的配置文件及依赖的jar包在hdfs上的路径等。其中jar包属性分为application、private、public三种,这些资源在container运行时都会去hdfs上下载,不同属性的jar包处理方式有所不同,具体可参照下一篇文章。


优化点:支持public jar包更新,hadoop默认的客户端貌似还不支持提交public类型的jar包,可以通过修改客户端job提交流程来实现,最终效果就是能减少nodemanager端container下载jar包的次数(本地缓存),从而减少namenode的rpc请求压力,同时提高mapreduce job运行速度

4、调用YarnClientImpl.submitApplication提交job,其实现是通过调用rpc服务来提交的,具体对应代码为:ApplicationClientProtocolPBServiceImpl.submitApplication(),这样就完成了客户端job提交;

 

5、ResourceManager对应的服务端响应方法为:ClientRMService.submitApplication();

 

整个流程如下图所示:

 下一篇:http://rainforc.iteye.com/blog/2286335

 

  • 大小: 45.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics