一、回顾
1、MR job提交到yarn的工作流程
面试题: Yarn的工作流程
MR 架构设计
2、容器 contariner
一定数量的cpu+memory
二、Yarn的架构设计(主从、资源和作业调度管理)
RM:(Applications Manager+Scheduler)
Applications Manager:应用程序管理器,应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动AM、监控AM运行状态并在失败时重新启动等,跟踪分给的Container的进度、状态也是其职责。
Scheduler:先进先出调度器,计算调度器,公平调度器。
调度器根据容量、队列等限制条件(如每个队列分配一定的资源,最多执行一定数量的作业等),将系统中的资源分配给各个正在运行的应用程序。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位是Container,从而限定每个任务使用的资源量。Shceduler不负责监控或者跟踪应用程序的状态,也不负责任务因为各种原因而需要的重启(由ApplicationMaster负责)。总之,调度器根据应用程序的资源要求,以及集群机器的资源情况,为应用程序分配封装在Container中的资源。
调度器是可插拔的,例如CapacityScheduler、FairScheduler。
NM:
NM是每个节点上的资源和任务管理器。它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;同时会接收并处理来自AM的Container启动/停止等请求。
APP MASTER:一个job只有一个,相当于主程序(spark driver)
用户提交的应用程序job均包含一个AM,负责应用的监控,跟踪应用执行状态,重启失败任务等。ApplicationMaster是应用框架,它负责向ResourceManager协调资源,并且NodeManager协同工作完成Task的执行和监控。MapReduce就是原生支持的一种框架,可以在YARN上运行Mapreduce作业。有很多分布式应用都开发了对应的应用程序框架,用于在YARN上运行任务,例如Spark,Storm等。如果需要,我们也可以自己写一个符合规范的YARN application。
Yarn平台一般运行job>=0
Contariner:运行在NM上。
是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container 表示的。 YARN会为每个任务分配一个Container且该任务只能使用该Container中描述的资源。
三、常用的命令
1、回顾wordcount的步骤
离开安全模式:
hdfs dfsadmin -safemode leave
删除已有的/wordcount目录下的所有文件:
hdfs dfs -rm -r /wordcount
重新创建:
hdfs dfs -mkdir -p /wordcount/input
将准备好的文件上传到/input:
hdfs dfs -put HBinz.log /wordcount/input
2、在这里我们尝试用yarn的命令来提交jar包到yarn,而不是通过hadoop命令
(1)yarn jar /opt/software/hadoop-2.8.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar wordcount /wordcount/input /wordcount/output1
(2)发现running错了,如何通过命令停止
yarn application -list
yarn application -kill application_1534945138947_0003
同时,执行的页面也会返回结果“job被kill掉”
3、常用命令
yarn application -list
yarn application -kill appId
yarn jar
4、回顾yarn MR2的工作流程
1:用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
2:ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
3:ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。
4:ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
5:一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。
6:NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
7:各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。
8:应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。
简而言之:
当用户向 YARN 中提交一个应用程序后, YARN 将分两个阶段运行该应用程序:
a. 第一个阶段是启动ApplicationMaster;
b. 第二个阶段是由ApplicationMaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。
5、Yarn调度器(先进先出、计算、公平)以后讲CDH会更加简单
先进先出调度器:FIFO
6、Yarn资源管理与调度、参数配置
在YARN中,资源管理由ResourceManager和NodeManager共同完成,其中 ResourceManager中的调度器负责资源的分配,而NodeManager则负责资源的供给和隔离。
ResourceManager将某个NodeManager上资源分配给任务(这就是所谓的 资 源调 度)后,NodeManager需按照要求为任务提供相应的资源,甚至保证这些资源应具有独占性,为任务运行提供基础的保证,这就是所谓的资源隔离。
7、Memory资源的调度和隔离
基于以上考虑,YARN允许用户配置每个节点上可用的物理内存资源,注意,这里是“可用的”,因为一个节点上的内存会被若干个服务共享,比如一部分给YARN,一部分给HDFS,一部分给HBase等,YARN配置的只是自己可以使用的,配置参数如下:
(1) yarn.nodemanager.resource.memory- - mb
表示该节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。
(2) yarn.nodemanager.vmem- - pmem- - ratio
任务每使用1MB物理内存,最多可使用虚拟内存量,默认是2:1。
(3) yarn.nodemanager.pmem- - check- - enabled
是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true。
(4) yarn.nodemanager.vmem- - check- - enabled
是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true。
(5) yarn.scheduler.minimum- - allocation- - mb
单个任务可申请的最少物理内存量,默认是1024(MB),如果一个任务申请的物理内存量少于该值,则该对应的值改为这个数。
(6) yarn.scheduler.maximum- - allocation- - mb
单个任务可申请的最多物理内存量,默认是8192(MB)。
8、CPU资源的调度和隔离
CPU的主要配置参数:
(1) yarn.nodemanager.resource.cpu- - vcores
表示该节点上YARN可使用的虚拟CPU个数,默认是4,注意,目前推荐将该值设值为与物理CPU核数数目相同。如果你的节点CPU核数不够4个,则需要调减小这个值,而YARN不会智能的探测节点的物理CPU总数。
(2 )yarn.scheduler.minimum- - allocation- - vcores
单个任务可申请的最小虚拟CPU个数,默认是1,如果一个任务申请的CPU个数少于该数,则该对应的值改为这个数。
(3 )yarn.scheduler.maximum- - allocation- - vcores
单个任务可申请的最多虚拟CPU个数,默认是32。
默认情况下,YARN是不会对CPU资源进行调度的,你需要配置相应的资源调度器。
9、 生产场景:
(1)计算及时性要求比较高: memory不够 快速出结果 cpu足够的
(2)反正:cpu不够
5分钟出1个job : job运行1分钟oom memory+2G 在计算只需1分钟,比如在第4分钟完成
CDH 动态资源池
生产场景总结:
memory不够 cpu够 : oom错误 作业停止(memory不够的话,会停止作业,进而增加memory,由于cpu足够,所以计算快)
memory够 cpu不够: 作业慢(由于memory够,因此会低cpu执行,所以会计算慢)
因为内存或者cpu不够修改过以上配置后,记得要重启yarn!!!
10、资源调度