分享

hadoop job工作机制

给大家总结一下hadoop mapreduce工作机制:
figure4.gif

       JobClient 的runJob()方法是用于新建JobClient实例并调用其submitJob()方法,提交作业后,runJob()每秒轮询作业的进度,如果有改变便把进度报告到控制台。
       Jobtracker接受到一个新的作业,Jobtracker协调任务先执行Map阶段(图中M1,M2和M3),然后执行Reduce阶段(图中R1和R2)。

       Map阶段和Reduce阶段动作都受到TaskTracker监控,并运行在独立于TaskTracker的Java虚拟机中。我们的输入和输出都是HDFS上的目录(如上图所示)。输入由InputFormat接口描述,它的实现如ASCII文件,JDBC数据库等,分别处理对于的数据源,并提供了数据的一些特征。通过InputFormat实现,可以获取InputSplit接口的实现,这个实现用于对数据进行划分(图中的splite1到splite5,就是划分以后的结果),同时从InputFormat也可以获取RecordReader接口的实现,并从输入中生成<k,v>对。有了<k,v>,就可以开始做map操作了。

     map操作通过context.write将结果写到context上下文中。当Mapper的输出被收集后,它们会被Partitioner类以指定的方式区分地写出到输出文件里。我们可以为Mapper提供Combiner,在Mapper输出它的<k,v>时,键值对不会被马上写到输出里,他们会被收集在list里(一个key值一个list),当写入一定数量的键值对时,这部分缓冲会被Combiner中进行合并,然后再输出到Partitioner中(图中M1的黄颜色部分对应着Combiner和Partitioner)。

     Map的动作做完以后,进入Reduce阶段。这个阶段分3个步骤:混洗(Shuffle),排序(sort)和reduce。混洗阶段,Hadoop的MapReduce框架会根据Map结果中的key,将相关的结果传输到某一个Reducer上(多个Mapper产生的同一个key的中间结果分布在不同的机器上,这一步结束后,他们传输都到了处理这个key的Reducer的机器上)。这个步骤中的文件传输使用了HTTP协议。排序和混洗是一块进行的,这个阶段将来自不同Mapper具有相同key值的<key,value>对合并到一起。Reduce阶段,上面通过Shuffle和sort后得到的<key, (list="" of="" values)="">会送到Reducer. reduce方法中处理,输出的结果通过OutputFormat,输出到DFS中。

欢迎加入about云群9037177932227315139327136 ,云计算爱好者群,亦可关注about云腾讯认证空间||关注本站微信

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条