案例简述MapReduce与HDFS协同工作流程
- 2019 年 10 月 6 日
- 筆記
MapReduce是Hadoop开源大数据包的重要计算工具,后期的Spark、Storm等组件均采用MapReduce的计算模型。而MapReduce在工作时,实际与HDFS在一起工作。接下来我用一个案例来解析MapReduce的工作流程。

1、Java程序采用MapReduce的SDK开发包进行程序开发。实际程序启动时,将在客户端创建一个JobClient端,正式开启一个MapReduce实例。
2、JobClient通过getNewJobId()接口向Master节点中的JobTracker请求创建一个新的MapReduce作业。
3、JobClient将程序执行JAR包、配置文件、数据块,下发到HDFS中属于JobTracker的目录下。
4、完成以上准备工作后,JobClient调到JobTrakcer的submitJob()接口提交作业。
5、JobTracker将提交的作业放入作业队列中等待作业调度。
6、JobTrakcer从HDFS中取出JobClient放好的数据,并创建对应数据的Map任务及Reduce任务。
7、接下来,JobTracker将空闲的TaskTracker分配具体的Map任务和Reduce任务。正常情况下,HDFS存储的服务器与Map任务服务器应在同一台服务器,以减少数据在不同服务器的copy时间。
8、被分配了任务的TaskTracker从HDFS文件中取出所需的文件,包括JAR包和数据文件,存入本地磁盘,并启动TaskRunner程序。
9、TaskRunner在本地创建出MapTask或ReduceTask。该两个子程序会定时与TaskRunner报告进度,直到任务完成。
至此,整个MapReduce程序完成。
大家会发现,MapReduce程序处理流程非常复杂,最关键的为数据的下发、数据的调度全部基于磁盘,任务的调度、磁盘的数据读取成为MapReduce效率不高的主要原因。因此MapReduce主要用于离线数据处理,数据量越大,其大数据计算处理的作用越明显。