スキップしてコンテンツを表示

Amazon EMR での S3DistCp ジョブで発生する「Error Code: 503 Slow Down」エラーの解決方法を教えてください。

所要時間2分
0

「Error Code: 503 Slow Down」エラーが発生し、Amazon EMR で S3DistCp ジョブを実行できないため、解決したいです。

解決策

データが Apache Hive スタイルのパーティションを使用しており、Amazon Simple Storage Service (Amazon S3) のリクエストレートを超えた場合、次のエラーが発生します。

「mapreduce.Job: Task Id : attempt_######_0012_r_000203_0, Status : FAILED Error: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Slow Down (Service: Amazon S3; Status Code: 503; Error Code: 503 Slow Down; Request ID: D27E827C847A8304; S3 Extended Request ID: XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo=), S3 Extended Request ID: XWxtDsEZ40GLEoRnSIV6+HYNP2nZiG4MQddtNDR6GMRzlBmOZQ/LXlO5zojLQiy3r9aimZEvXzo= at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1712)」

たとえば、次の Amazon S3 パスは同じプレフィックス (/year=2019/) を使用しています。

  • s3://awsexamplebucket/year=2019/month=11/day=01/mydata.parquet
  • s3://awsexamplebucket/year=2019/month=11/day=02/mydata.parquet
  • s3://awsexamplebucket/year=2019/month=11/day=03/mydata.parquet

リクエストクォータは、1 秒あたり 3,500 回の書き込みリクエストまたは 5,500 回の読み取りリクエストに設定されています。プレフィックス内のすべての操作がクォータにカウントされます。

パーティションの数を増やせない場合は、次のいずれかの方法で S3DistCp ジョブに対するスロットリングエラーを解決します。

Reduce タスクの数を減らす

mapreduce.job.reduces パラメータでは、ジョブでの Reduce タスクの数を設定します。Amazon EMR は、クラスター内のノード数とクラスターのメモリリソースに基づいて mapreduce.job.reduces を動的に設定します。

次のコマンドを実行し、クラスター内のジョブでのデフォルトの Reduce タスク数を確認します。

hdfs getconf -confKey mapreduce.job.reduces

mapreduce.job.reduces に新しい値を設定するには、次のコマンドを実行します。

s3-dist-cp -Dmapreduce.job.reduces=10 --src s3://awsexamplebucket/data/ --dest s3://awsexamplebucket2/output/

注: 10 は、Reduce タスクに設定する実際の数値に置き換えます。さらに、例の値を実際に使用する値に置き換えてください。

EMRFS 再試行クォータを増やす

デフォルトでは、EMRFS 再試行クォータは 4 に設定されています。

次のコマンドを実行し、クラスターでの再試行クォータを確認します。

hdfs getconf -confKey fs.s3.maxRetries

s3-dist-cp ジョブの再試行クォータを増やすには、次のコマンドを実行します。

s3-dist-cp -Dfs.s3.maxRetries=20 --src s3://awsexamplebucket/data/ --dest s3://awsexamplebucket2/output/

注: 20 は、再試行回数に設定するクォータに置き換えます。さらに、例の値を実際に使用する値に置き換えてください。

新しいクラスターでの再試行クォータを増やすには、クラスターの起動時に設定オブジェクトを追加します。実行中のクラスターでの再試行クォータを増やすには、設定オブジェクトを使用してインスタンスグループのクラスター設定をオーバーライドします。

Amazon EMR バージョン 5.21.0 以降用の設定オブジェクトの例

[
    {
        "Classification": "emrfs-site",
        "Properties": {
            "fs.s3.maxRetries": "20"
        }
    }
]

クラスターで再試行クォータを増やすと、Apache Spark および Hive アプリケーションも新しいクォータを使用できるようになります。次の Spark シェルセッションの例では、再試行回数を増やしています。

spark> sc.hadoopConfiguration.set("fs.s3.maxRetries", "20")
spark> val source_df = spark.read.csv("s3://awsexamplebucket/data/")  
spark> source_df.write.save("s3://awsexamplebucket2/output/")

関連情報

設計パターンのベストプラクティス: Amazon S3 のパフォーマンスを最適化する

Amazon EMR で Spark ジョブまたは Hive ジョブが失敗し、HTTP 503「Slow Down」AmazonS3Exception が発生する理由を知りたいです

AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ