AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

キャッシュが Amazon EMR のディスク容量を使いすぎないようにするために、Hadoop または Spark ジョブのユーザーキャッシュを停止する方法を教えてください。

所要時間2分
0

Apache Hadoop または Apache Spark ジョブのユーザーキャッシュは、パーティションのディスク容量をすべて使用します。Amazon EMR ジョブが失敗するか、HDFS NameNode サービスがセーフモードになっています。

簡単な説明

Amazon EMR クラスターでは、ジョブがキャッシュデータを /mnt/yarn/usercache に書き込むことができるように YARN が設定されます。大量のデータを処理したり、複数の同時ジョブを実行したりすると、/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公式更新しました 1ヶ月前
コメントはありません

関連するコンテンツ