Hadoop之谈谈MapReduce

来源:互联网 发布:csgo 电击枪 知乎 编辑:程序博客网 时间:2024/06/05 16:37

MapReduce的流程

1.Client请求JobTracker,得到分配的JobID。

2.JobTracker将作业放入一个作业队列里,根据作业调度器运行作业。文件的划分信息确定总的Map数量。根据主机的数量,内核,内存等信息,确定并行的Map数量。

3. Map端输出suffer后传输Reduce端。

4.TaskTracker每隔一段时间就会给JobTracker发送一个心跳,报告自己的运行状态信息。

5.JobTracker收到最后一个任务的完成信息时,把当前作业状态置为成功!


Suffer之Map端

1.每块数据会让一个Map处理,Map的输出结果会放入一个环形内存缓冲区,当缓冲区要溢出时,将缓冲区的文件写入溢写文件。

2.写入磁盘之前,数据会被排序和Combiner。同时数据会被Partitioner分区(分配给不同的Reduce)。

3.当Map任务结束之后,可能会有多个溢出文件,这时需要将这些文件合并。合并的过程中会继续进行排序和Combiner。

4.将分区的数据传递给对应的Reduce。

Suffer之Reduce端

1.Reduce会接受到不同的Map任务传来的数据,如果数据很小会直接放入内存中,否则对数据进行排序后溢写到磁盘。

2.随着溢写文件增多,最终排序后合并为一个文件。

3.合并的过程中,会产生中间文件写入磁盘,但是最后一次合并的结果不会写入磁盘,直接传入Reduce。


MapReduce on Yarn

1.MRAppMaster通过JobTracker衍化而来。JobTracker包含资源管理和作业控制两个功能,在YARN中,作业管理由ResourceManager实现,因此,只剩下作业控制这一个功能由MRAppMaster实现。

2.TaskTracker由NodeManager代替。


tips:

是不是每发生一次溢写都会产生一个溢写文件?为什么第2,3,4...次溢写不追加到第一个的溢写文件后?



0 0
原创粉丝点击