hadoop之MapReduce执行流程
MapReduce执行流程
![](http://images0.cnblogs.com/blog/493744/201304/24200639-649f6235e5d04df785b0a432222b079a.png)
1:运行mapred程序;(不是hadoop节点也可以提交程序)
2、本次运行将生成一个Job,于是JobClient向JobTracker(协调作业运行)申请一个JobID以标识这个Job;
3、JobClient将Job所需要的资源提交到HDFS中一个以JobID命名的目录中。这些资源包括JAR包、配置文件、
InputSplit、等;
4:JobClient向JobTracker提交这个Job;
5:JobTracker初始化这个Job;
6:JobTracker从HDFS获取这个Job的Split等信息;
7:JobTracker向TaskTracker分配任务;(心跳正常)
8:TaskTracker从HDFS获取这个Job的相关资源;
9:TaskTracker开启一个新的JVM;
10:TaskTracker用新的JVM来执行MapTask或ReduceTask;此条图示
我们下面模拟一个MapReduce任务,解释MapTask和ReduceTask
1)一个文件file.txt;
2)存储file.txt文件到HDFS;
3) 统计file.txt文件里面”Refund”个数;
MapTask
![](http://images0.cnblogs.com/blog/493744/201304/24200703-e2b44ec73c214314859c559f005842b6.png)
1:client要计算 Refund要出现多少次
2:job Tracker 根据NameNode发现File.txt有三块,分别在DataNode 1,2,5上面
3:运行task任务
map task(本地没有文件块)
![](http://images0.cnblogs.com/blog/493744/201304/24200710-0d0ae91678e74bf4b297180dd67e4255.png)
1:client要计算 Refund要出现多少次
2:job Tracker 根据NameNode发现File.txt有三块,分别在DataNode 1,2,9上面,但是发现DN1
上面没有Bolck则在同机架上寻找Block
3:运行task任务
Reduce task
![](http://images0.cnblogs.com/blog/493744/201304/24200718-0706f7c254d5445b9bfefa82c100a634.png)
1:MapTask输出数据到ReduceTask
2:ReduceTask将数据输出到HDFS