配置AM作业自动保留及内存分配
操作场景
每个应用程序(如MapReduce作业、Spark作业等)在YARN上运行时,都会启动一个独立的ApplicationMaster(AM)。AM的主要职责是与YARN的ResourceManager通信,以获取资源,并协调应用程序的任务执行。
在YARN中,AM与Container类似,都运行在NodeManager(NM)上(本文中忽略未管理的AM)。AM可能由于多种原因崩溃、退出或关闭,如果AM停止运行,ResourceManager(RM)会关闭ApplicationAttempt中管理的所有Container,其中包括当前在NM上运行的所有Container。RM会在另一计算节点上启动新的ApplicationAttempt。
对于不同类型的应用,希望以不同方式处理AM重启的事件。MapReduce类应用的目标是不丢失任务,但允许丢失当前运行的Container。但是对于长周期的YARN服务而言,用户可能并不希望由于AM的故障而导致整个服务停止运行。
YARN支持在新的ApplicationAttempt启动时,保留之前Container的状态,因此运行中的作业可以继续无故障的运行。

配置AM作业自动保留
- 登录FusionInsight Manager。
登录集群Manager具体操作,请参考访问MRS集群Manager。
- 选择“集群 > 服务 > Yarn > 配置 > 全部配置”。
- 搜索并根据实际需要修改表1相关参数。
表1 AM作业保留相关参数 参数
说明
取值样例
yarn.app.mapreduce.am.work-preserve
是否开启AM作业保留特性。默认值为“false”。
- true:开启。当AM失败时,YARN会尝试保留已经完成的任务的结果。新的AM启动后,会重用之前已经完成的任务结果,避免重新执行这些任务。
- false:关闭。当AM失败时,YARN不会保留已经完成的任务结果。新的AM启动后,会重新执行所有任务,包括之前已经完成的任务。
true
yarn.app.mapreduce.am.umbilical.max.retries
AM作业保留特性中,AM与RM之间通信失败时,运行的容器尝试恢复的最大次数。
- 增加重试次数可以提高通信的可靠性,减少因暂时性网络问题等导致的作业失败。但可能导致资源等待时间增加,影响整体作业效率。
- 较小的重试次数可以加快失败处理,提高作业执行效率。但可能导致作业因暂时性问题失败。
取值范围:大于0。
5
yarn.app.mapreduce.am.umbilical.retry.interval
AM作业保留特性中,AM与RM之间通信失败时,运行的容器尝试恢复的时间间隔。单位:毫秒。
- 增加重试时间间隔可以减少短时间内频繁重试对系统资源的消耗,降低系统压力。建议用户在高负载或高延迟场景下适当增加间隔。
- 较小的重试时间间隔可以更快地恢复通信,减少作业等待时间。建议用户在低负载和低延迟环境下适当减小时间间隔。
10000
yarn.resourcemanager.am.max-attempts
AM失败时的重试次数。增加重试次数可以避免当资源不足时造成AM启动失败。
适用于所有AM作业的全局设置。每个AM都可以使用API设置一个单独的最大尝试次数,但该次数不能大于全局的最大次数,否则ResourceManager将会覆写这个单独的最大尝试次数。取值范围大于等于1。
5
- 保存修改的配置。保存完成后请重新启动配置过期的服务或实例以使配置生效。
配置AM自动调整分配内存
启动该配置的过程中,ApplicationMaster在创建container时,分配的内存会根据任务总数的浮动自动调整,资源利用更加灵活,提高了客户端应用运行的容错性。
- 登录FusionInsight Manager。
登录集群Manager具体操作,请参考访问MRS集群Manager。
- 选择“集群 > 服务 > Yarn > 配置 > 全部配置”。
- 在搜索框中搜索并根据实际需要修改以下参数。
表2 AM自动调整分配内存参数 参数
说明
取值样例
mapreduce.job.am.memory.policy
使用该策略时AM的内存会根据Mapreduce任务的task数量自动调整。
- 默认值为空,此时不会启动自动调整的策略,AM的内存仍受“yarn.app.mapreduce.am.resource.mb”配置项的影响,该参数表示AM的内存限制,默认值为1536 MB。
- 配置参数的值由5个数值组成,中间使用“:”与“,”分隔,格式为:
{baseTaskCount}:{taskStep}:{memoryStep},{minMemory}:{maxMemory}
取值含义请见表3。
例如设定为“100:10:200,1024:3096”,表示当task的数量超过100时,每增加10个任务,container的内存就会在“yarn.app.mapreduce.am.resource.mb”配置参数的基础上增加200MB,但不会超过设定的最大内存3096MB。
-
表3 配置取值说明 数值名称
描述
设定要求
baseTaskCount
任务总量基数,只有当应用的task总数(mapperTasks+reduceTasks)不小于该值时配置才会起作用。
不能为空且大于零。
taskStep
任务增量步进,与memoryStep共同决定内存调整量。
不能为空且大于零。
memoryStep
内存增量步进,在“yarn.app.mapreduce.am.resource.mb”配置的基础上对内存向上调整。
不能为空且大于零。
单位:MB
minMemory
内存自动调整下限,如果调整后的内存不大于该值,仍保持“yarn.app.mapreduce.am.resource.mb”的配置。
不能为空且大于零,且不大于maxMemory的设定值。
单位:MB
maxMemory
内存自动调整上限,如果调整后的内存超过该值,则使用该值作为最终调整值。
不能为空且大于零,且不小于minMemory的设定值。
单位:MB
- 保存修改的配置。保存完成后请重新启动配置过期的服务或实例以使配置生效。