赞
踩
是Hadoop生态的资源管理系统。YARN的职责主要是资源管理和Job调度管理。
yarn的主要成员有:ResouceManager、NodeManager、ApplicationMaster、Container。
1.ResouceManager职责: 1)处理客户端请求 2)启动或监控ApplicationMaster 3)监控nodemanager 4)资源分配与调度 2.Nodemanager职责: 1)管理单个节点上的资源 2)处理来自RM的命令 3)处理来自AM的命令 4)监控Container资源情况,跟踪节点健康状态 3.ApplicationMaster 1)负责数据的切分(split) 2)为程序申请资源并分配给内部任务 3)负责Task(MapTask和ReduceTask)的启动和监控 4.Container 1)提供资源 2)相当于Yarn中的资源容器,封装了多维度资源(如cpu、内存、网络以及环境变量,启动命令等任务运行的相关信息)
简单了解了Yarn之后,需要结合Mapreduce去理解
基于HDFS,Yarn的分布式并行计算框架,负责海量数据的计算。Mapreduce是Hadoop生态里默认计算引擎
理解Mapreduce需要先认识以下内容:
●Mapreduce的工作原理
●Mapreduce的suffle过程
因为Mapreduce是基于HDFS和Yarn的,所以Mapreduce的工作原理就是基于Yarn的Job任务提交流程。
生活化一点理解就像飞机执行任务,RM就像是航空公司各个部门的总负责人,每当需要派遣飞机执行任务,RM就将任务通知给各个地区的负责人NM,各地区负责人收到任务请求就会根据任务内容向总负责人申请飞机数量(飞机就相当于资源容器Container)并选择驾驶飞机的机长(MRApplicationMaster)去执行任务。
具体流程如下: 1)客户端向RM请求运行一个MR程序 2)RM返回一个hdfs地址,告诉客户端将程序运行相关的资源文件上传到指定的hdfs地址 3)客户端提交MR程序运行需要的资源文件(包括程序的jar包,配置文件,分片信息等)到hdfs上 4)程序相关信息提交完成后,客户端通过调用RM的submitApplication()方法提交作业 5)RM将MR任务放置调度队列,根据当前Yarn的调度模式(FIFO,Fair,Capcity)调度任务,默认策略为FIFO 6)NM会从队列中获取MR任务,并创建container容器,容器包含了cpu、内存、网络等资源。 7)NM启动MRAppMaster,根据需要运行多少个mapTask任务和多少个reduceTask任务向RM请求资源 8)RM分配相应数量的容器,并告知MRAppmaster容器的位置 9)MRAppmaster负责mapTask任务和reduceTask任务的启动和监控,先启动mapTask任务,mapTask从HDFS获取分片数据执行suffle过程(map端逻辑处理) 10)当所有mapTask任务完成后才会申请运行reduceTask任务的资源并启动reduceTask任务,每个reduceTask任务会从所有mapTask任务中拉取属于自己分区的数据执行reduce逻辑,然后将结果数据保存到HDFS 11)当MR程序完成后,MRAppmaster会通知RM注销自己,回收资源
什么是suffle?
简单概括,suffle就是map分区排序溢写到reduce拉取数据的过程。
简单概括
map端:
1)环形缓冲区
2)分区排序
3)溢写
4)map端合并combiner(可选)
reduce端:
5)copy拷贝
6)排序合并
7)分组
MR具体suffle过程:
map端
1)mapTask经过map函数处理后,通过context的write方法将数据以K-V形式输出,写入环形缓冲区
2)数据写入环形缓冲区,缓冲区默认大小100M,达到大小的80%将数据溢写磁盘,剩下20%继续同步写入缓冲区,等待下一次的溢写。溢写之前会对数据进行一次分区(默认HashPartition分区)和一次排序(默认按key的快排)
3)溢写磁盘后,会形成多个临时的小文件。
4)map端合并(combiner可选)。将每个mapTask任务输出结果形成的多个临时小文件的各个分区合并在一起,如0区和0区合并成一个0区,然后对每个mapTask的分区进行局部的归并排序。
reduce端
5)reduceTask从各个mapTask的输出结果中拷贝对应自己分区partition的数据到reduce端的内存缓冲区(和map端的环形缓冲区不一样,这里的内存指的是JVM的堆内存,专门提供给suffle计算的内存)
6)reduceTask再从内存里拉取属于自己分区的数据,并对所有reduceTask的分区进行全局的归并排序
7)按key相同的数据分为一组,每个reduceTask形成一个最终文件,包含key和key对应的value迭代器
8)将每个reduceTask的最终文件发送给reduce函数进行逻辑处理,最后输出结果保存到HDFS
补充:
1)mapTask的数量由split切片决定:
文件大小小于128M(默认块大小),有多少个文件就有多少个mapTask
文件大小大于128M,根据切分规则,有多少个切分就有多少个mapTask
2)写入环形缓冲区的意义:减少磁盘IO对性能的影响
3)溢写磁盘的路径默认为本地磁盘,file://${hadoop.tmp.dir}/tmp/dfs,通过配置文件hdfs-site.xml配置,可以修改为落地到HDFS,但是建议存到本地磁盘,因为mapTask任务的输出结果,即中间结果是临时保存在磁盘上的,当MR程序完成后,中间结果就可以删除,所有没有必要浪费HDFS集群空间,而且保存到本地磁盘的速度要比存到HDFS快
4)reduceTask的数量由用户自定义设置
5)reduceTask输出结果是最终的结果,所有需要保存到可靠的HDFS上,保证数据的安全。mapTask输出的结果是中间结果,MR程序跑完后,中间结果可删除,相当于临时存储,所以没必要浪费可靠的HDFS集群空间
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。