

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

# 使用随机排序优化的磁盘
<a name="jobs-shuffle-optimized-disks"></a>

在 Amazon EMR 7.1.0 及更高版本中，在运行 Apache Spark 或 Hive 作业时使用经过洗牌优化的磁盘（以提高每秒操作的性能），以加快数据移动速度并减少洗牌I/O-intensive workloads. Compared to standard disks, shuffle-optimized disks provide higher IOPS (I/O操作期间的延迟。随机排序优化的磁盘允许为每个工作线程附加高达 2TB 的磁盘大小，因此请根据工作负载要求配置适当的容量。

## 主要优势
<a name="jobs-shuffle-optimized-disks-key-benefits"></a>

随机排序优化的磁盘具有以下优势。
+ **高 IOPS 性能**：随机排序优化的磁盘具有比标准磁盘更高的 IOPS，可在 Spark 和 Hive 作业以及其他随机排序密集型工作负载期间实现更高效、更快速的数据随机排序。
+ **磁盘容量更大**：随机排序优化的磁盘支持每个工作线程 20GB 到 2TB 的磁盘大小，因此请根据工作负载选择合适的容量。

## 开始使用
<a name="jobs-shuffle-optimized-disks-getting-started"></a>

要在工作流程中使用随机排序优化的磁盘，请参阅以下步骤。

------
#### [ Spark ]

1. 使用以下命令创建 EMR Serverless 7.1.0 版应用程序。

   ```
   aws emr-serverless create-application \
     --type "SPARK" \
     --name my-application-name \
     --release-label emr-7.1.0 \
     --region {{<AWS_REGION>}}
   ```

1. 配置您的 Spark 作业，使其包含要在经过洗牌优化的磁盘上运行的参数`spark.emr-serverless.driver.disk.type` and/or `spark.emr-serverless.executor.disk.type`。您可以使用一个或两个参数，具体取决于您的用例。

   ```
   aws emr-serverless start-job-run \
       --application-id {{application-id}} \
       --execution-role-arn {{job-role-arn}} \
       --job-driver '{
           "sparkSubmit": {
               "entryPoint": "/usr/lib/spark/examples/jars/spark-examples.jar",
               "entryPointArguments": ["1"],
               "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi 
               --conf spark.executor.cores=4 
               --conf spark.executor.memory=20g 
               --conf spark.driver.cores=4 
               --conf spark.driver.memory=8g 
               --conf spark.executor.instances=1 
               --conf spark.emr-serverless.executor.disk.type=shuffle_optimized"
           }
       }'
   ```

   有关更多信息，请参阅 [Spark 作业属性](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/jobs-spark.html#spark-defaults)。

------
#### [ Hive ]

1. 使用以下命令创建 EMR Serverless 7.1.0 版应用程序。

   ```
   aws emr-serverless create-application \
     --type "HIVE" \
     --name my-application-name \
     --release-label emr-7.1.0 \
     --region {{<AWS_REGION>}}
   ```

1. 配置您的 Hive 作业，使其包含要在经过洗牌`hive.driver.disk.type` and/or `hive.tez.disk.type`优化的磁盘上运行的参数。您可以使用一个或两个参数，具体取决于您的用例。

   ```
   aws emr-serverless start-job-run \
       --application-id {{application-id}} \
       --execution-role-arn {{job-role-arn}} \
       --job-driver '{
           "hive": {
               "query": "s3://{{<DOC-EXAMPLE-BUCKET>}}/emr-serverless-hive/query/hive-query.ql",
               "parameters": "--hiveconf hive.log.explain.output=false"
           }
       }' \
       --configuration-overrides '{
           "applicationConfiguration": [{
               "classification": "hive-site",
               "properties": {
                   "hive.exec.scratchdir": "s3://{{<DOC-EXAMPLE-BUCKET>}}/emr-serverless-hive/hive/scratch",
                   "hive.metastore.warehouse.dir": "s3://{{<DOC-EXAMPLE-BUCKET>}}/emr-serverless-hive/hive/warehouse",
                   "hive.driver.cores": "2",
                   "hive.driver.memory": "4g",
                   "hive.tez.container.size": "4096",
                   "hive.tez.cpu.vcores": "1",
                   "hive.driver.disk.type": "shuffle_optimized",
                   "hive.tez.disk.type": "shuffle_optimized"
               }
           }]
       }'
   ```

   有关更多信息，请参阅 [Hive 作业属性](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/jobs-hive.html#hive-defaults)。

------

**配置具有预初始化容量的应用程序**

请参阅以下示例，创建 Amazon EMR 7.1.0 版应用程序。这些应用程序具有以下属性：
+ 5 个预初始化的 Spark 驱动程序，每个都有 2 个 vCPU、4GB 内存和 50GB 随机排序优化的磁盘。
+ 50 个预初始化的执行程序，每个都有 4 个 vCPU、8GB 内存和 500GB 随机排序优化的磁盘。

当应用程序运行 Spark 作业时，会先使用预初始化的工作线程，然后将按需工作线程扩展到最大容量 400 个 vCPU 和 1024GB 内存。您可以选择忽略 `DRIVER` 或 `EXECUTOR` 的容量。

------
#### [ Spark ]

```
aws emr-serverless create-application \
  --type "SPARK" \
  --name {{<my-application-name>}} \
  --release-label emr-7.1.0 \
  --initial-capacity '{
    "DRIVER": {
        "workerCount": 5,
        "workerConfiguration": {
            "cpu": "2vCPU",
            "memory": "4GB",
            "disk": "50GB",
            "diskType": "SHUFFLE_OPTIMIZED"
        }
    },
    "EXECUTOR": {
        "workerCount": 50,
        "workerConfiguration": {
            "cpu": "4vCPU",
            "memory": "8GB",
            "disk": "500GB",
            "diskType": "SHUFFLE_OPTIMIZED"
        }
    }
  }' \
  --maximum-capacity '{
    "cpu": "400vCPU",
    "memory": "1024GB"
  }'
```

------
#### [ Hive ]

```
aws emr-serverless create-application \
  --type "HIVE" \
  --name {{<my-application-name>}} \
  --release-label emr-7.1.0 \
  --initial-capacity '{
    "DRIVER": {
        "workerCount": 5,
        "workerConfiguration": {
            "cpu": "2vCPU",
            "memory": "4GB",
            "disk": "50GB",
            "diskType": "SHUFFLE_OPTIMIZED"
        }
    },
    "EXECUTOR": {
        "workerCount": 50,
        "workerConfiguration": {
            "cpu": "4vCPU",
            "memory": "8GB",
            "disk": "500GB",
            "diskType": "SHUFFLE_OPTIMIZED"
        }
    }
  }' \
  --maximum-capacity '{
    "cpu": "400vCPU",
    "memory": "1024GB"
  }'
```

------