乐趣区

关于大数据:公共大数据集群中如何配置-YARN-的公平调度器和容量调度器

公共大数据集群中如何配置 YARN 的偏心调度器和容量调度器

1 YARN 资源管理框架与偏心 / 容量调度器

作为一款资源调度框架,Yarn 反对可插拔的调度器,常见的调度器有偏心调度器 fair scheduler 和容量调度器 capacity scheduler。常见的大数据发行版中,CDH 集成的是偏心调度器,CDP/HDP 集成的是容量调度器。

在理论应用过程中,为充分利用资源,个别多个大数据利用会专用一个大数据集群,此时集群管理员会将 YARN 资源划分到若干个队列中并为不同队列配置不同的资源额度,而后不同的业务依据其业务特色和重要性,提交作业到集群管理员规定的 YARN 队列中。

笔者遇到过不少因为 YARN 集群队列资源配置不当,造成业务作业获取不到资源而执行失败的状况,所以在此跟大家分享下集群管理员配置 YARN 调度器时的常见注意事项。

2 偏心 / 容量调度器配置准则概述

为保障各个业务的 SLA 并兼顾集群资源的高效应用,不论应用偏心调度器还是容量调度器,管理员在配置 YARN 调度器时,都须要遵循以下准则:

  • 管理员须要依据集群撑持的所有业务利用的重要性 / 资源需求量 / 运行工夫等多种特色,将 YARN 集群整体资源按比例划分到不同的队列中,并要求业务利用提交到对应的 YARN 队列中;
  • 为确保不同利用运行在对应的 YARN 队列中,管理员能够对立配置搁置规定基于作业提交用户的身份映射到对应队列中,也能够由业务利用显示指定队列(联合预先的审计 audit 确保队列应用正确);
  • 为不同队列指定资源配额时,偏心调度器通过指定权重 weight 来指定资源配合(YARN 会依据不同不同队列的 weight 主动计算出队列的资源配额);而容量调度器能够间接指定资源配额;
  • 队列的资源配额是动态的软限度,是长期来看各个队列可能取得的资源比;
  • 为了更高效地应用集群资源,管理员还能够指定队列的最小和最大资源,两者都是硬限度,其中最小资源数是为了确保本业务的 SLA,而最大资源数是为了不影响其它业务;
  • 为避免同一个队列下同时提交大量作业时互相争抢资源都得不到足够的资源,能够通过参数管制队列中作业的最大并发数;
  • 为避免同一个队列下所有 application master 占据大量资源而没有足够的资源分配给 executor 来执行工作,能够通过参数限度 am 的资源比;
  • 还能够配置 preemption 抢占策略,以容许某个队列在其理论取得的资源没有达到其资源配额时,抢占其它队列的超过其资源配额的资源(可能会 kill 该队列下的 container 容器);

有些大数据集群的某些 YARN 队列具备显著的潮汐特色,即这些队列每天大部分时候都是闲暇的,但在特定的时间段内,YARN 客户端会在短时间内提交大量作业申请大量容器资源,此时思考到 YARN 队列的冷启动问题和 YARN 高并发下的性能问题,对于偏心调度器,集群管理员能够调整以下参数,确保 YARN 队列能及时取得足够的资源:

  • 为进步 YARN 在高并发下响应客户端申请并分配资源容器的响应速度,能够调整以下参数,该调整须要重启 YARN 集群:

    • yarn.scheduler.fair.assignmultiple (默认 false,能够调整为 true);
    • yarn.scheduler.fair.dynamic.max.assign (默认 true,不必调整);
    • yarn.scheduler.fair.max.assign (默认 -1,不必调整);
    • yarn.scheduler.fair.update-interval-ms(默认 500ms,不必调整)
  • 为应答队列冷启动问题,能够为相应的 YARN 队列配置较高的权重,较高的权重能够放慢队列运行作业时从 0 到取得足够资源的工夫(该调整是动静调整,不须要重启集群);

    3 如何排查调度器资源配置引起的业务问题

    当业务作业因为调度器资源配置不当而运行失败时,个别须要查看以下信息以剖析问题:

  • 查看作业报错信息,比方能够查看 rm web ui 中该作业的 Diagnostics 信息,Hive 作业的话须要查看 hs2 日志,还须要查看作业的日志(开启了日志聚合的话,能够应用命令 yarn logs -applicationId xxx);
  • 查看 YARN 队列的动态配置信息,比方通过 CDH 的动静资源池页面或 CDP 的 Yarn Queue manager UI 页面;
  • 查看作业执行期间 YARN 队列的动静状态,比方查看 yarn web ui 的调度器页面;
  • 偏心调度器下,某队列在 YARN WEBUI 的调度器页面截图如下:

    • 页面中显示的 Steady Fair Share 是动态指标,其实质就是调度器依据用户配置的权重 weight 计算出来的资源配额;
    • 页面中显示的 Instantaneous Fair Share 是动静指标,是由调度器依据用户配置的权重和以后集群所有队列作业负载动静计算得出的动静指标;
    • 页面中显示的 AM Max Resources,其计算逻辑如下: AM Max Resources = Instantaneous Fair Share * maxAMShare;
    • maxAMShare, 默认值是 50%;
  • 一般而言,YARN 队列资源有余的问题比拟容易发现,然而 AM 资源比例超限,最大工作数超限等问题,则须要仔细察看;
  • 某案例中,因为 AM 资源超限导致 hive on spark 工作无奈申请到资源启动 spark driver 而运行失败,此时 hs2 中相干日志如下:

    // 作业失败相干日志:failed to create spark client for spark session xxx xx:java.util.concurrent.TimeoutException: client xx timed out waiting for connection from the remote spark driver;// 资源超限相干日志:org.apache.hive.spark.client.sparkClientImpl: [spark-submit-stderr-redir-HiveServer2-Backgroud-pool: Thread-xxxxx]: diagnostics: xxx application is added to the scheduler and is not yet activated. (Resource request: <memory:3584,vcores:1> exceeds maximum am resource allowed).
  • 某案例中,因为 AM 资源超限导致新作业无奈申请到资源启动 application master 而运行失败,此时容量调度器下,yarn web ui 中该队列相干截图如下:

4 偏心调度器相干重要参数

在容量调度器下,具体的资源管控参数,重要的有以下这些:

- Min Resources: 队列最小资源数;- Max Resources:队列最大资源数;- maxRunningApps: 队列内最大可运行作业书;- maxAMShare: am 资源比,默认 50%;
- weigh: 队列权重,调度器会基于所有队列的权重计算每个队列的 fair share 资源配额;- schedulingPolicy: 可选 fifo/fair/drf;
## 更多细节,请参考官网文档
- https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/FairScheduler.html
  • CDH 中偏心调度器相干参数的配置页面如下:

    5 容量调度器相干重要参数

    在容量调度器下,具体的资源管控参数,重要的有以下这些:

  • yarn.scheduler.capacity.<queue-path>.capacity/yarn.scheduler.capacity.<queue-path>.maximum-capacity
  • yarn.scheduler.capacity.<queue-path>.maximum-allocation-mb/yarn.scheduler.capacity.<queue-path>.maximum-allocation-vcores
  • yarn.scheduler.capacity.<queue-path>.user-limit-factor

    am 资源限度相干参数

  • yarn.scheduler.capacity.maximum-am-resource-percent/yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent

    作业并行度相干参数

  • yarn.scheduler.capacity.maximum-applications/yarn.scheduler.capacity.<queue-path>.maximum-applications
  • yarn.scheduler.capacity.max-parallel-apps/yarn.scheduler.capacity.<queue-path>.max-parallel-apps
  • yarn.scheduler.capacity.user.max-parallel-apps/yarn.scheduler.capacity.user.<username>.max-parallel-apps

    更多细节,请参考官网文档

  • https://hadoop.apache.org/doc…

退出移动版