为什么我的 Amazon EMR 集群中的核心节点的磁盘空间不足?

上次更新时间:2020 年 7 月 8 日

我正在 Amazon EMR 集群上执行 Apache Spark 作业。核心节点几乎没有磁盘空间。为什么会发生这种情况?

解决方法

检查核心节点上磁盘空间利用率高的以下常见原因:

Spark 应用程序中的本地和临时文件

在运行 Spark 作业时,Spark 应用程序会创建本地文件,这些文件会占用核心节点上的其余磁盘空间。在主节点上运行以下命令,查看占用最多磁盘空间的 10 个目录。

sudo du -hsx * | sort -rh | head -10

如果本地文件占用了其余磁盘空间,请扩展集群。有关更多信息,请参阅扩展集群资源

注意:如果 Spark 执行程序的数量没有按预期增加,请增加附加到核心节点的 Amazon Elastic Block Store (Amazon EBS) 卷的存储容量。或者,向核心节点添加更多 EBS 卷。

Spark 应用程序日志和作业历史记录文件

运行 Spark 作业时,Spark 会在 HDFS 上创建应用程序日志和作业历史文件。这些日志可能会占用核心节点上的其余磁盘空间。要解决此问题,请检查日志的存储目录,并在必要时更改保留参数。

Spark 应用程序日志是您的 Spark 作业的 YARN 容器日志,位于 /var/log/hadoop-yarn/apps 的核心节点上。Spark 会在应用程序完成运行后将这些日志移至 HDFS。默认情况下,YARN 会将应用程序日志在 HDFS 上保留 48 小时。要缩短保留期,请执行以下操作:

  1. 使用 SSH 连接到主节点
  2. 在 Amazon EMR 集群中的每个节点(主节点,核心节点和任务节点)上打开 /etc/hadoop/conf/yarn-site.xml 文件。
  3. 减少所有节点上的 yarn.log-aggregation.retain-seconds 属性的值。
  4. 重新启动 ResourceManager 守护程序。有关更多信息,请参阅查看和重启 Amazon EMR 和应用程序进程(守护程序)

注意:Spark 将应用程序日志复制到 HDFS 之后,这些日志将保留在本地磁盘上,以便 Log Pusher 将其推送到 Amazon Simple Storage Service (Amazon S3)。默认保留期为四个小时。要缩短保留期,请修改 /etc/logpusher/hadoop.config 文件。

Spark 作业历史记录文件位于 /var/log/spark/apps 的核心节点上。当文件系统历史记录清理程序运行时,Spark 会删除 7 天前作业历史记录文件。要缩短默认保留期,请执行以下操作:

  1. 使用 SSH 连接到主节点
  2. 打开主节点上的 /etc/spark/conf/spark-defaults.conf 文件。
  3. 减小 spark.history.fs.cleaner.maxAge 属性的值。

默认情况下,文件系统历史记录清理器每天运行一次。该频率在 spark.history.fs.cleaner.interval 属性中指定。有关更多信息,请参阅 Spark 文档中的监控和检测


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?