Amazon EMR クラスターのコアノードがディスク容量不足になる原因を教えてください。

最終更新日: 2022 年 1 月 10 日

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 にコピーした後、ログプッシャーがログを Amazon Simple Storage Service (Amazon S3) にプッシュできるように、ログはローカルディスクに残ります。デフォルトの保持期間は 4 時間です。保持期間を短縮するには、/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 プロパティの値を減らします。

デフォルトでは、ファイルシステム履歴クリーナーは 1 日に 1 回実行されます。頻度は spark.history.fs.cleaner.interval プロパティで指定されます。詳細については、Spark ドキュメントの「モニタリングとインストルメンテーション」を参照してください。