MapReduce基础知识

MapReduce

一、MapReduce概述

思考

​ 求和:1+3+5+8+2+7+3+4+9+…

MapReduce分布式计算框架

​ MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题.

​ MR由两个阶段组成:Map和Reduce,用户只需要实现map()和reduce()两个函数,即可实现分布式计算,非常简单。

​ 这两个函数的形参是key、value对,表示函数的输入信息。

MapReduce框架的组成

JobTracker / ResourceManager
TaskTracker / NodeManager

MapReduce原理(参看图 MR原理)

二、MapReduce的执行步骤

map任务处理

  1. 读取输入文件内容,解析成key、value对。对输入文件的每一行,解析成key、value对。每一个键值对调用一次map函数。
  2. 写自己的逻辑,对输入的key、value处理,转换成新的key、value输出。
  3. 对输出的key、value进行分区。
  4. 对相同分区的数据,按照key进行排序(默认按照字典顺序进行排序)、分组。相同key的value放到一个集合中。
  5. (可选)分组后的数据进行归约。

reduce任务处理

  1. 对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。这个过程并不是map将数据发送给reduce,而是reduce主动去获取数据。
  2. 对多个map任务的输出进行合并、排序。写reduce函数自己的逻辑,对输入的key、value处理,转换成新的key、value输出。
  3. 把reduce的输出保存到文件中。
/**
 * 案例:实现WordCount(文件:words.txt)
 */
  // 代码实现:
public class WCMapper extends Mapper<LongWritable, Text, Text, LongWritable>{
   
   
	/**
	 * key -- 当前行的开始位置在整个文件中的偏移量
	 * value -- 当前行的内容
	 * context -- 环境对象
	 */
protected void map(LongWritable key, Text value, org.apache.hadoop.mapreduce.Mapper<LongWritable,Text,Text,LongWritable>.Context context) throws java.io.IOException ,InterruptedException {
   
   
		//获取当前行
		String line = value.toString();
		//按照空格进行切割,得到当前行单词数组
		String [] wds = line.split(" ");
		//遍历这个数组,输出词频率
		for(String w : wds){
   
   
			context.write(new Text(w), new LongWritable(1));
		}
	};
}

public class <
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值