<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Yarn on LeoChu Space</title>
    <link>https://leochu.work/blog/tags/yarn/</link>
    <description>Recent content in Yarn on LeoChu Space</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sun, 28 May 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://leochu.work/blog/tags/yarn/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>yarn队列设置</title>
      <link>https://leochu.work/blog/tech/bigdata/yarn%E9%98%9F%E5%88%97%E8%AE%BE%E7%BD%AE/</link>
      <pubDate>Sun, 28 May 2023 00:00:00 +0000</pubDate>
      <guid>https://leochu.work/blog/tech/bigdata/yarn%E9%98%9F%E5%88%97%E8%AE%BE%E7%BD%AE/</guid>
      <description>&lt;p&gt;在大数据平台运维中，会经常遇到&lt;strong&gt;集群资源争抢的问题&lt;/strong&gt;。因为在公司内部，Hadoop Yarn 集群一般会被多个业务、多个用户同时使用，共享 Yarn 资源。此时，如果不对集群资源做规划和管理的话，那么就会出现 Yarn 的资源被某一个用户提交的 Application（App）占满，而其他用户只能等待；或者也可能会出现集群还有很多剩余资源，但 App 就是无法使用的情况。&lt;/p&gt;
&lt;p&gt;如何解决这个问题呢？此时就需要用到 Hadoop 中提供的&lt;strong&gt;资源调度器&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id=&#34;yarn-多用户资源管理策略&#34;&gt;&lt;strong&gt;Yarn 多用户资源管理策略&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Yarn 提供了可插拔的资源调度算法，用于解决 App 之间资源竞争的问题。在 Yarn 中有三种资源调度器可供选择，即 FIFO Scheduler、Capacity Scheduler、Fair Scheduler，目前使用比较多的是 Fair Scheduler 和 Capacity Scheduler。下面对这三种资源调度器分别进行介绍。&lt;/p&gt;
&lt;h4 id=&#34;1-fifo-scheduler&#34;&gt;&lt;strong&gt;1. FIFO Scheduler&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;在 Hadoop 1.x 系列版本中，默认使用的调度器是 FIFO，它采用队列方式将每个任务按照时间先后顺序进行服务。比如排在最前面的任务需要若干 Map Task 和 Reduce Task，当发现有空闲的服务器节点时就分配给这个任务，直到任务执行完毕。&lt;/p&gt;
&lt;h4 id=&#34;2-capacity-scheduler&#34;&gt;&lt;strong&gt;2. Capacity Scheduler&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;在 Hadoop 2.x/3.x 系列版本中，默认使用的调度器是 Capacity Scheduler（容量调度器），这是一种&lt;strong&gt;多用户、多队列&lt;/strong&gt;的资源调度器。每个队列可以配置资源量，可限制每个用户、每个队列的并发运行作业量，也可限制每个作业使用的内存量；每个用户的作业有优先级，在单个队列中，作业按照先来先服务（实际上是先按照优先级，优先级相同的再按照作业提交时间）的原则进行调度。&lt;/p&gt;
&lt;p&gt;容量资源调度器，支持多队列，&lt;strong&gt;但默认情况下只有 root.default 这一个队列&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;当不同用户提交任务时，任务都会在这个队列里按照先进先出策略执行调度，很明显，单个队列会大大降低多用户的资源使用率。&lt;/p&gt;
&lt;p&gt;因此，要使用容量资源调度，一定要配置多个队列，每个队列可配置一定比率的资源量（CPU、内存）；同时为了防止同一个用户的任务独占队列的所有资源，调度器会对同一个用户提交的任务所占资源量进行限定。&lt;/p&gt;
&lt;p&gt;举个简单的例子，下图是容量调度器中配置好的一个队列树：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;队列树&#34; loading=&#34;lazy&#34; src=&#34;https://cdn.nlark.com/yuque/0/2022/png/21887514/1646927210814-732f7f8b-7cb1-4dc5-b649-f542a504f26b.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;上图通过队列树方式对 Yarn 集群资源做了一个划分，可以看到，在 root 队列下面定义了两个子队列 dev 和 test，分别占 30% 和 70% 的 Yarn 集群资源；而 dev 队列又被分成了 dev1 和 dev2 两个子队列，分别占用 dev 队列 30% 中的 40% 和 60% 的 Yarn 集群资源。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
