更新时间:2025-07-14 GMT+08:00

配置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的状态,因此运行中的作业可以继续无故障的运行。

图1 AM作业保留

配置AM作业自动保留

  1. 登录FusionInsight Manager。

    登录集群Manager具体操作,请参考访问MRS集群Manager

  2. 选择“集群 > 服务 > Yarn > 配置 > 全部配置”。
  3. 搜索并根据实际需要修改表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

  4. 保存修改的配置。保存完成后请重新启动配置过期的服务或实例以使配置生效。

配置AM自动调整分配内存

启动该配置的过程中,ApplicationMaster在创建container时,分配的内存会根据任务总数的浮动自动调整,资源利用更加灵活,提高了客户端应用运行的容错性。

  1. 登录FusionInsight Manager。

    登录集群Manager具体操作,请参考访问MRS集群Manager

  2. 选择“集群 > 服务 > Yarn > 配置 > 全部配置”。
  3. 在搜索框中搜索并根据实际需要修改以下参数。

    表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

  4. 保存修改的配置。保存完成后请重新启动配置过期的服务或实例以使配置生效。