1. YARN架构
ResourceManager:
ApplicationManager:应用程序管理器
Scheduler:调度器
NodeManager:
Container:YARN中的资源抽象,CPU,内存,网络,磁盘等资源的,ps是没有Container的进程的
容器YARN的资源的抽象概念,封装了某个节点的多维度资源(CPU,Memory)
调优点:CPU Vcore Memory Container封装了CPU和Memory,运行了MapTask或者是ReduceTask的任务的
MapReduce架构设计 MapReduce提交到YARN工作流程 YARN架构设计 YARN工作流程
Client通过hadoop jar的方式提交jar包到ResourceManager中ApplicationsManager
ResourceManager=ApplicationsManager+ResourceScheduler
ApplicationsManager会去通信找一个空闲的NodeManager的,要求NodeManager去启动一个ApplicationMaster的,NM上的ApplicationMaster
启动成功后会汇报给ApplicationsManager的,并注册,使用户通过UI界面可以查看NM上的ApplicationMaster的进程情况
NM上的ApplicationMaster向ApplicationsManager注册成功之后,NM上的ApplicationMaster向ResourceScheduler申请并领取资源
(NodeManager是实时地报告资源情况给ResourceScheduler的,RPC心跳报告的,ResourceManager就通过一套的算法进行计算额,哪些机器上 有空闲的资源可以利用的,给NM上的ApplicationMaster一套资源列表的,哪台机器上有哪些资源的,并与对应的机器进行通信的)
NM上的ApplicationMaster拿到了资源以后,会跟机器上的NodeManager进行通信的额,并告知要启动多少个容器,每个容器多少个cpu和内 存的,运行什么样的任务的
NM上的ApplicationMaster会与多个NodeManager通信的,NodeManager通信之后,就会启动相应的容器的,Container=CPU+Memory
Container为你的任务MapTask或者是ReduceTask提供了运行环境的,分布式的架构会分发jar包
NM上的ApplicationMaster会决定在NodeManager上分配多少的资源和启动什么样的任务的
不同的节点上的在MapTask和ReduceTask运行时,MapTask或ReduceTask都会通过RPC的协议来向NM上的ApplicationMaster汇报状态进度
当所有的Task运行完毕了,NM上的ApplicationMaster会告诉RM上的额ApplicationsManager进行注销自己并关闭自己
俩个阶段:
1.启动ApplicationMaster 启动完进程后会向RM进行注册
2.ApplicationMaster 申请资源 运行Task 监控Task状态 直到Task任务完成
mapred job -list / -kill-task yarn job -kill
hadoop jar /yarn jar 提交一个MapReduce作业
ResourceManager负责对各个NodeManager上的资源进行统一管理和调度的,将ApplicationManager分配空间的Container运行并监控其运行状态,对ApplicationMaster申请的资源请求分配相应的空闲Container.主要由俩个组件构成的,调度器和应用程序管理器
调度器Scheduler,调度器根据容量,队列等限制条件,如每个队列分配一定的资源,最多执行一定数量的作业等,将系统中的资源分配给各个正在运行的应用程序,调度器仅根据各个应用程序的资源需求进行资源分配的,而资源分配单位是Container,从而限定每个任务使用的资源量,Scheduler不负责监控或是跟踪应用程序的状态,也不负责任务因为各种原因而需要的重启(是由ApplicationMaster负责的),总之,调度器根据应用程序的资源要求,以及集群机器的资源情况,为应用程序分配封装在Container中的资源
调度器是可以插拔的,例如CapacityScheduler,FairScheduler
应用程序管理器ApplicationManager应用程序管理器负责整个系统中的所有应用程序, 包括应用程序提交,与调度器协商资源以启动ApplicationMaster,监控ApplicationMaster运行状态并在失败时候重新启动,跟踪分给的Container的进度的,状态也是其职责
NodeManager是每个节点上的资源和任务管理器,它会定时地向ResourceManager汇报本节点上的资源使用情况和各个Container的运行状态,同时会接收并处理来自ApplicationMaster的Container启动和停止等请求
ApplicationMaster用户提交的应用程序均包含一个ApplicationMaster的,负责应用程序的监控,跟踪应用执行状态,重启失败任务等,ApplicationMaster是应用框架,它负责向ResourceManager协调资源,并且与NodeManager协同工作完成Task的执行和监控,MapReduce就是原生支持的一个框架,可以在Yarn上运行MapReduce作业的,有很多分布式应用都开发了对应的应用程序框架,用于在Yarn上运行任务的,例如Spark,Storm等等,如果需要的话,我们也可以自己写一个符合规范的Yarn Application
Container是Yarn中的资源抽象的额,它封装了某个节点上的多维度资源,如内存,CPU,磁盘,网络等,当ApplicationMaster向ResourceManager中申请资源时候,ResourceManager为ApplicationMaster返回的资源便是用Container表示的,Yarn会为每个任务分配一个Container且该任务只能使用该Container中描述的资源. 在Spark中的Container可以设置参数来分配多个Task任务的额,默认是一个任务 Task
yarn application -list/kill
通过shell的脚本去管理集群中的作业情况的额,
查看yarn上的日志命令
yarn logs -applicationId
yarn的资源管理和调度:
一个NodeManager分配了一个或多个的container容器的额,container容器中包含了cpu和memory的,
在yarn中资源管理是由ResourceManager和NodeManager共同管理的,ResourceManager的调度器是负责资源的分配的 ,而NodeManager
是负责资源的供给和隔离的额,
ResourceManager将某个NodeManager上的资源分配给任务,这就是所谓的资源调度的额,NodeManager需要按照要求为任务提供相应的 资源,甚至保证这些资源应具有独占性的,为任务运行提供基础的保证的,这就是所谓的资源隔离的,
Memory资源的调度和隔离:(大数据中关于yarn的资源调优的参数)
YARN允许用户配置每个节点上的可用的物理内存资源,注意这里的可用是因为每一个节点上的内存会被若干个服务共享的,比如一部分 给YARN,一部分给HDFS,一部分给HBASE等等,YARN配置只是自己可以使用的,配置参数如下的:
(1)yarn.nodemanager.resource.memory-mb:表示节点上YARN可使用的物理内存总量的额,默认是8192MB,注意如果你的节点内存资源 不够8GB的,则需要减小这个值的额,而YRAN不会智能的探测到节点上的物理内存总量.
(2)yarn.nodemanager.vmem-pmem-ration:任务每使用1MB物理内存的,最多可使用虚拟内存量,默认是2.1的
(3)yarn.nodemanager.pmem-check-enabled:是否启动一个线程检查每个任务正在使用的物理内存量的,如果任务超出分配值,则直接将 其杀掉的,默认是true的,
(4)yarn.nodemanager.vmem-check-enabled:是否启动一个线程检查每个任务正使用的虚拟内存量的,如果任务超出分配值,则直接将其 杀掉的,默认是true的
(5)yarn.scheduler.minimum-allocation-mb:单个任务可申请的最少内存量,默认是1024MB的,如果一个任务申请的物理内存量少于该值, 则该对应的值改为这个数值的额,
(6) yarn.scheduler.maximum-allocation-mb:单个任务可申请的最多物理内存量,默认是8192MB的,
yarn.scheduler.increment-allocatio-mb=512m
yarn.nodemanager.pmem-check-enabled=true物理内存检查 ==>kill container
yarn.nodemanager.vmem-check-enabled=true虚拟内存
yarn.nodemanager.vmem-pmem-ration=2.1
调优的点:
yarn.nodemanager.resource.memory-mb=8G调大
yarn.scheduler.maximum-allocation-mb=4G调大的
vcpu虚拟的cpu个数的
vcpu=2*物理核数
yarn.nodemanager.resource.cpu-vcores=8
yarn.scheduler.minimum-allocation-vcores=1
yarn.scheduler.maximum-allocation-vcores=8
yarn.scheduler.increment-allocation-vcores=1
在yarn中有三种调度器:FIFO Scheduler ,Capacity Scheduler , FairScheduler
作业:YARN架构设计
YARN资源调优参数
阅读(224) | 评论(0) | 转发(0) |