MapReduce 如何工作

1.?目的

MapReduce是Hadoop的核心组件,它通过将工作分成一组独立的任务并行处理大量数据。 在MapReduce数据流中逐步从Mapper到Reducer。 在本章中,我们将介绍Hadoop MapReduce如何在内部工作?

本章将介绍Hadoop中完整的MapReduce数据流图。 详细介绍了MapReduce作业执行的各个阶段,例如输入文件?Input file,Hadoop中的InputFormat,InputSplits,RecordReader,Mapper,combiner, partitioner,混洗和排序?(shuffling and sorting),Reducer,RecordWriter和OutputFormat。 也将学习Hadoop MapReduce如何在所有这些阶段的工作。

2.?什么是MapReduce?

MapReduce是Hadoop的数据处理层。是一个编写应用程序的软件框架,可处理存储在Hadoop分布式文件系统(HDFS)中的大量结构化和非结构化数据。它通过将作业(提交的作业)分成一组独立的任务(子作业)并行处理大量数据。通过这种并行处理,集群的速度和可靠性得到提高。我们只需要将自定义代码(业务逻辑)放在mapper 和 reducer 中。

3. Hadoop MapReduce的工作原理

在Hadoop中,MapReduce通过将数据处理分为两个阶段进行工作:Map阶段和Reduce阶段。Map是处理的第一阶段,指定所有复杂的逻辑/业务规则/代价高昂的代码。 Reduce是处理的第二阶段,指定轻量级处理(如聚合/求和)。

4. MapReduce流程图

现在,让我们通过详细了解端到端Hadoop MapReduce作业执行流程,了解Hadoop MapReduce的工作原理:

4.1 ?输入文件?Input File

MapReduce任务的数据存储在输入文件中,而输入文件通常驻留在HDFS中。这些文件的格式是任意的,而基于行的日志文件和二进制格式也可以使用。

4.2 InputFormat

InputFormat定义了如何分割和读取这些输入文件。 它选择用于输入的文件或其他对象。 InputFormat创建InputSplit。

4.3 InputSplits

它由InputFormat创建,逻辑上表示将由单个Mapper处理的数据。 一个Mapper任务为每个分割?Split创建; 因此Mapper任务的数量将等于InputSplits的数量。 Split被分成记录,每个记录将由Mapper处理。

4.4 RecordReader

它与Hadoop MapReduce中的InputSplit进行通信,并将数据转换为适合Mapper读取的键值对。默认情况下,它使用TextInputFormat将数据转换为键值对。 RecordReader与InputSplit通信,直到文件读取未完成。它为文件中存在的每一行分配字节偏移量(唯一编号)。此外,这些键值对被发送给Mapper以供进一步处理。

4.5 Mapper

它处理每个输入记录(来自RecordReader)并生成新的键值对,而Mapper生成的这个键值对与输入对完全不同。 Mapper的输出也被称为写入本地磁盘的中间输出。 Mapper的输出不存储在HDFS上,因为这是临时数据,在HDFS上写入会产生不必要的副本(HDFS也是高延迟系统)。Mapper输出被传递给组合器以进一步处理。

4.6 Combiner

该组合器也被称为“mini reducer”。 Hadoop MapReduce Combiner在的Mapper 输出 上执行本地聚合,这有助于最大限度地减少mapper和reducer之间的数据传输 。一旦执行了该过程,输出就会传递给Partitioner以进一步工作。

4.7 Partitioner

如果我们正在使用多个Reducer,那么就会使用Partitioner。如果只有一个reduce, 那么不适用partitioner。

Partitioner从Combiner获取输出并执行分区。输出的分区是根据键key进行的,然后进行排序(Sorted)。通过散列函数?hash function,key(或者key的一个子集)被用来派生分区。

根据MapReduce中的key值,每个Combiner输出都被分区,并且具有相同键值的记录进入同一个分区,然后每个分区被发送到一个reducer。

4.8?混洗和排序?Shuffling and Sorting

现在,输出被shuffle到reduce节点(这是一个普通的数据节点,reduce阶段将在这里运行,因此称为reducer节点)。Shuffling是通过网络完成的数据的物理移动。一旦所有映射器都完成并且它们的输出在reduce节点上进行shuffling,则将该中间输出合并并排序,然后将其作为输入提供给reduce阶段。

4.9 Reduce

它将映射器产生的一组中间键值对作为输入,然后在它们中的每一个上运行reduce函数以生成输出。Reduce的输出是最终输出,存储在HDFS中。

4.10 ?RecordWriter

它将这些输出键值对从Reducer阶段写入输出文件。

4.11 输出格式?OutputFormat

这些输出键值对由RecordWriter写入输出文件的方式由OutputFormat确定。 Hadoop提供的OutputFormat实例用于在HDFS或本地磁盘上写入文件。因此reducer的最终输出是通过OutputFormat实例写在HDFS上的。

5.?结论

总之,我们可以说MapReduce中的数据流是输入文件,Hadoop中的InputFormat,InputSplits,RecordReader,Mapper,Combiner,分区器,混洗和排序,Reducer,RecordWriter和OutputFormat等不同处理阶段的组合。 因此,所有这些组件在Hadoop mapreduce工作中发挥着重要作用。

MapReduce 如何工作

发表评论

邮箱地址不会被公开。 必填项已用*标注

七 + 二 =

滚动到顶部