Map Reduce 计算框架(2)

MapReduce的分区与ReduceTask的数量
在MapReduce中,通过指定分区,会将同一个分区的数据发送到同一个reduce中,例如为了数据的统计,可以把一批类似的数据发 送到同一个reduce当中去,在同一个reduce中统计相同类型的数据,就可以实现类似数据的分区,统计等
直观的说就是相同类型的数据,送到一起去处理,在reduce当中默认分区只有1个。
MapReduce当中的计数器
计数器是收集作业统计信息的有效手段之一,用于质量控制或应用级统计。计数器还可辅助诊断系统故障。如果需要将日志信息传输到map 或reduce 任务, 更好的方法通常是看能否用一个计数器值来记录某一特定事件的发生。对于大型分布式作业而言,使用计数器更为方便。除了因为获取计数器值比输出日志更方便,还有根据计数器值统计特定事件的发生次数要比分析一堆日志文件容易得多。
hadoop内置计数器列表

MapReduce任务计数器org.apache.hadoop.mapreduce.TaskCounter
文件系统计数器org.apache.hadoop.mapreduce.FileSystemCounter
FileInputFormat计数器org.apache.hadoop.mapreduce.lib.input.FileInputFormatCounter
FileOutputFormat计数器org.apache.hadoop.mapreduce.lib.output.FileOutputFormatCounter
作业计数器org.apache.hadoop.mapreduce.JobCounter

MapReduce的combiner
每一个 map 都可能会产生大量的本地输出,Combiner 的作用就是对 map 端的输出先做一次合并,以减少在 map 和 reduce 节点之间的数据传输量,以提高网络IO 性能,是 MapReduce 的一种优化手段之一。
combiner 能够应用的前提是不能影响最终的业务逻辑,而且,combiner 的输出 kv 应该跟 reducer 的输入 kv 类型要对应起来
1、combiner 是 MR 程序中 Mapper 和 Reducer 之外的一种组件
2、combiner 组件的父类就是 Reducer
3、combiner 和 reducer 的区别在于运行的位置:Combiner 是在每一个 maptask 所在的节点运行 Reducer 是接收全局所有 Mapper 的输出结果;
4、combiner 的意义就是对每一个 maptask 的输出进行局部汇总,以减小网络传输量。未使用combiner的网络开销
Shuffle阶段的Partition分区算法
算法:对key 进行哈希,获取到一个哈希值,用这个哈希值与reducetask的数量取余。余几,这个数据就放在余数编 号的partition中。
Split的逻辑切分
获取到读取到的数据,对数据进行逻辑切分,切分的大小是128M. 这里的128 与HDFS数据块的128没有任何关系
HDFS 128 是存储层面的数据切分 split128 是计算层面的128,只不过数据恰好相等。 两个128相同的原因是,一个集成程序能够正好计算一个数据块。
**Map的输出到内存 **
Map的输出先写入环形缓冲区(默认大小100M-可以认为调整)(可以再输出的同时写入数据),当缓冲区内的数据 达到阈值(默认0.8-可以人为调整)时,对数据进行flash。
flash 出去的数据的数量达到一定量(默认4个)时,进行数据的合并。
**Reduce数据读取 **
Reduce 主动发出拷贝进程(默认5个copy进程)到Map端获取数据。 获取到数据后,将数据写入内存,当数据达到阈值,将数据flash出去。 当flash出去文件达到一定的量时,进行数据的合并。最终将数据发送给reduce
**Map到reduce内存角度宏观流程 **
在这里插入图片描述
**Map到reduce处理流程角度宏观步骤 **
在这里插入图片描述
**如何能够让Map执行效率最高 **
尽量减少环形缓冲区flush的次数(减少IO 的使用)
1、调大环形缓冲区的大小,将100M调更大。
2、调大环形缓冲区阈值大的大小。 3、对Map输出的数据进行压缩。(数据在压缩和解压的过程中会消耗CPU)
**如何能够让Reduce执行效率最高 **
尽量将所有的数据写入内存,在内存中进行计算。
集群调优核心思路
在网络带宽、磁盘IO是瓶颈的前提下 能不使用io 和网络,就不使用。在必须使用的情况下,能少用IO 网络就少用,
所有的能够减少网络开销的、减少IO使用的可选项,都可以作为集群调优的可选项。(软件层面(操作系统----集群 层面),硬件层面,网络层面)
Hadoop支持的压缩算法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
**Map端join **
在Map端如何将多个文件Join

在一个文件比较大,一个文件比较小的前提下
可以将小的文件加载到程序中,让多个程序(相同的程序)同时拥有这个销量的数据,在公这个小数据与大量的数 据进行关联或匹配

小量数据加载到程序,需要组装成Map<K,V> key 就是唯一的标识,value就是对应的数据
大量数据在获得到数据后,根据数据内的关联字段,到Map中get.最终将两个数据进行拼接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值