6.Hadoop_MapReduce计算框架介绍、架构原理、yarn资源管理
MapReduce介绍
MapReduce分为2部分:MapTask、ReduceTask
MapTask会把数据映射成一个k,v格式的中间数据集。每组相同key组成的数据(一般情况下)会并发调用reduce方法,方法内迭代这组数据进行计算(类似sql)
MapTask数量:对Block Spilt(切片),每一个Spilt(片)会分配一个MapTask
ReduceTask数量:一般情况下 相同的key产生的数据组数量和ReduceTask相同,当key数据组中数据量较少时可以使用一个ReduceTask进行处理(一个Reduce可以处理多组key),但是相同的一组key只能由一个Redurce处理。
执行流程
- MR框架执行时 会对Block进行Spilt(逻辑切片)操作。MR框架会根据每个Split片生成相对应的Map进行处理。
- MapTask产生的kv格式数据放入 Buffer In menmory 内存缓冲区中(当缓冲区超过128m会对磁盘进行数据益写,每次益写都会生成一个文件,文件内部有序文件与文件之间无序),在缓冲区中会对数据按照同一ReduceTask(partition同一分区)执行划分到一组中(通过reduce粗粒度的分区排序)
- 当数据处理完后会对益写的多个文件进行合并,合并后数据进行Shuffer二次分组(通过key进行细粒度的二次排序)
- Shuffer后的数据进行 combiner 压缩(根据reduce需要进行运算),实现数据传输最小化。
MR 1.x 架构说明
Client
- 以作业(Job)为单位、规划作业计算分布(数据读取位置、输出位置、spilt等)
- 提交作业资源到HDFS(以jar包的形式提交到hdfs中)最终提交作业到JobTracker
JobTracker
- 核心主节点
- 从hdfs中获取jar包任务,从NameNode获取Block信息,开启从节点TaskTracher,调度所有的task作业。
- 监控整个集群的资源负载,管理当前集群资源
TaskTracker
- JobTracker的从节点,自身节点资源管理
- 从提取HDFS中的jar包任务
- 向JobTracker心跳,实时汇报资源,获取Task,并开启MapTask或ReduceTask任务,向JobTracker申请执行任务
弊端:
- JobTracker:负载过重,单点故障
- 资源管理与计算调度强耦合(JobTracker即负责资源调度、任务管理、负责资源管理),其他计算框架需要重复实现资源管理(不能共享资源状况),不同框架对资源不能全局管理
MR 2.x 架构说明
MR 2.x 基于Yarn 进行资源管理
图中具体说明流程:
- Clinet 提交 Job 到 ResourceManager
- ResourceManager 找寻一个资源空闲的节点,创建(开辟)App Mstr (Application Master)角色进程
- App Mstr 负责任务调度(每个job都会产生一个App Mstr ),从HDFS中获取相关任务(客户端提交的jar包),计算设计该job所需的资源 向ResourceManager 确认资源可用性(是否被占用)
- App Mstr 得到 ResourceManager 资源信息确认后,找到相应节点创建Container(资源容器,默认大小1024M)
- 在Container创建相关Task作业(MapTask或ReduceTask)
- NodeManager 负责统计该节点中所有Container大小(节点信息)汇报给ResourceManager ,同时ResourceManager也负责节制Container大小,当Task超过Container默认大小时,会结束Task(Task执行失败)
Yarn 资源管理
YARN:Yet Another Resource Negotiator;
Hadoop 2.0新引入的资源管理系统,直接从MRv1演化而来的;
核心思想:将MR1.x中JobTracker的资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现
- ResourceManager:负责整个集群的资源管理和调度
- ApplicationMaster:负责应用程序相关的事务,比如任务调度、任务监控和容错等
YARN的引入,使得多个计算框架可运行在一个集群中,统一由yarn管理资源
- 每个应用程序对应一个ApplicationMaster
- 目前多个计算框架可以运行在YARN上,比如MapReduce、Spark、Storm等
架构说明
-
YARN( 解耦资源与计算 ):
ResourceManager:核心主节点,负责集群节点资源管理
NodeManager :负责管理当前节点资源
-
与RM发送心跳,汇报资源(通过Container 计算资源使用情况)
-
管理Container生命周期
-
计算框架中的角色都以Container表示(一切皆资源)
Container (节点NM,CPU,MEM,I/O大小,启动命令):Container可以理解为资源容器,存放所有需要资源的作业
-
默认NodeManager启动线程监控Container大小,超出申请资源额度,kill
-
支持Linux内核的Cgroup
-
-
MR:
ApplicationMaster:-
作业为单位,避免单点故障,负载到不同的节点
-
创建Task需要和RM申请资源(Container /MR 1024MB)
Task:MapTask 或 Reduce Task 创建在Container中
-
-
Client
RM-Client:请求资源创建AM
AM-Client:与AM交互