使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何停止 Hadoop 或 Spark 作业的用户缓存,以让缓存不要占用 Amazon EMR 中过多的磁盘空间?

2 分钟阅读
0

我的 Apache Hadoop 或 Apache Spark 作业的用户缓存会占用分区上的所有磁盘空间。Amazon EMR 作业失败或 HDFS NameNode 服务处于安全模式。

简短描述

在 Amazon EMR 集群上,YARN 配置为允许作业将缓存数据写入 /mnt/yarn/usercache。当您处理大量数据或运行多个并发作业时,/mnt 文件系统可能会填满。这会导致某些节点上的节点管理器出现故障,进而使相关作业冻结或失败。

要解决此问题,请使用下面其中一种方法:

  • 如果您没有长时间运行的作业或流作业,请调整 YARN NodeManager 的用户缓存保留设置。
  • 如果您有长时间运行的作业或流作业,请纵向扩展 Amazon Elastic Block Store(Amazon EBS)卷。

解决方法

调整 NodeManager 的用户缓存保留设置

以下属性定义缓存清理设置:

  • **yarn.nodemanager.localizer.cache.cleanup.interval-ms:**这是缓存清理时间间隔。默认值为 600,000 毫秒。在此时间间隔之后,如果缓存大小超过了 yarn.nodemanager.localizer.cache.target-size-mb 中设定的值,则正在运行的容器不使用的文件将被删除。
  • **yarn.nodemanager.localizer.cache.target-size-mb:**这是允许缓存使用的最大磁盘空间。默认值为 10,240 MB。当缓存使用的磁盘容量超过这个值时,系统将按照 yarn.nodemanager.localizer.cache.cleanup.interval-ms 中设置的时间间隔删除正在运行的容器不使用的文件。

要设置集群的清理时间间隔和最大磁盘空间大小,请完成以下步骤:

  1. 在每个核心和任务节点上打开 /etc/hadoop/conf/yarn-site.xml

  2. 降低每个核心和任务节点的 yarn.nodemanager.localizer.cache.cleanup.intervalyarn.nodemanager.localizer.cache.target-size-mb 值。

    例如:

    sudo vim /etc/hadoop/conf/yarn-site.xmlyarn.nodemanager.localizer.cache.cleanup.interval-ms 400000
    yarn.nodemanager.localizer.cache.target-size-mb 5120
  3. 在每个核心和任务节点上运行以下命令以重启 NodeManager:
    EMR 5.29 及更早版本

    sudo stop hadoop-yarn-nodemanager
    sudo start hadoop-yarn-nodemanager

    EMR 5.30.0 及更高版本

    sudo stop hadoop-yarn-nodemanager.service  
    sudo systemctl start hadoop-yarn-nodemanager.service
  4. 要在新集群启动时设置清理时间间隔和最大磁盘空间大小,请添加与以下类似的配置对象

    [
        {
          "Classification": "yarn-site",
         "Properties": {
           "yarn.nodemanager.localizer.cache.cleanup.interval-ms": "400000",
           "yarn.nodemanager.localizer.cache.target-size-mb": "5120"
          }
        }
    ]
    

    正在运行的容器上的删除服务无法完成。这意味着,即使调整了用户缓存保留设置,数据仍可能涌入以下路径并填满文件系统:

    {'yarn.nodemanager.local-dirs'}/usercache/user/appcache/application_id ,

纵向扩展 EMR 集群节点上的 EBS 卷

要在正在运行的 EMR 集群上纵向扩展存储空间,请参阅 Dynamically scale up storage on Amazon EMR clusters

要在新 EMR 集群上纵向扩展存储,请在创建 EMR 集群时指定更大的卷大小。您也可以在向现有集群添加节点时执行此操作:

  • **Amazon EMR 版本 5.22.0 及更高版本:**默认的 EBS 存储量根据 Amazon Elastic Compute Cloud(Amazon EC2)实例的大小而增加。有关每种实例类型的默认存储量和卷数的更多信息,请参阅实例的默认 Amazon EBS 存储
  • **Amazon EMR 版本 5.21 及更早版本:**默认 EBS 卷大小为 32 GB。27 GB 已为 ** /mnt ** 分区预留。HDFS、YARN、用户缓存和所有应用程序都使用 /mnt 分区。根据需要增加 EBS 卷的大小。您还可以指定多个 EBS 卷,将这些卷挂载为 /mnt1/mnt2

对于 Spark 流作业,您还可以在不再需要相关数据后执行 RDD.unpersist()。或者,在 Scala 中显式调用 System.gc(),或在 Python 中调用 sc._jvm.System.gc(),以启动 JVM 垃圾回收并删除处理过程中的临时文件。

AWS 官方
AWS 官方已更新 20 天前