MapReduce是一种编程模型,采用主从集群结构,与Hdfs类似,也是由主节点(JobTracker,在hadoop2.0中,由Yarn代替JobTracker的工作)进行任务的调度与分配,从节点(TaskTracker,在hadoop2.0中,由ApplicationMaster代替TaskTracker的工作)进行具体任务的执行,需要注意的一点是,MapReduce和hdfs一样,默认情况下并没有配置高可用,这个可以根据业务情况,基于zookeeper进行配置,另外它本身也具备一定的容错性,这个主要体现在主节点对从节点状态的监控上,当发现某个节点失效了,会进行重启,从而提高了系统的健壮性。
MapReduce主要用来进行大规模数据集的并行运算,它将计算过程抽象为Map和Reduce两个函数,
map函数用于将数据解析为key/value结构,并存于本地目录,reduce函数会将key相同的数据进行业务计算处理,并最终将结果写到hdfs上。
MapTask执行过程:先将输入的数据进行切片,即切成大小相等的数据块,每一个分片会作为单个MapWorker(由开发者自定义业务处理逻辑)的输入被处理,以便于并行工作,在进行对外输出之前,mapReduce框架会按照key值排序,使得key相同的数据彼此相邻,同样也可以调用combiner函数使其聚合
ReduceWorker执行过程:reduce函数接到map函数的输出,会先进行混洗(shuffle)和分组(sort),之后会进入reduce自定义业务逻辑阶段,处理完成后,将数据存储进hdfs。
