MapReduce 数据流动
MapReduce用于计算大量的数据。为了处理即将到来的数据以并行和分布式形式,数据必须从各个阶段流动。
MapReduce数据流程的阶段
输入读取器
输入读取器读取即将到来的数据,并将其分割成适当大小的数据块(64 MB到128 MB)。每个数据块都与一个Map函数相关联。
一旦输入读取完数据,它会生成相应的键值对。输入文件存储在HDFS中。
注意 – 输入数据可以是任何形式。
Map函数
Map函数处理即将到来的键值对,并生成相应的输出键值对。映射的输入和输出类型可能不同。
分区函数
分区函数将每个Map函数的输出分配给适当的Reducer。可用的键和值提供给这个函数。它返回Reducers的索引。
Shuffling和Sorting
数据在节点之间/内部进行洗牌,以使其从map中移出并准备好用于reduce函数处理。有时,数据的洗牌可能需要很多计算时间。
对输入数据执行排序操作以供Reduce函数使用。在这里,使用比较函数比较数据并按排序形式排列。
Reduce函数
Reduce函数分配给每个唯一的键。这些键已经按排序顺序排列。与键关联的值可以迭代Reduce并生成相应的输出。
输出写入器
一旦所有上述阶段的数据流完成,输出写入器开始执行。输出写入器的角色是将Reduce的输出写入稳定存储。