从EMR-3.49.0及之后版本,EMR-5.15.0及之后版本开始,EMR会根据集群初始化的机型和服务选择情况,在创建集群过程中动态调整组件的默认内存设置,而不是使用之前版本中的默认配置。本文为您介绍YARN组件堆内存大小配置以及YARN资源配置的使用。
集群初始化后,如果YARN组件所分配到的内存过小,首先考虑是否勾选了过多的服务。由于EMR管控服务会根据勾选的服务进行整体资源分配,因此,如果勾选的服务数量过多,可能会导致在分配逻辑下,分给YARN的内存资源相应减少。另外,还需考虑ECS节点组配置的规格是否过低,以致无法有效支撑当前安装的所有EMR服务组件所需的内存需求。
YARN组件的资源配置参数均可在集群创建后在EMR控制台上进行手动调整。
YARN组件堆内存大小配置
在EMR控制台YARN服务的配置页面,调整以下参数。
组件名 | 配置文件 | 配置项 | 生效范围 | 备注 |
ResourceManager | yarn-env.sh | YARN_RESOURCEMANAGER_HEAPSIZE | 集群 | 最小1024,如果小作业较多则需要继续调大该参数值,调整后需要重启ResourceManager组件生效。 |
NodeManager | yarn-env.sh | YARN_NODEMANAGER_HEAPSIZE | 集群 | 如果Shuffle Service使用Node Manager内存较多导致FULL GC,则需要继续调大该参数值,调整后需要重启NodeManager组件生效。 |
WebAppProxyServer | yarn-env.sh | YARN_PROXYSERVER_HEAPSIZE | 集群 | 调整参数值后需要重启WebAppProxyServer组件生效。 |
TimelineServer | yarn-env.sh | YARN_TIMELINESERVER_HEAPSIZE | 集群 | 调整参数值后需要重启TimelineServer组件生效。 |
TimelineServer | yarn-env.sh | YARN_TIMELINESERVER_OPTS中 | 集群 | TimelineServer直接内存最大限制,最小512m。调整参数值后需要重启TimelineServer组件生效。 |
MRHistoryServer | mapred-env.sh | HADOOP_JOB_HISTORYSERVER_HEAPSIZE | 集群 | 调整参数值后需要重启MRHistoryServer组件生效。 |
YARN使用集群资源配置
在EMR控制台YARN服务的配置页面,调整以下参数。
配置项 | 描述 | 配置文件 | 生效范围 | 备注 |
yarn.scheduler.maximum-allocation-mb | 调度器中单个容器最大可请求的内存资源数。 | yarn-site.xml | 集群 | 如果集群确实需要提交单个容器比较大的作业时需要提高避免调度器限制,过高的配置容易导致资源碎片。调整参数值后需要重启ResourceManager组件生效。 |
yarn.scheduler.minimum-allocation-mb | 调度器中单个容器最小可请求的内存资源数。 | yarn-site.xml | 集群 | 通常不需要调整,调整后需要重启ResourceManager组件生效。 |
yarn.scheduler.maximum-allocation-vcores | 调度器中单个容器最大可请求的虚拟核数。 | yarn-site.xml | 集群 | 默认为32,如果集群确实需要提交单个容器比较大的作业时需要提高避免调度器限制,过高的配置容易导致资源碎片,调整后需要重启ResourceManager组件生效。 |
yarn.scheduler.minimum-allocation-vcores | 调度器中单个容器最小可请求的虚拟核数。 | yarn-site.xml | 集群 | 默认为1,通常不需要调整,调整后需要重启ResourceManager组件生效。 |
yarn.nodemanager.resource.memory-mb | NodeManager声明调度器可使用的内存资源数。 | yarn-site.xml | 节点组 | 需要根据集群部署情况进行增减。调整后需要重启NodeManager组件才能生效。 重要 必须选中对应节点组进行配置。 |
yarn.nodemanager.resource.cpu-vcores | NodeManager声明调度器可使用的虚拟核数。 | yarn-site.xml | 节点组 | 默认为节点组实例规格vCPU数量,大内存规格实例默认使用实例规格vCPU数量的两倍,需要根据集群部署情况进行增减。调整后需要重启NodeManager组件才能生效。 重要 必须选中对应节点组进行配置。 |
修改yarn.nodemanager.resource.memory-mb和yarn.nodemanager.resource.cpu-vcores参数时,必须选择节点组配置才能生效,因为EMR允许一个集群中通过节点组的方式运行不同规格的ECS实例,一个节点组内的ECS规格是一致的,所以按照节点组进行配置NodeManager资源数能够在调度上保证小规格节点不会水位过高或者大规格节点不会利用率过低,同时不用修改每个ECS节点的NodeManager资源数配置。
EMR会在创建集群和新增节点组第一次扩容时会配置一次yarn.scheduler.maximum-allocation-mb,保证该值大于创建集群时所有节点和新增节点组扩容时扩容节点的yarn.nodemanager.resource.memory-mb,避免作业无法调度。
节点组升配或者手动修改yarn.nodemanager.resource.memory-mb时不会触发yarn.scheduler.maximum-allocation-mb的自动更新,如果需要调整可以手动配置一次yarn.scheduler.maximum-allocation-mb。
为避免影响您的作业,新增节点组第一次扩容配置yarn.scheduler.maximum-allocation-mb时不会触发ResourceManager重启,如果需要配置生效,则需要手动重启一次ResourceManager。
说明建议业务低峰期时重启ResourceManager,组件重启过程中可能会有作业失败的情况发生。