Hadoop MapReduce执行过程中map和reduce执行过程

Map和Reduce执行过程
        MapReduce是分布式运行,由两个阶段构成:map和reduce,MapReduce框架都是默认实现,用户只需map()和   
reduce()两个函数,即可实现分布式计算。这两个函数形参和返回值是(key,value)

1.Map执行过程:

       案例: str = "abceabd"    计算这个字符串中每一个字符出现的次数?

那么要获取每个block文本,就要遍历所有,获取其中的一行str使用split()方法将每个单词分成一个个block块

      String[] words = str.split(" ");

根据要求,需要将每一个单词转换成为<k, v>的形式,k为单词本身,v为单词出现的次数。

2.Reduce执行过程:

        执行reduce,接收map的输出<key, values>对这个结果进行汇总统计 以便values,进行简单的累加,就可以计算出key对应的次数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设天气数据的格式为:每一行包含城市id和气温,间用逗号隔开。例如: ``` 101,18 102,23 101,20 103,15 102,21 101,16 ``` 下面是一个简单的 MapReduce 任务,用于计算每个城市id的气温次数: Map 类: ```java import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class TemperatureCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text cityId = new Text(); @Override public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); String[] parts = line.split(","); if (parts.length == 2) { cityId.set(parts[0]); context.write(cityId, one); } } } ``` Reduce 类: ```java import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; public class TemperatureCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> { private IntWritable result = new IntWritable(); @Override public 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); } } ``` 在这个 MapReduce 任务,我们使用 Text 类型存储城市id,使用 IntWritable 类型存储计数。在 Map 阶段,我们从输入的每一行提取城市id,然后将其作为 key,将值设置为 1,发送给 Reduce 阶段。在 Reduce 阶段,我们对每个城市id的计数进行求和,并将结果输出。 完整的代码可以参考下面的链接: https://github.com/ChitGPT/MapReduce-Examples/tree/main/Temperature-Count

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值