

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 EMRFS 的重試 Amazon S3 請求
<a name="emr-spark-emrfs-retry"></a>

本主題提供使用 EMRFS 向 Amazon S3 發出請求時，您可以使用的重試策略相關資訊。當您的請求速率加快時，S3 嘗試擴展以支援新的速率。在此過程中，S3 可能對請求限流並傳回 `503 Slow Down` 錯誤。若要提高您的 S3 請求的成功率，您可以透過在 `emrfs-site` 組態中設定屬性，調整您的重試策略。

您可以採用下列方式調整您的重試策略。
+ 提高預設指數退避重試策略的重試上限。
+ 啟用並設定和性增長/乘性降低 (AIMD) 重試策略。Amazon EMR 6.4.0 版和更高版本支援 AIMD。

## 使用預設指數退避策略
<a name="emr-spark-emrfs-retry-exponential-backoff"></a>

依預設，EMRFS 會使用指數退避策略重試 Amazon S3 請求。預設 EMRFS 重試限制為 15。若要避免 S3 `503 Slow Down` 錯誤，您可以在建立新叢集時、執行中叢集上或應用程式執行期調高重試限制。

如果想要調高重試限制，您必須在 `emrfs-site` 組態中變更 `fs.s3.maxRetries` 的值。下列範例組態將 `fs.s3.maxRetries` 設為自訂值 30。

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

如需使用組態物件的詳細資訊，請參閱 [設定應用程式](emr-configure-apps.md)。

## 使用 AIMD 重試策略
<a name="emr-spark-emrfs-retry-aimd"></a>

在 Amazon EMR 6.4.0 版及更高版本中，EMRFS 支援依據和性增長/乘性降低 (AIMD) 模型的替代性重試策略。當您使用大型 Amazon EMR 叢集時，AIMD 重試策略變得特別有用。

AIMD 會使用有關近期成功請求的資料計算自訂請求速率。此策略會減少限流請求的數量和每個請求所需的嘗試總次數。

若要啟用 AIMD 重試策略，您必須將 `emrfs-site` 組態中的 `fs.s3.aimd.enabled` 屬性設為 `true`，如下例所示。

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

如需使用組態物件的詳細資訊，請參閱 [設定應用程式](emr-configure-apps.md)。

## 進階 AIMD 重試設定
<a name="emr-spark-emrfs-retry-advanced-properties"></a>

在使用 AIMD 重試策略時，您可以設定下表中所列的屬性，以完善重試行為。對於大多數使用案例，建議您使用預設值。


**進階 AIMD 重試策略屬性**  

| 屬性 | 預設值 | Description | 
| --- | --- | --- | 
| 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.increaseIncrement 和 fs.s3.aimd.reductionFactor 指定的值變更。初始速率還用於 GET 請求，並且會針對 PUT 請求按比例擴展 (3500/5500)。 | 
| fs.s3.aimd.adjustWindow | 2 | 控制調整請求速率的頻率，使用回應數量進行衡量。 | 
| fs.s3.aimd.maxAttempts | 100 | 設定嘗試請求的最大次數。 | 