问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

YARN 生产详解

发布网友 发布时间:2022-12-17 00:13

我来回答

1个回答

热心网友 时间:2023-09-12 06:13

前言:

上节课我们讲了 MR job的提交YARN的工作流程 与 YARN的架构,本次课程详细讲讲YARN,多多总结。

YARN(主从) 资源  + 作业调度管理

YARN:是一种新的 Hadoop资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

                 ResourceManager(RM):主要接收客户端任务请求,接收和监控NodeManager(NM)的资源情况汇报,负责资源的分配与调度,启动和监控ApplicationMaster(AM)。

               ApplicationManager(作业):应用程序管理,它是负责系统中所有的job,包括job的提交与调度器协商资源来启动ApplicationMaster(AM)和监控(AM)运行状态,并且失败的时候能够重新启动它,更新分配给一个新的Container容器的进度或者状态,除了资源它不管,它就负责job                                             

               Scheler(调度器):更具容量队列的*条件将我们系统中的资源分配给正在运用的一个应用程序先进先出调度器 :一个作业运行完了,另一个才能运行

yarn的内置调度器:

1.FIFO先进先出,一个的简单调度器,适合低负载集群。(适合任务数量不多的情况下使用)

2.Capacity调度器,给不同队列(即用户或用户组)分配一个预期最小容量,在每个队列内部用层次化的FIFO来调度多个应用程序。(适用于有很多小的任务跑,需要占很多队列,不使用队列,会造成资源的浪费)

3.Fair公平调度器,针对不同的应用(也可以为用户或用户组),每个应用属于一个队列,主旨是让每个应用分配的资源大体相当。(当然可以设置权重),若是只有一个应用,那集群所有资源都是他的。 适用情况:共享大集群、队列之间有较大差别。(生产使用)

capacity调度器的启用:

在ResourceManager节点上的yarn-site.xml设置

Property===>yarn.resourcemanager.scheler.class

Value=====>org.apache.hadoop.yarn.server.resourcemanager.scheler.capacity.CapacityScheler

capacity调度器的配置:

在目录$HADOOP_HOME/hadoop/etc/hadoop/capacity-scheler.xml

修改完成后,需要执行下面的命令:

$HADOOP_YARN_HOME/bin/yarn rmadmin -refreshQueues    使功能动态生效。

NodeManager:主要是节点上的资源和作业管理器,启动Container运行task计算,上报资源、container情况给RM和任务处理情况给AM,整个集群有多个。

ApplicationMaster: 它是负责我们作业的监控并跟踪应用执行状态来重启失败任务的,主要是单个Application(Job)的task管理和调度,向RM进行资源的申请,向NM发出launchContainer指令,接收NM的task处理状态信息。一个job只有一个主程序。                                     

Container: 是YARN中资源的抽象,它封装了某个节点上一定量的资源(CPU和内存两类资源)。

Memory:

yarn.nodemanager.resource.memory-mb:64*0.8G=50G  (如果内存是64G,Yarn只能用到内存的80%也就是50G)

yarn.scheler.minimum-allocation-mb: 1G

yarn.scheler.maximum-allocation-mb: 1G   50/1=50(并行度) 数量是多了,并行度大了  

一个作业200 MapTask 4轮才能结束,速度快了  作业可能挂了

yarn.scheler.maximum-allocation-mb: 16G (生产设16G)   50/16=3(并行度) 数量是少了,并行度小了  

一个作业200 MapTask 70轮才能结束,速度慢了  作业时间长 稳定不会挂

工作中一个job可以指定 yarn.scheler.maximum-allocation-mb的值,但一般不指定。

【若泽大数据实战】使用YARN跑一个jar包

先启动Yarn

进入hadoop的bin目录 在hdfs上创建一个新文件夹

创建一个test.log文件

将当前目录中的某个test.log文件复制到hdfs中(注意要确保当前目录中有该文件)

查看hdfs中是否有我们刚复制进去的文件

进入share的上层目录,提交单词统计任务,实验环境下我们的提交差不多在15秒左右

生产环境中,应该是30~50之间,调优可以压到10秒之内

登录网页查看相关信息:http://192.168.137.30:8088/cluste

Yarn的常用命令

客户端提交job给 Applications Manager 连接Node Manager去申请一个Container的容器,这个容器运行作业的App Mstr的主程序,启动后向App Manager进行注册,然后可以访问URL界面,然后App Mastr向 Resource Scheler申请资源,拿到一个资源的列表,和对应的NodeManager进行通信,去启动对应的Container容器,去运行 Rece Task 和 Map Task (两个先后运行顺序随机运行),它们是向App Mstr进行汇报它们的运行状态, 当所有作业运行完成后还需要向Applications Manager进行汇报并注销和关闭

yarn中,它按照实际资源需求为每个任务分配资源,比如一个任务需要1GB内存,1个CPU,则为其分配对应的资源,而资源是用container表示的,container是一个抽象概念,它实际上是一个JAVA对象,里面有资源描述(资源所在节点,资源优先级,资源量,比如CPU量,内存量等)。当一个applicationmaster向RM申请资源时,RM会以container的形式将资源发送给对应的applicationmaster,applicationmaster收到container后,与对应的nodemanager通信,告诉它我要利用这个container运行某个任务。

基于以上考虑,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.scheler.minimum- - allocation- - mb

单个任务可申请的最少物理内存量,默认是1024(MB),如果一个任务申请的物理内存量少于该值,则该对应的值改为这个数。

(6)yarn.scheler.maximum- - allocation- - mb

单个任务可申请的最多物理内存量,默认是8192(MB)。

默认情况下,YARN采用了线程监控的方法判断任务是否超量使用内存,一旦发现超量,则直接将其杀死。由于Cgroups对内存的控

制缺乏灵活性(即任务任何时刻不能超过内存上限,如果超过,则直接将其杀死或者报OOM),而Java进程在创建瞬间内存将翻

倍,之后骤降到正常值,这种情况下,采用线程监控的方式更加灵活(当发现进程树内存瞬间翻倍超过设定值时,可认为是正常

现象,不会将任务杀死),因此YARN未提供Cgroups内存隔离机制。

CPU资源的调度和隔离:

目前的CPU被划分成虚拟CPU(CPU virtual Core),这里的虚拟CPU是YARN自己引入的概念,

初衷是,考虑到不同节点的CPU性能可能不同,每个CPU具有的计算能力也是不一样的,比如某个物

理CPU的计算能力可能是另外一个物理CPU的2倍,这时候,你可以通过为第一个物理CPU多配置几个

虚拟CPU弥补这种差异。用户提交作业时,可以指定每个任务需要的虚拟CPU个数。在YARN中,CPU

相关配置参数如下:

(1) yarn.nodemanager.resource.cpu- - vcores

表示该节点上YARN可使用的虚拟CPU个数,默认是4,注意,目前推荐将该值设值为与物理CPU核数

数目相同。如果你的节点CPU核数不够8个,则需要调减小这个值,而YARN不会智能的探测节点的物

理CPU总数。

(2)  yarn.scheler.minimum- - allocation- - vcores

单个任务可申请的最小虚拟CPU个数,默认是1,如果一个任务申请的CPU个数少于该数,则该对应

的值改为这个数。

(3) yarn.scheler.maximum- - allocation- - vcores

单个任务可申请的最多虚拟CPU个数,默认是32。

默认情况下,YARN是不会对CPU资源进行调度的,你需要配置相应的资源调度器。

【若泽大数据】生产场景:

内存改完参数 Yarn是要重启的

1.计算及时性要求比较高:memory不够,cpu是足够的,作业肯定是要挂掉的,立即手工调整oom,设置大,快速出结果,

2.计算机及时性不高:memory够,cpu不够,计算慢,

需求5分钟出1个job:job运行1分钟的时候,oom了内存不够,shell脚本里面可以改参数,修改脚本内存就自动加,

生产:cpu物理和虚拟的比例是1:2的关系(默认), 有的生产会设置1:1
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何查被录取到的专业 怎样查被录取的专业 录取后怎样查询录取的专业 录取专业怎么查 已被录取怎么查专业 ghs网络语什么意思_ghs网络语意思出处含义介绍 纸箱企业管理软件 ghs什么意思网络(ghs什么意思网络用语) 《喜羊羊与灰太狼》大结局 0与任何数相加都得原数吗? 求fz和fsn里俩暗杀者资料 fgo幸运a+从者在哪 杭州中山中路380号到滨江浦沿怎么走 杭州新东方烹饪学校录取分数线 杭州380公交车是多长时间一俩车啊求解 临平大剧院380第几排 杭州明月桥路380号属于哪个街道? 杭州380路公交车红丰桥站在哪里 杭州380路多久一班 广州哪个球馆可以打初中生路人王? kpl招募路人王有时间要求吗 求鼬的头像吖.. 七日杀烧杯如何获得 烧杯app怎么玩 烧杯app使用攻略 安卓的java模拟器装完后搜索jar,又优化又加载的。然后打开jar 提示sd繁忙或不存在?怎么搞 求跪安卓jar模拟器,安卓jar模拟器,。下载,。。 新手入门单反相机正确的摄影拍摄姿势 深圳市药店能做智慧药店系统吗 云智慧药房如何销售药品 蓝卡智能药房的药品都是真的么? 江苏省省长许昆林的邮编 有高手知道怎样提取图章吗? React之卡片拖拽移动 问题整理 前端大屏幕项目(数据可视化)的一点思考 VIDEO显示层级高的解决方式及VIDEO的参数设置 特高压断路器的国家标准 gb 4141.22-1984 手轮是怎么一回事 制图中GB4457.1-84是什么意思? 替代gb/t4214-1984是什么标准 哪家单位于2022年入选中国 池州九朵莲是卖什么的 请问为什么不能申购300开头的股票? 上海科技大学是985还是211? 浙江中沪科技有限公司怎么样? 无锡市飞沪科技有限公司怎么样? 广东教育出版社_上海科学技术出版社 简称 科学出版社_广东教育出版社 简称 合肥泸科技卫校宿舍能不能手机充电呢 无锡市飞沪科技有限公司怎么样,待遇如何? 渔政88现改为海警什么编号