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

上次更新日期:2023 年 1 月 18 日

我在 Amazon EMR 集群上运行 Apache Spark 任务,核心节点几乎没有磁盘空间。

解决方法

确定哪些核心节点运行状况不佳

对于至少已连接一个 Amazon Elastic Block Store(Amazon EBS)卷的节点,如果其磁盘利用率超过 90%,则被认为运行状态不佳。要确定哪些节点的磁盘利用率可能超过 90%,请执行以下操作:

1.    检查 Amazon CloudWatch 指标 MRUnhealthyNodes。这项指标表示运行状态不佳的 EMR 集群节点数量。

注意:您可以创建 CloudWatch 警报来监控 MRUnhealthyNodes 指标。

2.    连接到主节点并访问位于 /emr/instance-controller/log/instance-controller.log 的实例控制器日志。在实例控制器日志中,搜索 InstanceJointStatusMap 以确定哪些节点的运行状况不佳。

若要了解更多信息,请参阅如何解决 Amazon EMR 上 Spark 中的 ExecutorLostFailure "Slave lost" 错误?,并查看磁盘利用率高

3.    登录到核心节点,然后运行以下命令来确定挂载是否有高利用率:

df -h

移除不必要的本地和临时 Spark 应用程序文件

在运行 Spark 任务时,Spark 应用程序会创建本地文件,这些文件会占用核心节点上的其余磁盘空间。例如,如果 df -h 命令显示 /mnt 正使用超过 90% 的磁盘空间,检查哪些目录或文件有高利用率。

在核心节点上运行以下命令,以查看正使用最多磁盘空间的 10 个目录:

cd /mnt
sudo du -hsx * | sort -rh | head -10

如果 /mnt/hdfs 目录有高利用率,请检查 HDFS 使用情况并移除任何不必要的文件,如日志文件等。缩短保留期有助于自动清理 HDFS 中的日志文件。

hdfs dfsadmin -report
hadoop fs -du -s -h /path/to/dir

缩短 Spark 事件和 YARN 容器日志的保留期

使用 HDFS 的常见原因是 /var/log 目录。/var/log 目录是存储 Spark 事件日志和 YARN 容器日志等日志文件的地方。您可以更改这些文件的保留期以节省空间。

以下示例命令会显示 /var/log/spark 使用情况。

注意:/var/log/spark 是默认的 Spark 事件日志目录。

hadoop fs -du -s -h /var/log/spark

缩短 Spark 作业历史文件的默认保留期

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

在正在运行的集群上:

1.    使用 SSH 连接到主节点

2.    在 /etc/spark/conf/spark-defaults.conf 中添加或更新以下值。以下配置每隔 12 个小时会运行一次清理程序。配置会清除超过 1 天的文件。您可以在 spark.history.fs.cleaner.internvalspark.history.fs.cleaner.maxAge 参数中为您的单个使用案例自定义此时间范围。

------
spark.history.fs.cleaner.enabled true
spark.history.fs.cleaner.interval 12h
spark.history.fs.cleaner.maxAge 1d
------

3.    重新启动 Spark History Server

在集群启动期间:

使用以下配置。您可以在 spark.history.fs.cleaner.internvalspark.history.fs.cleaner.maxAge 参数中为您的单个使用案例自定义时间范围。

{
"Classification": "spark-defaults",
"Properties": {
"spark.history.fs.cleaner.enabled":"true",
"spark.history.fs.cleaner.interval":"12h",
"spark.history.fs.cleaner.maxAge":"1d"
   }
}

有关这些参数的更多信息,请参阅 Spark 文档中的监控和检测

缩短 YARN 容器日志的默认保留期

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 和应用程序进程

您还可以重新配置集群来缩短保留期。有关更多信息,请参阅为正在运行的集群重新配置实例组

减少使用 /mnt/yarn

如果 /mnt/yarn 目录的利用率高,请在节点上调整用户缓存保留期或扩展 EBS 卷。有关更多信息,请查阅如何防止 Hadoop 或 Spark 任务用户缓存在 Amazon EMR 中使用太多磁盘空间?

调整集群大小或扩展 Amazon EMR

添加更多核心节点以缓解 HDFS 空间问题。另外,如果非 HDFS 目录已满,请添加任何核心或任务节点。有关更多信息,请参阅扩展集群资源

您还可以扩展现有节点中的 EBS 卷或使用动态扩展脚本。有关更多信息,请参阅以下内容:


这篇文章对您有帮助吗?


您是否需要账单或技术支持?