大数据知识分享(2)

上一篇我们了解了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知识对整理和归纳,看完本文希望您对整个对底层过程又一个比较清晰的认识。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180116G0Q3K900?refer=cp_1026

扫码关注云+社区