MapReduce应用编程开发

本文详细介绍了MapReduce的编程模型,包括Map和Reduce接口、数据处理流程、Combiner和Partitioner的编程,以及在集群上的运行机制。此外,还讲解了MapReduce的输入输出格式,如TextInputFormat和KeyValueTextInputFormat,并提到了如何使用MultipleInputs处理多种输入。最后,文中强调了调试MapReduce作业的方法和通过Web UI监控作业状态的重要性。
摘要由CSDN通过智能技术生成
  • MapReduce的编程
  • 在集群上的运作
  • MapReduce类型与格式

MapReduce的编程

  1. 设计思路
    MapReduce中定义了如下的Map和Reduce两个抽象的编程接口,由用户去编程实现:
    map: (k1; v1) → [(k2; v2)]
    输入:键值对(k1; v1)表示的数据
    处理:文档数据记录(如文本文件中的行,或数据表格中的行)将以“键值对”形式传入map函数;map函数将处理这些键值对,并以另一种键值对形式输出处理的一组键值对中间结果[(k2; v2)]
    输出:键值对[(k2; v2)]表示的一组中间数据
    reduce: (k2; [v2]) → [(k3; v3)]
    输入: 由map输出的一组键值对[(k2; v2)] 将被进行合并处理将同样主键下的不同数值合并到一个列表[v2]中,故reduce的输入为(k2; [v2])
    处理:对传入的中间结果列表数据进行某种整理或进一步的处理,并产生最终的某种形式的结果输出[(k3; v3)]
    输出:最终输出结果[(k3; v3)]
    在这里插入图片描述
    各个map函数对所划分的数据并行处理,从不同的输入数据产生不同的中间结果输出
    各个reduce也各自并行计算,各自负责处理不同的中间结果
    数据集合进行reduce处理之前,必须等到所有的map函数做完
    在进入reduce前需要有一个同步障(barrier)
    这个阶段也负责对map的中间结果数据进行收集整理(aggregation & shuffle)处理,以便reduce更有效地计算最终结果, — 最 终汇总所有reduce的输出结果即可获得最终结果
    2、编写Mapper类(以统计sogou500w的Uid为例 – 每位用户搜索的次数)
public class UidMapper extends Mapper<Object, Text, Text, IntWritable> {
   
	public static final IntWritable ONE = new IntWritable(1);
	private Text uidText = new Text();
	public void map(Object key, Text value, Context context)
			throws InterruptedException, IOException {
   
		String line = value.toString();
		String[] arr = line.split("\t");
		if (null != arr && arr.length == 6) {
   
			String uid = arr[1];
			if (null != uid && !"".equals(uid.trim())) {
   
				uidText.set(uid);
				context.write(uidText, ONE);
			}
		}
	}
}

3、编写Reducer类

public class UidReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
   
	private IntWritable result = new IntWritable();
	public void reduce(Text key, Iterable<IntWritable> values, Context context)
			throws InterruptedException, IOException {
   
		int sum 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值