Yarn客户端能向jobtracker和ResourceManager提交作业

时间:2022-09-21 08:32:47

本文解释了Yarn的客户端为何即可以向RM, 又可以向Jobtracker或本地提交作业; 并且老版本的mapreduce作业不需要任何修改即可使用yarn客户端提交.

    Yarn的客户端可以向RM,Jobtracker,本地提交作业; 另外, 老版本的mapreduce作业不需要任何修改即可使用yarn客户端提交. 这是如何做到的呢.

    既然作业可以不做任何修改, 那么客户端提供给作业的接口就没变, 此前的版本, 客户端与jobtracker通信协议由ClientProtocol定义, 客户端通过ClientProtocol定义的方法向jobtracker发送请求. 但是从0.23开始, 客户端需要和ResourceManager(简称RM)通信, 通信协议由接口ClientRMProtocol定义. 0.23的客户端是如何实现的呢?

     事实上, yarn的客户端还是通过直接通过org.apache.hadoop.mapreduce.protocol.ClientProtocol与服务端通信, 但是它增加了一个实现类: YARNRunner, 当客户端配置mapreduce.framework.name为yarn时, 客户端会使用YARNRunner与服务端通信, 而YARNRunner真正的实现是通过ClientRMProtocol与RM交互, 包括提交Application, 查询状态等功能, 当前的ClientProtocol继承关系如下:

                     Yarn客户端能向jobtracker和ResourceManager提交作业

1. 如果mapreduce.framework.name配置为classic, 那么ClientProtocolProvider(它负责初始化ClientProtocol的实现类)会提供和以前版本一样的ClientProtocol: createRPCProxy(JobTracker.getAddress(conf), conf)

2. 如果mapreduce.framework.name配置为yarn, 那么ClientProtocolProvider会提供一个YARNRunner对象, 它实现了client与RM通信, 实际是通过ClientRMProtocol与RM通信的 . 其中YarnClientImpl封装了各种通信方法.

可以通过官方文档查看如何实现自己的客户端

http://hadoop.apache.org/docs/r0.23.0/hadoop-yarn/hadoop-yarn-site/WritingYarnApplications.html

转载请注明出处! (http://www.cnblogs.com/shenh062326/archive/2012/11/24/2785648.html