EMRFS で Amazon S3 リクエストを再試行する - Amazon EMR

EMRFS で Amazon S3 リクエストを再試行する

このトピックでは、EMRFS を使用して Amazon S3 にリクエストを行うときに使用できる再試行戦略について説明します。リクエストレートが上昇すると、S3 は新しいレートをサポートするためにスケーリングを試みます。このプロセス中、S3 はリクエストをスロットルし、503 Slow Down エラーを返す場合があります。S3 リクエストの成功率を高めるために、emrfs-site 設定でプロパティを設定し、再試行戦略を調整できます。

次の方法で再試行戦略を調整できます。

  • デフォルトのエクスポネンシャルバックオフ再試行戦略の再試行上限を増やします。

  • additive-increase/multiplicative-decrease (AIMD) 再試行戦略を有効にして設定します。AIMD は Amazon EMR リリース 6.4.0 以降でサポートされています。

デフォルトのエクスポネンシャルバックオフ戦略を使用する

デフォルトでは、EMRFS はエクスポネンシャルバックオフ戦略を使用して Amazon S3 リクエストを再試行します。EMRFS のデフォルトの再試行上限は 15 です。S3 503 Slow Down エラーを回避するために、新しいクラスターを作成するときに、実行中のクラスターで、またはアプリケーションのランタイムで、再試行上限を増やすことができます。

再試行上限を増やすには、emrfs-sitefs.s3.maxRetries の値を変更する必要があります。以下の設定例では、fs.s3.maxRetries をカスタム値の 30 に設定します。

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

設定オブジェクトの処理の詳細については、「アプリケーションの設定」を参照してください。

AIMD 再試行戦略を使用する

Amazon EMR リリース 6.4.0 以降では、EMRFS は、additive-increase/multiplicative-decrease (AIMD) モデルに基づく代替再試行戦略をサポートします。AIMD 再試行戦略は、大規模な Amazon EMR クラスターで作業する場合に特に便利です。

AIMD は、最近の成功したリクエストに関するデータを使用してカスタムリクエストレートを計算します。この戦略では、スロットリングされるリクエストの数と、リクエストごとに必要な合計試行数が減少します。

AIMD 再試行戦略を有効にするには、以下の例のように、emrfs-site 設定で fs.s3.aimd.enabled プロパティを true に設定する必要があります。

[ { "Classification": "emrfs-site", "Properties": { "fs.s3.aimd.enabled": "true" } } ]

設定オブジェクトの処理の詳細については、「アプリケーションの設定」を参照してください。

詳細な AIMD 再試行設定

次の表にリストされているプロパティを設定して、AIMD 再試行戦略を使用するときの再試行の動作を詳細に指定できます。大部分のユースケースで、デフォルト値を使用することをお勧めします。

高度な AIMD 再試行戦略のプロパティ
プロパティ デフォルト値 説明
fs.s3.aimd.increaseIncrement 0.1 連続するリクエストが成功したときにリクエストレートが上昇する速さを制御します。
fs.s3.aimd.reductionFactor 2 Amazon S3 が 503 レスポンスを返すときにリクエストレートが減少する速さを制御します。デフォルト係数の 2 は、リクエストレートを半分に削減します。
fs.s3.aimd.minRate 0.1 リクエストで S3 による持続的なスロットリングが生じる場合のリクエストレートの下限を設定します。
fs.s3.aimd.initialRate 5500 初期リクエストレートを設定します。その後、これは、fs.s3.aimd.increaseIncrementfs.s3.aimd.reductionFactor に指定する値に従って変わります。

初期レートは GET リクエストにも使用され、PUT リクエストに比例してスケーリングされます (3500/5500)。

fs.s3.aimd.adjustWindow 2 リクエストレートを調整する頻度を制御し、応答数で測定します。
fs.s3.aimd.maxAttempts 100 リクエストを試行する最大試行回数を設定します。