我们都知道Hadoop主要用于离线计算,它由两部分构成:HDFS和MapReduce,其中HDFS负责文件的存储,MapReduce负责对数据的计算,在执行MapReduce程序的时候。需要制定输入的文件uri、输出的文件uri。一般情况下这两个地址都是存放在HDFS上的。MapReduce计算过程又分成两个阶段:map阶段和reduce阶段,其中map阶段是负责将输入文件进行划分,划分的结果是一个个的key:value对,reduce阶段再将多个map的结果进行汇总。那我们就从整个计算的输入开始说起,来看一下MapReduce的整个计算过程是什么样子的,这里还是以简单的wordCount为例来说明,这里只是一个大体的流程,具体的细节以及可靠性保证还不了解。
在MapReduce的框架中存在两种角色的节点,分别为JobTracker和TaskTracker,它们分别是控制节点和工作节点,前者是系统的核心,通过单点的方式控制系统的资源分配和负载均衡,在MapReduce中job的提交都是提交到JobTracker上的,后者负责整个作业的资源申请、任务调度,它决定了每一个job的map和reduce在哪几台TaskTracker中执行,而TaskTracker是工作节点,可以执行map和reduce过程,需要实时的汇报自己的状态以及任务运行情况到JobTracker服务器。
我觉得mapreduce编程模型就是设置了多个回调的接口,然后整个框架在按照它的模型完成整个过程,你可以通过反射的方式设置不同的阶段调用不同的回调函数。
在所有的步骤之前,我们先明确MapReduce完成整个计算过程的输入是什么,输出又是什么?它输入的内容是一个或者多个文件,这些文件存储在HDFS中,输出的内容是一组key-value对,写入到HDFS中。
1、对输入进行分区
执行map和reduce是被称为task的进程,它是由TaskTracker启动的,由于需要将输入数据交给多个TaskTracker上