第三部份 Hadoop3.x之MapReduce
一、MapReduce概述
1.1 概念
MapReduce是一个分布式运算程序的编程框架
1.2 优缺点
- 优点
- 易于编程
只关心业务逻辑,实现框架接口。 - 高扩展
动态增加服务器 - 高空错
- 海量计算
- 缺点
- 不擅长实时计算 (Mysql)
- 不擅长流式计算 (Sparkstreaming flink)
- 不擅长DAG有向无环图计算(迭代) (Spark)
二、Hadoop序列化
- 序列化和反序列化
将内存中的信息固定下来以传输并加载到其它服务器内存中。
三、MapReduce框架原理
总流程
Input——InputFormat——Mapper——Shuffle——Reducer——OutputFormat——Output
- Map阶段
将计算任务下发给各个节点 - Reduce阶段
将各个节点计算的结果汇总
3.1 InputFormat数据输入
- 切片与MapTask并行度决定机制
- Job人Map阶段并行度由客户端在提交Job时的切片数决定
- 每一个Split切片分配一个MapTask并行实例处理
- 默认切片大小=Block大小
- 切片以文件为单位执行
- Format数据输入
3.2 MapReduce工作流程
3.3 Shuffle机制
- 分区
- 排序
- Combiner归并(可选)
3.4 OutputFormat数据输出
3.5 MapReduce工作机制
-
MapTask工作机制
五阶段:
Read——Map——Collect——溢写——Merge -
ReduceTask工作机制
三阶段:
Copy——Sort——Reduce
3.6 数据清洗ETL
四、Hadoop数据压缩
方法 | 压缩率 | 压缩速度 | 切片 |
---|---|---|---|
Gzip | 高 | 一般 | 不支持 |
Bzip2 | 最高 | 慢 | 支持 |
Lzo | 一般 | 快 | 支持 |
Snappy | 一般 | 最快 | 不支持 |
- Mapper输入前
- 数据量<块大小,不需考虑切片,重点考虑速度
优先Snappy>LZO - 数据量较大,考虑支持切片的
LZO
- Mapper输出
- 无需考虑切片,优先考虑速度
Snappy>LZO
- Reducer输出
跟据用途
- 存储 主要考虑压缩率
Bzip2>Gzip - 用于计算或使用
同Mapper输入