注:图片显示不完整,请右键在新标签页中打开i图片
下面这幅图说明了new JobClient()的时候,完成了连接到服务端,并且获得一个服务端的代理对象操作。服务端就是JobTracker,因为这个类是用来接收客户端提交的计算任务。
第三幅图con.get("mapred.job.tracker","local")表示从配置文件中读取name为mapred.job.tracker的属性,如果属性读取不到则默认为local
这个配置文件是cd /usr/local/hadoop/conf 路径下的mapred-sitx.xml文件
结论:
问:在eclipse中的写的代码如何提交作业到JobTracker中的呢?
答:(1)在eclipse中调用的job.waitForCompletion(true)实际上执行如下方法
connect();
info = jobClient.submitJobInternal(conf);
(2)在connect()方法中,实际上创建了一个JobClient对象。
在调用该对象的构造方法时,获得了JobTracker的客户端代理对象JobSubmissionProtocol。
JobSubmissionProtocol的实现类是JobTracker。
(3)在jobClient.submitJobInternal(conf)方法中,调用了
JobSubmissionProtocol.submitJob(...),
即执行的是JobTracker.submitJob(...)。