一、MapReduce概述
分而治之的思想,适用于大量复杂的任务处理场景。
map负责分:把复杂的任务分为若干个“简单任务”,任务之间没有依赖关系,可以并行运行; reduce负责合并:
mapReduce运行在yarn集群,是一个分布式运算程序的编程框架。
二、MapReduce的编程规范,八个步骤:
map阶段2个步骤:
- 设置InputFormat类,将数据切分为key-value(k1,v1)对,输入到第2步;
- 自定义Map逻辑,将第1步的结果转换成另外的key-value(k2,v2)对。 (MapTask来处理)
备注:
自定义的Map逻辑:需要继承Mapper类,重写map()方法;
shuffle阶段4个步骤:
- 对第2步输出的key-value进行分区;
- 对不同分区的数据按照key排序;
- (可选)规约,减少网络传输数据;
- 分组,相同key的value放入一个集合。
reduce阶段2个步骤:
- 对多个Map任务的结果进行排序以合并,自定义Reduce类,实现自己的逻辑,对key-value处理转为新的key-value(k3,v3); (ReduceTask处理)
- 设置OutputFormat处理并保存Reduce输出的key-value数据。
备注:
自定义的Reduce类:需要继承Reduce类,重写reduce()方法;
总结,需要我们自己做的具体操作:
1、实现MyMap类,重写map();
2、实现MyReduce类,重写reduce();
3、实现主类JobMain,把8个步骤串起来,提交给MapReduce执行。
三、MapReduce的运行模式
集群运行模式
本地运行模式
hadoop jar hadoop_hdfs_xxx.jar xxx.JobMain
四、MapReduce分区
通过我们指定分区,会将同一个分区的数据发送给同一个Reduce当中,即有共性的数据送到一起去处理。
自定义Partitioner(继承Partitioner类,重写getPartition()方法);
默认使用的分区方法是HashPartitioner,它也继承了Partitioner类,使用hash的方式,默认分区只有一个。
五、MapReduce的排序和序列化
需求可能需要排序处理数据
自定义类(继承writableComparable接口,实现排序方法compareTo()、序列化方法write()、反序列化方法readFields())
六、MapReduce的规约combiner
每个map(MapTask)可能产生大量本地输出,combiner的作用是对map端的输出先做一次合并,以减少在map和reduce节点之间的网络数据传输量。
1、combiner是MR程序中的一种组件;
2、combiner组件的父类就是Reducer;
3、combiner和reducer的区别在于运行位置;(在不同的节点上)
4、combiner的意义就是对每一个maptask的输出进行局部汇总,以减小网络传输量。
自定义一个Combiner类(继承Reduce类,重写reduce()方法)
七、MapReduce的运行机制
八、yarn概述
yarn是hadoop集群中的资源管理系统模块 可为各类计算框架提供资源的管理和调度
总结一句话就是说,yarn主要就是为了调度资源,管理任务等。
调度管理:1、计算资源管理(内存、cpu、网络IO、磁盘);2、任务内部的计算模型管理(AppMaster的任务精细化管理)。
九、yarn的主要组件
1、ResourceManager(RM):
- 负责处理客户端请求;
- 对各NM上的资源进行统一管理和调度;
- 给ApplicationMaster分配空闲的Container运行并监控其运行状态。
主要的两个组件:
- Scheduler调度器:根据容量、队列等限制条件,负责资源分配,分配单位是container
- Applications Manager应用程序管理器:负责整个系统中所有应用程序的管理
2、NodeManager(NM):
- 定时向RM汇报本届点上的资源使用情况、各container的运行状态;
- 接收并处理来自AM的container启动/停止等请求
3、ApplicationMaster(AM):
负责向RM协调资源,并与NM协同工作完成Task的执行和监控
- 用户提交一个任务,就会启动一个AM;
- 负责应用的监控,跟踪应用执行状态,重启失败任务等
4、Container:
十、yarn的架构和工作流程
主从架构
十一、yarn的调度器
- FIFO Scheduler(队列调度器)
- Capacity Scheduler(容量调度器)
- Fair Scheduler(公平调度器)
学习视频: 1-大数据导论_哔哩哔哩_bilibili