View a markdown version of this page

使用随机排序优化的磁盘 - Amazon EMR

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

使用随机排序优化的磁盘

在 Amazon EMR 7.1.0 及更高版本中,在运行 Apache Spark 或 Hive 作业时使用经过洗牌优化的磁盘来提高工作负载的性能。 I/O-intensive 与标准磁盘相比,经过洗牌优化的磁盘可提供更高的 IOPS(每秒I/O 操作数),从而加快数据移动速度并减少洗牌操作期间的延迟。 Shuffle-optimized 磁盘允许您为每个工作人员连接高达 2 TB 的磁盘,因此请根据您的工作负载要求配置适当的容量。

主要优势

Shuffle-optimized 磁盘具有以下优点。

  • 高 IOPS 和吞吐量 — Shuffle-optimized 磁盘在 IOPS 和吞吐量方面的性能都优于标准磁盘,这有利于任何 I/O-heavy 操作:数据洗牌、磁盘溢出、分类阶段以及在 Spark 和 Hive 作业之间实现临时数据。

  • 扩展磁盘性能 — 对于大型工作人员(8 个 vCPU 以上),经过洗牌优化的磁盘尽可能以每 500 GB 为增量提供成比例更高的 IOPS 和吞吐量,从而使磁盘性能与您的计算容量相匹配。

  • 更大的磁盘大小 — Shuffle-optimized 磁盘支持每位工作人员从 20GB 到 2TB 不等的磁盘大小,因此请根据您的工作负载选择合适的容量。

开始使用

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

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>
  2. 配置您的 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 作业属性。

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>
  2. 配置您的 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 作业属性。

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

请参阅以下示例,创建 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" }'