当前位置:首页 > 行业动态 > 正文

MapReduce执行核心类及其主要理念探讨?

MapReduce 执行主要类

1. Mapper 类

功能:Mapper 类负责处理输入数据,将其分解成键值对(keyvalue pairs)。

输入:通常从输入格式(如 HDFS 中的文件)读取数据。

输出:生成一系列的中间键值对,这些键值对将被 Shuffle 和 Sort 阶段处理。

2. Reducer 类

功能:Reducer 类负责合并来自 Mapper 的中间键值对,执行特定的聚合或转换操作。

输入:从 Shuffle 和 Sort 阶段接收键值对。

输出:生成最终的输出结果,这些结果通常存储在输出格式中(如 HDFS)。

3. Job 类

功能:Job 类封装了 MapReduce 作业的所有配置信息,并负责执行整个作业。

主要方法

setMapperClass(Class<? extends Mapper> mapperClass): 设置 Mapper 类。

setReducerClass(Class<? extends Reducer> reducerClass): 设置 Reducer 类。

setMapOutputKeyClass(Class<? extends Writable> mapOutputKeyClass): 设置 Mapper 输出的键类型。

setMapOutputValueClass(Class<? extends Writable> mapOutputValueClass): 设置 Mapper 输出的值类型。

setOutputKeyClass(Class<? extends Writable> outputKeyClass): 设置最终输出的键类型。

setOutputValueClass(Class<? extends Writable> outputValueClass): 设置最终输出的值类型。

waitForCompletion(): 开始执行作业,并等待其完成。

4. InputFormat 类

功能:InputFormat 类负责定义输入数据的格式,以及如何将输入数据分割成多个分片(Splits)。

主要方法

getSplits(JobContext job): 返回一个分片列表。

createRecordReader(InputSplit split, TaskAttemptContext context): 创建一个用于读取分片的 RecordReader。

5. OutputFormat 类

功能:OutputFormat 类负责定义输出数据的格式,以及如何将数据写入输出格式。

主要方法

getRecordWriter(TaskAttemptContext context): 创建一个 RecordWriter 用于写入数据。

getOutputCommitter(TaskAttemptContext context): 创建一个 OutputCommitter 用于处理作业完成后的清理工作。

6. Shuffle 和 Sort

功能:在 Mapper 和 Reducer 之间,数据需要通过 Shuffle 和 Sort 阶段进行处理。

过程

Shuffle:将 Mapper 输出的中间键值对根据键进行分组,并分配到不同的 Reducer。

Sort:对每个 Reducer 分配到的键值对进行排序,以便 Reducer 可以按照键的顺序处理数据。

7. TaskTracker 和 JobTracker

功能:在 Hadoop 分布式文件系统(HDFS)中,TaskTracker 负责执行作业中的任务,而 JobTracker 负责协调整个集群上的作业执行。

TaskTracker:负责执行作业的具体任务,如 Mapper 和 Reducer。

JobTracker:负责监控整个集群的状态,分配作业到 TaskTracker,并处理作业的生命周期。

是 MapReduce 中主要的类和概念,它们共同协作以高效地处理大规模数据集。

0