文章目录
- 4. Hadoop MapReduce
-
- 4.1 MapReduce 优点
- 4.2 MapReduce 核心思想
- 4.3 MapReduce 序列化类型
- 4.4 MapReduce 编程规范
- 4.5 MapReduce WordCount
- 4.6 MapReduce 序列化
- 4.7 MapReduce InputFormat
- 4.8 MapReduce 工作流程
- 4.9 MapReduce Shuffle机制
- 4.10 MapReduce Partitioner
- 4.11 MapReduce Sort
- 4.12 MapReduce Combiner
- 4.13 MapReduce OutputFormat
- 4.14 MapReduce MapTask工作机制
- 4.15 MapReduce ReduceTask工作机制
- 4.16 MapReduce ReduceJoin
- 4.17 MapReduce Mapjoin
- 4.18 MapReduce ETL
- 4.19 MapReduce 开发总结
- 4.20 MapReduce 压缩
4. Hadoop MapReduce
分布式计算引擎框架,离线计算,不擅长DAG计算
4.1 MapReduce 优点
- 易于编程,实现框架接口即可
- 良好的扩展性,动态加节点
- 高容错性,任务可以转移
- 适合海量数据计算
4.2 MapReduce 核心思想
一个MapTask 默认处理128M数据
以WordCount 的MapReduce程序为例
- Map阶段 MapTask并行工作
- 读数据,按行处理
- 按空格(或其他切割符)切分单词
- 形成KV键值对(word,1)
- 将所有KV键值对,按照指定的分区,溢写到磁盘
- Reduce阶段 ReduceTask并行工作
- 根据MapTask的分区数,开启对应数量的ReduceTask
- 一个ReduceTask只处理对应分区号的多个MapTask产生的结果
- 最终完成单词统计,并输出到结果文件
4.3 MapReduce 序列化类型
除了String 在Hadoop 类型中是Text外,其余都是在原Java类型后加上Writable后缀
4.4 MapReduce 编程规范
- Mapper阶段
- 继承Mapper父类,重写map()方法
- Mapper输入输出都是KV
- map()方法定义处理逻辑,对每个KV调用一次
- Reduce阶段
- 继承Reduce父类,重写reduce()方法
- Reduce输入输出也是KV
- reduce()方法定义处理逻辑,对每组KV(按K分组)调用一次
- Dirver阶段
启动MapReduce程序的客户端,提交任务到YARN集群
4.5 MapReduce WordCount
执行流程: Mapper : setup() -> run() -> for map() -> cleanup() ->Reducer: setup() ->run -> for reduce() ->cleanup()
- WordCountMapper
package com.ipinyou.mapreduce.wordcount;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
private Text outK = new Text();
private IntWritable outV = new IntWritable(1);
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
String[] words = line.split