hadoop 图解 mr过程

举报
i-WIFI 发表于 2024/10/09 20:36:43 2024/10/09
【摘要】 Hadoop MapReduce 是一个分布式数据处理框架,它将数据划分为多个块,并在集群中的多个节点上并行处理这些数据。下面是 Hadoop MapReduce 过程的详细说明和代码案例:数据输入:首先,Hadoop MapReduce 需要输入数据。这些数据通常被划分为多个块,每个块大小为 64MB 到 128MB。这些数据块被存储在 Hadoop 分布式文件系统(HDFS)中。Mapp...

Hadoop MapReduce 是一个分布式数据处理框架,它将数据划分为多个块,并在集群中的多个节点上并行处理这些数据。下面是 Hadoop MapReduce 过程的详细说明和代码案例:

  1. 数据输入:首先,Hadoop MapReduce 需要输入数据。这些数据通常被划分为多个块,每个块大小为 64MB 到 128MB。这些数据块被存储在 Hadoop 分布式文件系统(HDFS)中。
  2. Mapper 阶段:在 Mapper 阶段,每个数据块被分配给一个 Mapper 任务。Mapper 任务将数据块中的每个数据行作为输入,并产生一组中间键值对。这些中间键值对被分组并排序,然后传递给 Reducer 阶段。

下面是一个简单的 Mapper 代码案例:

public class MyMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
 
    private final static IntWritable ONE = new IntWritable(1);
 
    private final static Text WORD = new Text();
 
  
 
    @Override
 
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
 
        String line = value.toString();
 
        StringTokenizer tokenizer = new StringTokenizer(line);
 
        while (tokenizer.hasMoreTokens()) {
 
            WORD.set(tokenizer.nextToken());
 
            context.write(WORD, ONE);
 
        }
 
    }
 
 }
  1. Shuffle 阶段:在 Shuffle 阶段,所有 Mapper 任务产生的中间键值对被分组并排序。然后,这些分组被发送给相应的 Reducer 任务。
  2. Reducer 阶段:在 Reducer 阶段,每个分组被分配给一个 Reducer 任务。Reducer 任务将分组中的所有键值对作为输入,并产生一组输出键值对。这些输出键值对被分组并排序,然后写入 HDFS。

下面是一个简单的 Reducer 代码案例:

public class MyReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
 
    private IntWritable result = new IntWritable();
 
  
 
    @Override
 
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
 
        int sum = 0;
 
        for (IntWritable value : values) {
 
            sum += value.get();
 
        }
 
        result.set(sum);
 
        context.write(key, result);
 
    }
 
 }
  1. 输出:在 Reducer 阶段完成后,所有输出键值对被写入 HDFS。然后,Hadoop MapReduce 作业完成。

需要注意的是,以上代码案例仅用于说明 Hadoop MapReduce 过程的基本原理,实际应用中可能需要根据具体需求进行修改和优化。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。