为 Amazon EMR 使用无服务器存储 Serverless - Amazon EMR

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

为 Amazon EMR 使用无服务器存储 Serverless

在 Amazon EMR 7.12 及更高版本中,在运行 Apache Spark 任务时使用无服务器存储,以消除本地磁盘配置并降低数据处理成本,并防止由于磁盘容量限制而导致任务失败。Serverless 存储无需配置容量即可自动处理作业的洗牌、磁盘溢出和磁盘缓存操作,并免费存储中间数据。Amazon EMR Serverless 将中间数据存储在完全托管的无服务器存储中,该存储可根据工作负载需求自动扩展,并使 Spark 能够在空闲时立即释放计算工作人员,从而降低计算成本。

主要优势

EMR Serverless 的无服务器存储具有以下优势。

  • 零配置存储 — 无服务器存储无需为每个应用程序或任务配置本地磁盘类型和大小。EMR Serverless 无需容量规划即可自动管理中间数据操作。

  • 通过自动扩展防止任务失败 — 存储容量可根据工作负载需求自动扩展,防止因磁盘容量不足而导致任务失败。

  • 降低数据处理成本 — 无服务器存储通过两种机制降低了处理成本。首先,中间数据存储是免费提供的,您只需为计算和内存资源付费。其次,将存储与 Spark 的动态资源分配分开后,Spark 能够在闲置时立即释放工作人员,而不是保留他们以将中间数据保留在本地磁盘上。这可以加快每个 Spark 阶段的横向扩展和缩小规模,从而降低后期阶段需要比初始阶段更少的工作人员的计算成本。

  • 具有作业级隔离功能的加密存储 — 所有中间数据在传输过程中和静态数据都经过严格的作业级隔离。

  • 精细访问控制支持 — 无服务器存储通过 AWS Lake Formation 集成支持精细的访问控制。

开始使用

要在 Spark 工作流程中使用适用于 EMR Serverless 的无服务器存储,请参阅以下步骤。

  1. 创建 EMR 无服务器应用程序

    通过在 spark-defaults 分类中将 spark 属性spark.aws.serverlessStorage.enabled设置为 t rue,创建启用无服务器存储的 EMR Serverless 7.12(或更高版本)应用程序。

    aws emr-serverless create-application \ --type "SPARK" \ --name my-application \ --release-label emr-7.12.0 \ --runtime-configuration '[{ "classification": "spark-defaults", "properties": { "spark.aws.serverlessStorage.enabled": "true" } }]' \ --region <AWS_REGION>
  2. 开始一个 Spark 任务

    开始在您的应用程序上运行作业。EMR 的无服务器存储 Serverless 会自动处理中间数据操作,例如作业的随机播放。

    aws emr-serverless start-job-run \ --application-id <application-id> \ --execution-role-arn <job-role-arn> \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://<bucket>/script.py", "sparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=20g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=10" } }'

    即使未在应用程序级别启用无服务器存储,您也可以在作业级别为 EMR Serverless 启用无服务器存储。这将启动启用了无服务器存储的工作节点来处理您的作业。您还可以通过将相同的 Spark 属性设置为 false spark.aws.serverlessStorage.enabled 来禁用特定作业的无服务器存储。

    # Turn on serverless storage for EMR serverless for a specific job 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.aws.serverlessStorage.enabled": "true" } }'
    注意

    要继续使用传统的本地磁盘配置,请省略spark.aws.serverlessStorage.enabled配置或将其设置为 false

注意事项和限制

  • 发布版本 — Amazon EMR 7.12 及更高版本支持无服务器存储。

  • 数据量限制 — 每个作业每次运行最多可以读取和写入 200 GB 的中间数据。超过此限制的任务将失败,并显示一条错误消息,表明已达到无服务器存储限制。

  • 任务执行超时 — 无服务器存储支持执行超时长达 24 小时的作业。为更长的执行超时配置的作业将失败并显示错误消息。

  • 预初始化容量 — 预初始化的容量工作人员不支持无服务器存储。配置预初始化容量时,只有在作业级别明确禁用无服务器存储的作业才会使用该容量。启用无服务器存储的作业将始终按需配置新的工作人员,并且无论应用程序级别的配置如何,都不会使用任何预先初始化的容量。

  • 工作负载类型-流式处理和交互式作业不支持无服务器存储。

  • 工作器配置 — 使用 1 或 2 v CPUs 的工作器不支持无服务器存储。

支持 AWS 区域

EMR Serverless 支持以下区域的无服务器存储:

  • 美国东部(弗吉尼亚州北部)

  • 美国西部(俄勒冈州)

  • 欧洲地区(爱尔兰)