上一篇我们了解了Hadoop的知识,这篇我们来看MapReduce的方方面面。
一、MapReduce基础知识
支持对海量数据对处理;
原生的分布式计算框架;
主要架构思想:分而治之,体现在:
map:
大数据集分为小的数据集;
对每个数据集,进行逻辑业务处理;
reduce:
合并统计数据结果;
MapReduce主要处理流程:
input-->map-->shuffle-->reduce-->output
运行模式:
本地运行模式和YARN模式
PS:历史服务器:
查看已经运行完成的mapreduce作业记录,比如用了多少个map、用了多少个reduce、作业提交时间、作业完成时间等信息。默认情况下,历史服务器是关闭的。如果启动成功则可以通过http://IP:9888展示的web UI查看,顺手贴一下如何启动和停止历史服务器命令:
二、MapReduce编程模型
MapReduce编程模型一种分布式计算模型,解决海量数据的计算问题。
MapReduce将整个并行计算过程抽象到两个函数:
Map(映射):对一些独立的元素组成的列表的每一个元素进行指定的操作,可以高度并行(是指一个类型的数据经过处理输出为另外一个类型的数据结果)
Reduce(化简):对一个列表对元素进行合并
一个简单的MapReduce程序只需要指定map( )、reduce( )、input和output,剩下的由框架完成。
主要分为2个阶段:
Map阶段由一定数量的Map Task组成:
输入数据格式解析:InputFormat;
输入数据处理:Mapper;
数据分组:Partitioner;
Reduce阶段由一定数量的Reduce Task组成:
数据远程拷贝;
数据按照key排序;
数据输出Reducer;
数据输出格式:OutputFormat;
基于MapReduce计算模型编写分布式并行程序非常简单,程序员的主要编码工作就是实现Map和Reduce函数;
其他的并行编程中的种种复杂问题,如分布式存储、工作调度、负载平衡、容错处理、网络通信,均由YARN框架负责处理。
Map和Reduce函数遵循如下常规格式:
map(K1,V1)-->list(K2,V2)
Reduce(K2, list(V2))-->list(K3,V3)
Mapper的基类:
Protect void map(KEY key,VALUE value,Context context)throws IOException,InterruptedException{ ... }
Reduce的基类:
Protect void reduce(KEY key,Iterable value,Context context)throws IOException,InterruptedException{ ... }
【Context是上下文对象】
MapReduce编程中的数据类型:
数据类型都实现Writable接口,以便用这些类型定义的数据可以被序列化进行网络传输和文件存储;
基本的数据类型:
说明:
Writable:
Write( ):是把每个对象序列化到输出流;
readField( ):是把输入流字节反序列化;
WritableComparable:用于比较和排序;
Java值对象的比较:重写toString( )、hashCode( )、equal( )方法
三、Shuffle的概念和理解
意为洗牌或弄乱;
Collection.shuffle(list)随机打乱参数list中的元素顺序;
MapReduce里的shuffle,描述着数据从map task输出到reduce task输入的这段过程。
从程序的角度理解一共分了以下细节过程:
第一步:
input
InputFormat(读取数据;转换)
FileInputFormat
TextInputFormat
第二步:
map
ModuleMapper
map(KEYIN,VALUEIN,KEYPUT,VALUEOUT)
默认情况下:KEYIN: LongWritable;VALUEIN: TEXT
第三步:
shuffle
总的来说shuffle分成:
分区:partitioner;
排序:sort;
拷贝:copy-->用户无法干涉;
分组:group;
压缩:compress-->可设置;
合并:combiner-->Map Task短的Reduce;
第四步:
Reduce
reduce(KEYIN,VALUEIN,KEYPUT,VALUEOUT)
说明:map输出数据类型与reduce输入一致
第五步:
Output
OutputFormat
FileOutputFormat
TextOutputFormat:每个对,输出一行,key与value中间分隔符为\t,默认调用key与value的toString( )方法。
以上为对MapReduce知识对整理和归纳,看完本文希望您对整个对底层过程又一个比较清晰的认识。
领取专属 10元无门槛券
私享最新 技术干货