Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2495
  • 博文数量: 1
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2017-09-19 11:34
文章分类

全部博文(1)

文章存档

2017年(1)

我的朋友

分类: 大数据

2017-10-16 19:51:09

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) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~