一.MapReduce运行机制
- Client:提交MapReduce作业
- ResourceManager:负责集群资源的统一管理和调度
- NodeManager:它主要负责自己本身节点的资源管理和使用,以及定时向RM汇报本节点的资源使用情况
- ApplicationMaster:主要负责应用程序的管理
- HDFS:在其他角色间共享数据文件
二.MapReduce框架
MapReduce作业通常将输入数据集拆分为独立的块,这些块由map任务并行处理。框架对map的输出进行排序,然后输入到reduce任务。通常,作业的输入和输出都存储在文件系统中。该框架负责调度任务,监视它们并重新执行失败的任务。通常,计算节点和存储节点是相同的,即MapReduce框架和Hadoop分布式文件系统在同一组节点上运行。此配置允许框架有效地在已存在数据的节点上调度任务,从而在集群中产生非常高的聚合带宽。
1.MapReduce输入输出
MapReduce框架将输入作为一组<key,value>并生成一组<key,value>作为输出。key和value可以是不同的数据类型。该key和value的类必须由框架序列化,因此需要实现Writable接口。此外,key类必须实现WritableComparable接口以便于按框架进行排序。MapReduce作业的输入和输出类型:
input <k1,v1> --> map --> <k2,v2> --> combine --> <k2,v2> --> reduce --> <k3,v3> output
2.MapReduce的处理流程
以WordCount为例:
- MapReduce Job先将数据集进行切片,之后每个片分发给一个Mapper Task执行。
- 在Mapper Task执行过程中,根据Partition规则进行分区,然后在分区内排序。
- 之后,将多个Mapper Task中相同Partition的数据Copy到同一个Reducer所在的节点上,进行合并和排序。
- 最后,在Reducer Task中统计出单词的词频,并输出到输出文件中。