hadoop,MapReduce的工作机制

来源:互联网 发布:windows 升级node版本 编辑:程序博客网 时间:2024/05/29 13:23

一、目的

        了解hadoop工作的一些细节和原理,掌握MapReduce工作的特性,这样的了解有助于对hadoop系统正确高效使用。

二、内容

      1.hadoop,MapReduce的工作机制

      


首先,jobclien的runjob()创建一个jobclient方法并且调用submitJob()方法,其提交过程如下:

   1)向jobtracker请求一个新的作业ID,参见上图步骤2

   2)检查作业的输出说明,如没有指定具体的输目录或者输出目录已经存在,作业就不提交,并且把错误信息抛回给mapreduce程序

   3)计算作业的输入分片,如果输入路径为空,作业不提交,并且把错误信息抛回给mapreduce程序

   4)将运行作业所需要的资源以一个作业ID为命名的jobtracjer文件系统中,作业JAR的副本较多(mapred.submit.replication 属性控制,默认0)参见上图步骤3

   5)告知jobtracker作业准备执行,参见上图步骤4

作业提交以后runjob()每秒轮询作业进度,如果较上一次轮询作业进度有改变就把进度信息报告到控制台,如果作业成功执行就显示作业计数器,失败则记录导致作业失败的错误到控制台。

 当jobstracker接受一个作业后会放到一个内部的队列表中,有作业调度器(job scheduler)进行作业的调度,并对其进行初始化(步骤5)。

tasktracker运行一个简单循环来定期发送“心跳”来作为和jobstracker的通信(步骤7)。在最理想的情况下任务是“数据本地化”的,也就是任务运行的分片在同一台机器上。同样任务也可能是“机架本地化”的,也就是任务和输入分片在同一机架,但不在同一节点。

任务的运行:tasktracker为任务新建一个本地工作目录,并把jar文件的内容解压到此目录下,然后tasktracker新建一个taskrunner()来运行此任务。

streaming和pipes都运行特殊的map和reduce任务,目的是运行用户提供的可执行程序,并与之通信。

作业的完成:当jobstracker收到作业最后一个任务执行完成的通知后,就把作业的状态修改为“成功”

作业的失败:1).map和reduce的用户代码抛出运行异常时,子任务JVM退出前会向父tasktracker发送错误记录,并写入用户日志表,标记此次任务失败,释放当前任务槽运行另外一个任务。2)可能由于JVM软件的bug导致进程突然退出,tasktracker会注意到JVM进程退出并标志此次任务执行失败。tasktracker失败是另一种失败模式,会被jobtracker列入黑名单。jobtracker失败是失败中最严重的一种,目前hadoop没有处理这种失败的机制,有可能通过运行多个jobtracker的方式来解决这个问题。

作业调度器:hadoop中调度器是可以选择的,默认是基于队列的FIFO的调度器,还有两个多用户调度器,fair scheduler和capacity scheduler.

shuffle和排序:MapReduce确保每个reducer的输入都是按键排序。系统执行排序的过程,将MAP的输出作为输入传给Reduce的过程称为shuffle。shuffle是Mapreduce的心脏是奇迹发生的地方。


2.mapreduce配置调优





3.其他内容

1)任务JVM重用