计算框架

指实现某项人物或某项工作从开始到结束得计算过程或流程

mapreduce计算框架

大数据第二周汇总

并行计算

指一个大的人物拆分成多个小人物,将多个小任务分发到多个节点上,每个节点同时执行计算

Hadoop为什么比传统技术方案快

1.分布式存储
2.分布式并行计算
3.节点横向扩展
4.移动程序到数据端
5.多个数据副本

mapreduce核心思想

分而治之,先分后和。将一个大的、复杂的工作或人物拆分成多个小的人物,并行处理,最终进行合并
mapreduce 由 map 和 reduce 组成
map:将数据进行拆分
reduce:对数据进行汇总
大数据第二周汇总

WordCount计算

计算每个单词出现的个数
原始数据zhangsan,lisi,wangwuzhaoliu,maqizhangsan,zhaoliu,wangwulisi,wangwu
期望的最终
zhangsan 2
lisi 2
wangwu 3
zhaoliu 2
maqi 1

偏移量

指的是每行行首字母移动到文档的最前面需要移动的字符。

编写Map代码

1、实例一个实体类,继承Mapper<输入放入key的类型,输入的value的类型,输出放入key的类型,输出的value的类型>
2 、重写map(LongWritable key, Text value, Context context)
3、实现自己业务逻辑的代码
将数据进行拆分,并进行逐一输出。
大数据第二周汇总

编写Reduce代码

1、实例一个实体类,继承Reducer<输入放入key的类型,输入的value的类型,输出放入key的类型,输出的value的类型>
2、重写reduce(Text key, Iterable values, Context context)
key: 去重后单词
values: 标记的1(好多个1,key出现几次就有几个1)
context:上下文对象
3、遍历values 进行汇总计算
大数据第二周汇总

编写Driver代码

1、实例一个class 继承Configured 实现Tool
2、重写run方法
3、在run方法中将自己编写的map和reduce添加到集群
4、在main方法中调用执行。
大数据第二周汇总

Map 的输出是(key,value) 的 list

Reduce的输入是key , value的list

MapReduce的核心思想

分而治之,先分后合
Map负责数据拆分
Reduce负责数据合并

Mapreduce的输入是一个目录,那么会将目录内的所有文件进行读取计算,若是一个文件,那么只计算该文件

Mapreduce的输出路径 绝对不能 已存在

MapReduce执行流程

1.InputFormat到HDFS上读取数据 将数据传给Split
2.Split对数据进行逻辑切分 将数据传给RR
3.RR(record reader) 将传入的数据转化成一行一行的数据,输出 偏移量 和 偏移量对应的数据, 将数据传给Map
4.Map根据实际业务需求实现自定义代码 将数据传给Shuffle的partition
5.partition根据一定的分区规则,将key/value 的list 进行分区,将数据传给shuffle的sort
6.sort对分区内的数据进行排序 将数据传给combiner
7.combiner对数据进行局部聚合 传给group
8.group将相同的key提取出来作为唯一的key 将key对应的value获取出来作为value的list 将数据传给reduce
9.reduce根据业务需求进行最终的汇总计算 将数据传给outputFormat
10.outputFormat将数据写入HDFS

combiner的作用

Map结束后,在Map端进行局部聚合。
作用:减少了网络传输次数,降低了网络开销

shuffle阶段的分区算法

对key进行哈希,获取到一个哈希值,用这个哈希值与reducetask的数量取余,余几,这个数据就放在余数编号的分区里。

Split对数据进行逻辑切分

hdfs数据块大小是128M split逻辑切分数据块大小是128M
HDFS 128M 是存储层面的概念,是切分数据的分界点
split 128M 是一个逻辑切分 两者没有关系

Map的输出到内存

Map的输出先写入环形缓冲区(默认大小为100M 可以人为调整)(可以在输出的同时写入数据),当缓冲区内的数据达到阈值(默认0.8 可人为调整)时,对数据进行flush,flush出去的数据达到一定量(默认4个)时,进行数据的合并。

大数据第二周汇总

Reduce数据读取

Reduce主动发出拷贝进程(默认为5个copy进程)到Map端获取数据
获取到数据后,将数据写入内存,当数据达到阈值时,将数据flush出去
当flush出去的文件打到一定量时,进行数据的合并,最终将数据发送给reduce

大数据第二周汇总

Map到reduce 内存角度宏观流程

大数据第二周汇总

Map到reduce 流程角度宏观步骤

大数据第二周汇总

shuffle阶段: 从map的输出到reduce的输入

流程角度

大数据第二周汇总

内存角度

大数据第二周汇总

如何能够让Map执行效率最高

尽量减少环形缓冲区flush的次数(减少IO的使用)
1.调大环形缓冲区的大小 ,将100M调大
2.调大环形缓冲区阈值的大小
3.对Map输出的数据进行压缩(数据在压缩和解压的过程中会消耗CPU)

如何能够让Reduce执行效率最高

尽量将所有的数据写入内存,在内存中进行计算

集群调优核心思路

在网络带宽、磁盘IO是瓶颈的前提下
能不使用IO和网络,就不使用。在必须使用的前提下,能少用IO 就少用
所有的能够减少网络开销的、减少IO使用的可选项,都可以作为集群调优的可选项。(软件层面(操作系统—集群层面) 、硬件层面、网络层面)

相关文章:

  • 2022-01-24
  • 2021-07-07
  • 2022-02-22
  • 2021-07-16
  • 2021-11-04
  • 2022-01-29
  • 2021-09-28
  • 2021-08-17
猜你喜欢
  • 2021-09-09
  • 2021-12-08
  • 2021-06-17
  • 2021-06-12
  • 2021-10-23
  • 2021-09-06
  • 2021-04-24
相关资源
相似解决方案