1.MapReduce整体概览
2.MapReduce概述
- 定义:分布式运算程序的编程框架,是基于hadoop的数据分析和应用的核心框架。包括自己处理业务的相关代码+自身的默认代码
- 优点:易于编程 :用户只关心业务逻辑,实现框架的接口;良好的扩展性:可以动态增加服务器;高容错性:将任务转给其他节点;适合海量数据计算。
- 缺点:不擅长实时计算;不擅长流式计算;不擅长DAG有向无环图计算。
数据计算基于磁盘,效率较低,Spark计算基于内存
3.核心编程思想
将任务分布式送给不同的节点,最终conclude起来
- map:map task完全并行运行,互不相干
- reduce阶段的并发reduce task:也是互不相干,依赖于上一个阶段所有的maptask实例的输出
- 只能包含一个map和一个reduce阶段,如果特别复杂,那么只能多个MapReduce程序串行运行
4.MapReduce进程
- MrAppMaster:整个程序的过程调度及状态协调
- MapTask:map阶段的数据处理流程
- ReduceTask:负责reduce阶段数据处理流程
5.hadoop序列化
- 什么是序列化:把内存中的对象转换成字节序列以便存储到磁盘和网络运输
- 为什么要序列化: 对象只生存在内存里,断电就没有了;序列化可以存储"活的"对象,可以将"活的"对象发送到远程计算机.
6. 框架原理
InputFormat数据输入 :
1. MapTask并行度决定机制:
MapTask个数决定并行度。
数据块:block是HDFS物理上把数据分成一块一块(默认128M),数据块是HDFS存储数据单位。
数据切片:逻辑上对输入进行切分片,一个切片对应启动一个MapTask
**块大小和切片大小一致,本机处理数据不用跨节点 **
切片时不考虑数据集整体,而是逐个针对每一个文件单独切片
2.框架默认textinputformat切片机制:
key:整个文件的起始字节偏移量,longWritable类型
value:这行的内容,不包括任何终止符,text类型
对任务按文件规划切片(不管文件多小,都会是一个单独的切片,交给一个MapTask,如果有大量小文件,就会产生大量maptask)
3.CombineTextInputFormat切片机制
大量小文件的切片可以combine起来 ,同一个maptask做
- 判断虚拟内存存储的文件是否大于setMaxinputSlitSize,大于则单独形成一个切片
- 如果不大于则跟下一个虚拟存储文件进行合并,共同形成一个切片
MapReduce工作流程:
注:
- 将文件分块处理0-128 128-200 分成两个maptask进行处理
- Yarn ResourceManager:资源配置管理,计算maptask数量等
- maptask需要在内存缓冲区写数据&索引,溢出再将数据写入磁盘(这里用到80%后反向)
- 分区1/2确定该分区处理哪类数据哪些数据,并且在该分区内进行快排(区内有序)
- combiner:合并部分数据
- 将同一分区下的数据merge归并排序
注:
- 每个reduceTask负责一种partition
- 合并文件需要归并排序(区内有序,区间排序即可)
shuffle机制:
注:
- combiner: 为可选流程 可将<a,1>和<a,1>合并成<a,2>减少reduce负荷
- 内存缓冲区默认100M,但不能处理100M的meta数据,因为有index数据也需要进行写入
- 每次溢出后会将各分区汇总归并排序,压缩,写入磁盘
- **reduce:**对map来的数据再归并排序
排序:
MapTask和ReduceTask均会对数据**按照key进行排序 **
- MapTask:快排(缓冲区中的数据进行一次快速排序) + 归并(磁盘对所有文件进行归并排序)
- ReduceTask:归并(对内存和磁盘上所有的数据进行一次归并排序)
排序分类:
- 部分排序:输出的每个文件内部有序
- 全排序: 最终输出结果只有一个文件,且文件内部有序.(处理大型文件时效率极低)
- 二次排序:compareTo判断条件为两个即为二次排序
- 辅助排序
感谢观看,还需多多改进
版权归原作者 牛奶咖啡.854 所有, 如有侵权,请联系我们删除。