预先初始化的容量 - Amazon EMR

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

预先初始化的容量

EMRServerless 提供了一项可选功能,可让驱动程序和工作人员进行预初始化并在几秒钟内做好响应准备。这实际上为应用程序创建了一个温暖的工作人员库。此功能称为预初始化容量。要配置此功能,您可以将应用程序的initialCapacity参数设置为要预初始化的工作器数量。使用预先初始化的工作人员容量,作业可以立即启动。当您想要实现迭代应用程序和时间敏感型作业时,这是理想的选择。

提交作业时,如果initialCapacity有来自的工作人员可用,则该作业将使用这些资源开始运行。如果这些工作人员已被其他作业使用,或者该作业需要的资源多于可用资源initialCapacity,则应用程序会请求并获得更多工作人员,但不得超过为应用程序设置的最大资源限制。作业完成运行后,它会释放其使用的工作程序,应用程序的可用资源数量将恢复为initialCapacity。即使在initialCapacity作业完成运行之后,应用程序仍会保留资源。当作业不再需要它们运行initialCapacity时,应用程序会释放多余的资源。

应用程序启动后,预先初始化的容量可用并可供使用。应用程序停止后,预先初始化的容量将变为非活动状态。只有在请求的预初始化容量已创建并可供使用时,应用程序才会进入该STARTED状态。在应用程序处于STARTED状态的整个过程中,EMRServerless 会保持预先初始化的容量可供作业或交互式工作负载使用或使用。该功能可恢复已释放或出现故障的容器的容量。这会保持InitialCapacity参数指定的工作人员数量。没有预初始化容量的应用程序的状态可以立即从CREATED变为。STARTED

如果在一段时间内未使用预先初始化的容量,则可以将应用程序配置为释放预先初始化的容量,默认值为 15 分钟。当您提交新工作时,已停止的应用程序会自动启动。您可以在创建应用程序时设置这些自动启动和停止配置,也可以在应用程序处于CREATEDSTOPPED状态时对其进行更改。

您可以为每个 worker 更改InitialCapacity计数并指定计算配置CPU,例如内存和磁盘。由于您无法进行部分修改,因此在更改值时应指定所有计算配置。只有当应用程序处于CREATEDSTOPPED状态时,您才能更改配置。

注意

为了优化应用程序对资源的使用,我们建议将容器大小与预初始化的容量工作线程大小保持一致。例如,如果您将 Spark 执行器大小配置为 2CPUs,将内存配置为 8 GB,但预先初始化的容量工作器大小为 4CPUs,内存为 16 GB,那么 Spark 执行器在分配给此作业时仅使用一半的工作器资源。

为 Spark 和 Hive 自定义预先初始化的容量

您可以为在特定大数据框架上运行的工作负载进一步自定义预初始化的容量。例如,当工作负载在 Apache Spark 上运行时,您可以指定有多少工作程序以驱动程序的身份启动,有多少工作线程以执行者身份启动。同样,当你使用 Apache Hive 时,你可以指定有多少工作人员开始作为 Hive 驱动程序,以及有多少工作人员应该运行 Tez 任务。

使用预先初始化的容量配置运行 Apache Hive 的应用程序

以下API请求创建了一个运行基于亚马逊EMR版本 emr-6.6.0 的 Apache Hive 的应用程序。该应用程序从 5 个预初始化的 Hive 驱动程序开始,每个驱动程序都有 2 v CPU 和 4 GB 的内存,以及 50 个预初始化的 Tez 任务工作程序,每个驱动程序都有 4 v CPU 和 8 GB 的内存。当 Hive 查询在此应用程序上运行时,它们首先使用预先初始化的 worker 并立即开始执行。如果所有预初始化的工作线程都很忙并且提交了更多 Hive 作业,则应用程序可以扩展到总共有 400 v CPU 和 1024 GB 的内存。您可以选择省略DRIVERTEZ_TASK工作人员的容量。

aws emr-serverless create-application \ --type "HIVE" \ --name my-application-name \ --release-label emr-6.6.0 \ --initial-capacity '{ "DRIVER": { "workerCount": 5, "workerConfiguration": { "cpu": "2vCPU", "memory": "4GB" } }, "TEZ_TASK": { "workerCount": 50, "workerConfiguration": { "cpu": "4vCPU", "memory": "8GB" } } }' \ --maximum-capacity '{ "cpu": "400vCPU", "memory": "1024GB" }'

使用预先初始化的容量配置运行 Apache Spark 的应用程序

以下API请求创建了一个基于亚马逊 6.6.0 EMR 版本运行 Apache Spark 3.2.0 的应用程序。该应用程序从 5 个预初始化的 Spark 驱动程序开始,每个驱动程序都有 2 v CPU 和 4 GB 的内存,以及 50 个预初始化的执行器,每个执行器都有 4 v CPU 和 8 GB 的内存。当 Spark 作业在此应用程序上运行时,它们首先使用预先初始化的 worker 并立即开始执行。如果所有预初始化的工作程序都处于忙碌状态,并且提交了更多 Spark 作业,则应用程序可以扩展到总共有 400 v CPU 和 1024 GB 的内存。您可以选择省略DRIVER或的容量。EXECUTOR

注意

Spark 将可配置的内存开销(默认值为 10%)添加到驱动程序和执行器请求的内存中。对于要使用预初始化工作线程的作业,初始容量内存配置应大于作业和开销请求的内存。

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