YARN性能调优(Container调优项)

4,390 阅读3分钟

本篇文章仅适用于YARN群集,并描述了如何为您的群集调整和优化YARN。

如果你还尚未了解清晰YARN的执行原理请跳转至

YARN原理以及执行流程详解

hadoop的前世今生

Hadoop在ON YARN之前是如何完成作业调度的?

资源估算

  • 物理CPU数:虚拟CPU数系数比定为1:2
  • 预留2个Core、8G内存给系统
物理Core虚拟VCore内存
三台主机(3*8)24(2*24)48(3*32)96
预留三台主机(3*6)18(3*12)36(3*24)72G

正常情况下,需为系统预留20%左右的内存。视情况分配系统占用内存,如果你192GB的内存也给系统192GB*20%吗,这显然是不合理的。

YARN资源分配

我司生产目前配置在4.本人目前公司生产配置小节

1、假设只有DN NM节点

生产上部署一般遵循存储计算一体化,计算时发现本节点有数据不需要去其他节点拉取,节省网络I/O。(数据本地化)

1.1 如何确定DN&NM分配多少内存

在业务高峰期查看Linux中DN与NM的内存占用情况。本次实验我DN最高占用了800M,NM最高占用1.5G。所以:

  • DataNode分配1G,NodeManger分配2G
    • 3台DN:3 * 1G=3G
    • 3台NM:3 * 2G=6G
  • 剩余的72G-3-6=63G给Container容器使用

1.2 新集群的内存规划

(生产经验)初始每台DN为2G,NM为4G。如果觉得给多了自己慢慢减,集群庞大就加。

2、Container内存

官网YARN参数列表

NoteNameValue
所有容器的内存总和yarn.nodemanager.resource.memory-mb63G
每个容器最小多少yarn.scheduler.minimum-allocation-mb1G
每个容器最大多少yarn.scheduler.maximum-allocation-mb63G
  • 极限情况,一般不会出现
    • 每个容器1G,有63个Container
    • 一个容器63G,只有一个Container
  • 内存管理是动态的,容器如果1G不够,会自动扩大容器内存大小
    • 递增值可以自行配置,但不太需要去动

3、Container Vcore

NoteNameValue
物理Core跟虚拟Core转换比例yarn.nodemanager.resource.pcores-vcores-multiplier2
所有容器的Vcore之和yarn.nodemanager.resource.cpu-vcores36
每个容器最小多少yarn.scheduler.minimum-allocation-vcores1
每个容器最大多少yarn.scheduler.maximum-allocation-vcores36

4、本人目前公司生产配置

  • Cloudera公司推荐,一个container的vcore最好不要超过5
  • 假定我最多给8个容器,每个容器可用Vcore为4个,配置如下
NoteNameValue
物理Core跟虚拟Core转换比例yarn.nodemanager.resource.pcores-vcores-multiplier2
所有容器的内存总和yarn.nodemanager.resource.memory-mb63G
每个容器内存最小多少yarn.scheduler.minimum-allocation-mb1G
每个容器内存最大多少yarn.scheduler.maximum-allocation-mb63G/8G≈8G
所有容器的Vcore之和yarn.nodemanager.resource.cpu-vcores36
每个容器core最小多少yarn.scheduler.minimum-allocation-vcores1
每个容器core最大多少yarn.scheduler.maximum-allocation-vcores4~5
  • 但是spark计算时内存有些指标比较大,那么这个 yarn.scheduler.maximum-allocation-mb必然调大。这种理想化、完美化的设置必然被打破,到时以实际作业需求memory为主
  • 补充:以下参数你自己看着搞
NoteNameDefault Value
是否将对容器实施物理内存限制yarn.nodemanager.pmem-check-enabledtrue
是否将对容器实施虚拟内存限制yarn.nodemanager.vmem-check-enabledtrue
跟上面俩参数的比例有关,官网查去yarn.nodemanager.vmem-pmem-ratio2.1
用于确定是否应将逻辑处理器(例如超线程)视为核心的标志yarn.nodemanager.resource.count-logical-processors-as-coresfalse

5、调度器

待续。。选择适合你们公司场景的调度器可以大大提升作业的速度

  • FIFO调度器(默认)
  • 公平调度器(CDH默认调度器)
  • 容量调度器