案例简述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主要用于离线数据处理,数据量越大,其大数据计算处理的作用越明显。