【Hadoop入门学习系列之五】MapReduce 2.0编程实战

转载:https://blog.csdn.net/shengmingqijiquan/article/details/52916664

一.MapReduce2.0编程模型
关于MR编程模型请参考上一篇:【Hadoop入门学习系列之四】MapReduce 2.0应用场景和原理、基本架构和编程模型

二.MapReduce2.0编程接口
三种编程方式
Java(最原始的方式)
Java编程接口组成;
旧API所在java包:org.apache.hadoop.mapred
新API所在java包 :org.apache.hadoop.mapreduce

新API具有更好的扩展性;
两种编程接口只是暴露给用户的形式不同而已,内部执行引擎是一样的;
旧API可以完全兼容Hadoop 2.0,但新API不行

从hadoop 1.0.0开始,所有发行版均包含新旧 两类API;

Hadoop Streaming(支持多语言)
与Linux管道机制一致
 通过标准输入输出实现进程间通信
 标准输入输出是任何语言都有的
 几个举例:
cat 1.txt | grep “ dong” | sort
cat 1.txt | python grep.py | java sort.jar

Hadoop Pipes(支持C/C++)
备注: Java编程接口是所有编程方式的基础;不同的编程接口只是暴露给用户的形式不同而已,内部执行引擎是一样的; 不同编程方式效率不同。

三. MapReduce2.0编程步骤及演示,以WordCount为例【java版】
1.WordCount问题


2.Map阶段


3.Reduce阶段


4.mapper设计与实现


5.reducer设计与实现


6.main函数设计与实现


7.程序运行
8.问题整理
【1】输入数据格式解析
使用默认的TextInputFormat
每个Map Task处理一个split;
一个split大小等于一个block【也可以是多个】;
如果最后一行数据被截断,则读取后一个block前半部分;
转换成key/value对, key是偏移量, value是行内容。


【2】数据流


【3】输入数据解析
public interface InputFormat<K, V> {
InputSplit[] getSplits(JobConf job, int numSplits) throws IOException;
RecordReader<K, V> getRecordReader(InputSplit split,
JobConf job,
Reporter reporter) throws IOException;
}
1
2
3
4
5
6
默认为TextInputFormat,针对文本文件的;
用户可通过参数mapred.input.format.class设置 InpuFormat实现
【4】Mapper—map处理逻辑
public interface Mapper<K1, V1, K2, V2> extends JobConfigurable, Closeable {
void map(K1 key, V1 value, OutputCollector<K2, V2> output, Reporter reporter)
throws IOException;
}
1
2
3
4
新API位于org.apache.hadoop.mapreduce.Mapper中
【5】Partitioner—map输出结构分片
org.apache.hadoop.mapred(旧API):
public interface Partitioner<K2, V2> extends JobConfigurable {
int getPartition(K2 key, V2 value, int numPartitions);
}
org.apache.hadoop.mapreduce(新API):
public abstract class Partitioner<KEY, VALUE> {
public abstract int getPartition(KEY key, VALUE value, int numPartitions);
}


6.Reducer—reduce处理逻辑
org.apache.hadoop.mapred(旧API):
public interface Reducer<K2, V2, K3, V3> extends JobConfigurable, Closeable {
void reduce(K2 key, Iterator<V2> values,
OutputCollector<K3, V3> output, Reporter reporter)
throws IOException;
}
新API位于org.apache.hadoop.mapreduce.Reducer中
7.小结


四.总结
本篇以经典的例子wordcount来详细介绍MR的编程过程和思想,非常有参考学习价值,自己一定要自己多敲几遍代码代码,熟练掌握其中的代码执行原理,未之后的研究hadoop的源码打好基础。
————————————————
版权声明:本文为CSDN博主「数据圈」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shengmingqijiquan/article/details/52916664

猜你喜欢

转载自www.cnblogs.com/ceshi2016/p/12118987.html