MapReduce采用主从结构,JobTracker作为主节点,TaskTracker作为从节点。
其架构图详见图1所示:
图1 MapReduce架构图
1、Client
用户编写的MapReduce程序通过Client提交到JobTracker端,还可通过Client提供的一些接口查看作业的运行状态。在Hadoop内部,用Job(作业)表示MapReduce程序。一个MapReduce程序对应若干个作业,而每个作业会被分解成若干个Map Task或Reduce Task。
2、JobTracker
JobTracker的职责:
接收客户端提交的计算任务(Job);
通过任务调度器(TaskSheduler)分配计算任务给TaskTracker执行;
监控所有TaskTracker与作业的健康状况,当发现任务出现故障时,将相应的任务转移到其他的节点。
打个比方,JobTracker相当于企业软件开发的项目经理,主要负责各种资源的准备、调度和开发任务的分配。
3、TaskTracker
TaskTracker周期性的通过Heartbeat将本节点资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker发送过来的命令并执行相应的操作,如启动新的任务、杀死作业等等。相对应的,TaskTracker相当于开发人员,主要执行项目经理分配的开发任务,并按时向项目经理汇报项目的开发进度。
4、Task
Task分为Map Task和Reduce Task两种,都是由TaskTracker启动。MapReduce的处理单位是split,它是一个逻辑概念(意味着实际上并没有对数据切割),只包含一些元数据信息,如数据偏移量、数据长度等。Split的多少决定了Map Task的多少,因为每个split会交给一个Map Task处理。
Map Task的执行过程如下图所示:
Map Task的执行过程:
Map Task先将对应的split迭代解析成一个个的<key,value>对,然后依次调用用户自定义的map()方法进行处理,最终将临时结果存放到本地磁盘上,其中,临时结果被分成若干个partition,每个partition将被一个Reduce Task处理。
Reduce Task的执行过程如下图所示:
Reduce Task的执行过程:
1)、从远程节点上读取Map Task中间结果,这是Shuffle阶段;
2)、按照key对key/value pair进行排序,这是Sort阶段;
3)、依次读取<key, value list>,调用用户自定义的reduce()方法处理,
并最终的结果存到HDFS,这是Reduce阶段。