hadoop 中combiner及reduce数据流动过程

本文介绍了MapReduce中Combiner组件的工作原理及其作用。Combiner作为一个在Map端运行的小型Reducer,能够减少网络传输的数据量。文章详细解释了Combiner的运行流程,并对比了它与Reducer的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public static class ActorCombiner extends Reducer<Text, Text, Text, Text> {
	
		private Text text = new Text();
		@Override
		public void reduce(Text key, Iterable<Text> values, Context context)throws IOException, InterruptedException {
			System.out.println("—————————ActorCombiner———————数据进入————————————————");
			int maxHotIndex = Integer.MIN_VALUE;
			int hotIndex = 0;
			String name="";
			for (Text val : values) {
				System.out.println("————————————————开始循环————————————————");
				String[] valTokens = val.toString().split("\t");
				hotIndex = Integer.parseInt(valTokens[1]);
				if(hotIndex>maxHotIndex){
					name = valTokens[0];
					maxHotIndex = hotIndex;
				}//所有数据会先进行完for循环后,输出一个期望value
			}
			text.set(name+"\t"+maxHotIndex);
			context.write(key, text);
			System.out.println("—————————ActorCombiner———————combine完毕————————————————");
		}
	}

其实combiner 就是一个在map端运行的一个小型reducer,能减少数据的传输。运行过程:

  1. —————————ActorCombiner———————数据进入————————————————  
  2. ————————————————开始循环————————————————  
  3. ————————————————开始循环————————————————  
  4. ————————————————开始循环————————————————  
  5. ……  
  6. ……  
  7. ————————————————开始循环————————————————  
  8. ————————ActorCombiner———————数据处理完毕————————————————  

数据是以一个分片一个分片进入combiner里面的,一个分片流程只进行一次,而不是像map一样一行一行地循环进行,而是一个分片直接进行一次,所以这个分片的value把for循环进行完后,再输出一个value,而不是输出多个。所以谓之“合并”,是通过一个方法(如循环 比较 循环相加 循环求平均值)去获得对应的处理完的value。

reducer也同理,一个grouping分组完后,调用reduce来处理这组相同key的value。


所以Mapreduce就是按需求把key整合好给reducer,让reducer去针对相同的key,去处理不同的value,得出期望值。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值