YARN基础

Posted 杀智勇双全杀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YARN基础相关的知识,希望对你有一定的参考价值。

YARN概述

YARN定义

YARN是一个分布式的资源管理和任务调度的框架。

YARN本质

将多台的机器CPU和内存从逻辑上合并为一个整体,对外提供统一的计算服务。

分布式计算 = 分布式程序 + 分布式运行环境。
分布式程序:MapReduce。
分布式运行环境:YARN。

YARN功能

提供分布式运行资源环境。

YARN应用场景

实现分布式计算,将分布式程序提交到分布式资源容器中运行:
MapReduce
Tez
Spark
……

YARN集群架构

分布式主从架构。

ResourceManager

主:管理节点。

管理从节点的状态:心跳机制。
管理资源管理和任务调度
资源管理:每个Task能用多少资源
任务调度:多个程序谁先运行谁后运行
接受客户端的请求。

NodeManager

从:计算节点。

接受主节点的任务分配。
使用自己所在节点的CPU和内存实现Task的运行。

YARN运行MapReduce流程

客户端提交运行一个MapReduce的程序给YARN,YARN会检查请求是否合法。

如果合法,RM会随机选择一台NodeManager启动这个程序的管理者:AppMaster(AppMaster每一个程序都有一个,负责这个程序的资源申请、Task的运行、Task的监控,运行的汇报)。

APPMaster会向ResourceManager申请指令和资源信息,获取如何运行这个程序的信息

ResourceManager根据Task的情况分配运行的节点以及资源的信息,以Container的形式返回(Contiainer:信息包,记录每个Task运行的节点、处理的数据、运行的逻辑、资源,也是MapTask和ReduceTask的父进程)

APPMaster将指令和container信息分发给对应的NodeManager,每个NodeManger根据指令和资源来启动对应的Task进程。

MapTask运行结束后,会通知AppMaster,APPMaster会通知ReduceTask到MapTask中拉取数据。

ReduceTask到每个MapTask中拉取数据,并执行处理,最后运行结束,将结果返回给APPMaster。

最终结果返回给客户端。

YARN的资源管理配置

配置属性含义
yarn.nodemanager.resource.memory-mb8192每台NodeManger能够使用的最大物理内存数
yarn.nodemanager.resource.cpu-vcores8每台NodeManger能够使用的最大物理CPU核数
yarn.scheduler.minimum-allocation-mb1024每个Task容器最少申请的内存
yarn.scheduler.maximum-allocation-mb8192每个Task容器最多申请的内存
yarn.scheduler.minimum-allocation-vcores1每个Task容器最少申请的CPU核数
yarn.scheduler.maximum-allocation-vcores8每个Task容器最多申请的CPU核数
yarn.nodemanager.vmem-pmem-ratio2.1虚拟内存率【磁盘空间】

常见问题

OOM:out of memory。

物理内存溢出:增加物理内存配置。
报错:physic memory 6GB of 5GB。

虚拟内存溢出:增加虚拟内存倍数。
报错:vistual memory 17 of 16.8。

堆内存溢出:配置允许每个Task使用的内存不足。
需要修改MapReduce配置。

YARN的任务调度机制

FIFO先进先出调度

Hadoop1.x版本使用。

单队列的,单个队列享有整个YARN的所有资源。队列内部是先进先出的,每个程序按照提交的顺序挨个执行。资源浪费,无法实现并发和并行。

Capacity容量调度

Apache版本的Hadoop默认的调度器。

多队列的,多个队列自定义分配所有资源。队列内部是先进先出的,每个程序按照提交的顺序挨个执行。能实现多队列的并行执行、用户使用队列机制的隔离,互不干扰,允许资源动态抢占。队列内部只能运行一个程序,不能实现并发

Fair公平调度

CDH版本的Hadoop默认的调度器。

多队列的,队列内部公平的分配资源,允许指定权重和优先级来指定资源的优先分配,动态资源抢占、权重分配。

调度配置

属性含义
yarn.resourcemanager.scheduler.classorg.apache.hadoop.
yarn.server.resourcemanager
.scheduler.fair.FairScheduler
指定调度器类型
yarn.scheduler.fair.allocation.fileetc/hadoop/fair-scheduler.xml指定公平调度的配置文件,配置文件中定义每个队列以及每个队列的资源
yarn.scheduler.fair.user-as-default-queuefalse没有指定队列名时,是否使用用户名作为队列名称
yarn.scheduler.fair.preemptionfalse是否允许资源抢占
yarn.scheduler.fair.preemption.cluster-utilization-threshold0.8最大抢占比例
yarn.scheduler.fair.sizebasedweighttrue是否启用权重
yarn.scheduler.fair.assignmultipletrue是否允许分配多个container
yarn.scheduler.fair.max.assign20如果允许,最多分配多少个
yarn.scheduler.fair.locality.threshold.node-1放弃等待优先本地计算的节点比例,-1表示都不放弃
yarn.scheduler.fair.locality.threshold.rack-1放弃等待优先机架计算的节点比例,-1表示都不放弃
yarn.scheduler.fair.allow-undeclared-poolstrue是否允许创建未定义的队列
yarn.scheduler.fair.update-interval-ms500表示重新计算公平调度的间隔,单位毫秒
<?xml version="1.0"?>
<allocations>
  <queue name="sample_queue">
    <minResources>10000 mb,0vcores</minResources>
    <maxResources>90000 mb,0vcores</maxResources>
    <maxRunningApps>50</maxRunningApps>
    <maxAMShare>0.1</maxAMShare>
    <weight>2.0</weight>
    <schedulingPolicy>fair</schedulingPolicy>
    <queue name="sample_sub_queue">
      <aclSubmitApps>charlie</aclSubmitApps>
      <minResources>5000 mb,0vcores</minResources>
    </queue>
  </queue>

  <queueMaxAMShareDefault>0.5</queueMaxAMShareDefault>

  <!-- Queue 'secondary_group_queue' is a parent queue and may have
       user queues under it -->
  <queue name="secondary_group_queue" type="parent">
  <weight>3.0</weight>
  </queue>
  
  <user name="sample_user">
    <maxRunningApps>30</maxRunningApps>
  </user>
  <userMaxAppsDefault>5</userMaxAppsDefault>
  
  <queuePlacementPolicy>
    <rule name="specified" />
    <rule name="primaryGroup" create="false" />
    <rule name="nestedUserQueue">
        <rule name="secondaryGroupExistingQueue" create="false" />
    </rule>
    <rule name="default" queue="sample_queue"/>
  </queuePlacementPolicy>
</allocations>

JobHistoryServer与日志聚集

JobHistoryServer

功能

这货是MapReduce的一个历史服务监控进程,记录在YARN中运行过的所有MapReduce的程序的信息。必须搭配日志聚集来使用。

配置

<property>
      <name>mapreduce.jobhistory.address</name>
      <value>node2:10020</value>
</property>
<property>
      <name>mapreduce.jobhistory.webapp.address</name>
      <value>node2:19888</value>
</property>

启动及管理

在node2:

mr-jobhistory-daemon.sh start historyserver

使用jps即可看到进程。或者浏览器访问node2:19888也可以看到。

日志聚集

功能

这货是YARN的一个功能,用于记录所有程序运行的信息,将所有的信息记录在HDFS中。

配置

<property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
</property>
<property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
</property>

以上是关于YARN基础的主要内容,如果未能解决你的问题,请参考以下文章

[vscode]--HTML代码片段(基础版,reactvuejquery)

YARN基础

大数据学习之MapReduce基础与Yarn集群安装09

YARN基础+Yarn组件+Yarn架构和工作流程+Yarn三种调度器+MR流程+zookeeper

YARN 基础

32.)Node.js基础学习-yarn基本使用