MapReduce知识点总结--持续更新

MapReduce核心思想

map负责切分
reduce负责合并
(先分后合,分而治之)

偏移量

指的是每行行首字母移动到文本的最前面需要一定的字符

Shuffle包含哪些步骤

Partition:分区
Sort:排序
Combiner:局部聚合
Group:分组

MapReduce读取数据到将结果写入HDFS十大步骤

第一步:InputFormat
	InputFormat在HDFS文件系统中读取要进行计算的数据
第二步:Split
	Split将数据进行逻辑切分,切分成多个任务
第三步:RR(RecordReader)
	RR 将切分后的数据转换成 key value 进行输出
第四步:Map
	接收一条一条的数据(有多少行数据Map运行多少次,输出的次数根据实际业务需求而定)根据业务需求编写代码,Map的输出是key,value的list。
--------------------------------------------------------------Map-------------------------------------------------------
第五步:Partition
	按照一定的规则对 key value的 list进行分区
第六步:Sort
	对每个分区内的数据进行排序
第七步:Combiner
	在Map端进行局部聚合(汇总)。
	目的是为了减少网络带宽的开销
第八步:Group
	将相同key的key提取出来作为唯一的key,将相同key对应的value提取出来组装成一个value的list
----------------------------------------------------------Shuffle--------------------------------------------------------
第九步:Reduce
	根据业务需求对传入的数据进行汇总计算
第十步:OutputFormat
	将最终的结果写入到HDFS上
--------------------------------------------------------Reduce---------------------------------------------------------

如何设置ReduceTask的数量

在驱动类中条件 job.setNumReduceTasks(2);

Combiner的作用

Map技术后,在Map端进行局部聚合
作用:
	减少网络传入次数
	降低网络开销

Combiner运行在MapReduce的哪一端

Map端
在Map端的shuffle中

MapTask的数量时可以认为设置的吗?

不可以,MapTask数量取决于数据的大小

Shuffle阶段的Partition分区算法是什么

计算逻辑:
	对map输出的key取哈希值,用这个哈希值与ReduceTask的值取余,余几,就将这个key,value放在对应的分区编号里(分区有多个编号)

Split逻辑切分数据,节分大小是多大?

128M,默认一个block块对应一个split切片

内存角度介绍Map的输出到Reduce输入的过程

1.Map输出数据到内存:
	Map输出的数据写入环形缓冲区(内存),缓冲区的默认大小是100M(可修改)。当数据达到阈值(默认0.8 —可修改)时,环形缓冲区进行flush
	环形缓冲区:数据在输出的同时,数据也可以写入空余的空间内
	当flash的数据个数达到一定的数量时(默认4个),对数据进行合并(merge)。
2.Reduce在Map端拷贝数据
	Map输出的结果写入本地,Reduce主动发出拷贝进行到Map端拷贝数据
	Reduce获取大数据后,将数据写入内存,当数据达到阈值时进行flush
	当flush的个数达到一定的量时,进行合并,最终发送给Reduce

最优的Map效率是什么?

Map端的最高效率:
	尽量减少环形缓冲区flush的次数(减少磁盘IO的使用次数)
	1.加大环形缓冲区的内存
	2.增大环形缓冲区阈值的大小
	3.对输出的数据进行压缩

最优的Reduce效率是什么?

尽量减少环形缓冲区flush次数
尽量将所有的数据在内存计算

在MapReduce阶段,有哪些优点?

加大环形缓冲区的内存
增大缓冲区预支的大小(考虑剩余的空间是不是够系统使用)
对输出的数据进行压缩(压缩--解压的过程会消耗CPU)

集群优化的核心思路

在网络带宽,磁盘IO是瓶颈的前提下
	能不使用IO网络就不使用,在必须使用的前提下,能少用就少用
	所有的只要能够减少网络带宽的开销,只要能够减少磁盘IO的使用次数的配置项,都是集群调优的可选项
	可选项包括:
		软件层面【系统软件和集群软件】
		硬件层面
		网络层面	

你可能感兴趣的:(【大数据】MapReduce)