设为首页 收藏本站
查看: 463|回复: 0

[经验分享] Hadoop代码分析(四)

[复制链接]
发表于 2016-12-6 07:54:38 | 显示全部楼层 |阅读模式
好了,大概了解了一下从输入到mapper的数据的处理过程,其实我在刚刚接触hadoop的时候很好奇,当你你在命令行输入hadoop jar ******的时候系统到底如何启动job的,诸如mapper是如何获取输入的K/V对的呢?一般的hadoop程序中的map,reduce方法是被谁而调用的呢?现在就来看看咯:
当一个作业开始被提交,job.waitForCompletion(true),系统开始等待作业的完成,在waitForCompletion方法中,调用了submit方法以提交作业的conf,在job类中,该方法被描述为如下:
 

public void submit() throws IOException, InterruptedException,
ClassNotFoundException {
ensureState(JobState.DEFINE);
setUseNewAPI();
info = jobClient.submitJobInternal(conf);
state = JobState.RUNNING;
}
 
第5行的jobclient是提交作业,追踪jobtracker,在jobclienr方法中,submitJobInternal(),是一个内部提交作业到系统的方法,


,继续追踪该方法,该方法中有Path submitSplitFile = new Path(submitJobDir, "job.split");


                                                        maps = writeNewSplits(context, submitSplitFile);


啊哈。终于看到一点split的影子了,不过最主要的是第二条语句,我先说明该语句的作用吧,将该split绑定到一个map上,现在解释原因,追踪writeNewSplits(),看到如下代码:

org.apache.hadoop.mapreduce.InputFormat<?,?> input = ReflectionUtils.newInstance(job.getInputFormatClass(), job.getJobConf());
 

利用反射机制,获取到该job的jobconf,以得到该job的InputFormat(这个是将指定输入转换为splits),然后一直ctrl啊ctrl,到了ReflectionUtils中的setJobConf方法,代码清单:


try {
Class<?> jobConfClass =
conf.getClassByName("org.apache.hadoop.mapred.JobConf");
Class<?> jobConfigurableClass =
conf.getClassByName("org.apache.hadoop.mapred.JobConfigurable");
if (jobConfClass.isAssignableFrom(conf.getClass()) &&
jobConfigurableClass.isAssignableFrom(theObject.getClass())) {
Method configureMethod =
jobConfigurableClass.getMethod("configure", jobConfClass);
configureMethod.invoke(theObject, conf);
}
 

我对反射机制不太懂,反正总结了一下,这段代码就是利用该jobConf信息配置该job的InputFormat,以至于InputFormat

转换的输入是该job的指定输入。。这样,指定的输入就通过分块,给map进行分类处理。。

其实在hadoop中,Context类是很重要的,记录了该jobstracker的上下文信息,明天再说吧,手冷死了。。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-310180-1-1.html 上篇帖子: Hadoop学习(一) 下篇帖子: hadoop初步使用笔记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表