组件模块
MapReduce :MapReduce 是一个分布式运算程序的编程框架,核心功能是将用户编写的业务逻辑代码和MapReduce自带默认组件整合成一个完整的分布式运算程序,并发运行在一个 Hadoop 集群上。
MapReduce 进程:
- MrAppMaster:负责整个程序的过程调度及状态协调
- MapTask:负责 Map 阶段的整个数据处理流程。并行处理输入数据
- ReduceTask:负责 reduce阶段的整个数据处理流程。对 Map 结果进行汇总
数据块: Block 是 HDFS 物理上把数据分成一块一块。 数据块是 HDFS 存储数据单位。
数据切片: 数据切片只是在逻辑上对输入进行分片, 并不会在磁盘上将其切分成片进行存储。数据切片是 MapReduce 程序计算输入数据的单位,一个切片会对应启动一个 MapTask。
Combiner:是MR程序中Mapper和Reducer之外的一种组件。Combiner是在每一个MapTask所在的节点运行。Combiner的作用为对每一个MapTask的输出进行局部汇总,以减小网络传输量。
核心编程思想
网络异常,图片无法展示
|
图中分为2个文件,一个200M,一个100M。一个block大小默认为128M,则第一个文件128M分配给一个MapTask,剩下72M分配给另外一个MapTask。
以词频统计为例:
Map阶段:
- 读数据并按行处理
- 按照指定分隔符进行切分单词
- 切分结果为KV键值对(单词,1)
- 将所有KV中的Key值按照首字母顺序溢写到两个分区的磁盘。
Reduce阶段:
- 汇总多个MapTask的结果输出到结果文件。
- MapReduce 编程模型只能包含一个 Map 阶段和一个 Reduce 阶段。
- 如果用户的业务逻辑非常复杂,那就只能多个 MapReduce 程序,串行运行。
框架原理
网络异常,图片无法展示
|
InputFormat:对输入进行控制,FileInputFormat、TextInputFormat、CombineTextInputFormat等。
Mapper:数据源通过InputFormat取读后,交给Mapper进行后续业务逻辑(用户自己写的代码)处理。
Shuffle:包含排序、分区、压缩、合并等等。
Reducer:拉取Mapper阶段处理的数据,拉的过程中,要经历shuffle的过程。
OutputFormat:对输出的控制,比如可以输出到文件、mysql、Hbase、ES等。