

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 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 重试策略属性**  

| 属性 | 默认 值 | 说明 | 
| --- | --- | --- | 
| 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 | 设置尝试请求的最大尝试次数。 | 