本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 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 的无服务器存储,请参阅以下步骤。
-
创建 EMR 无服务器应用程序
通过在 spark-defaults 分类中将 spark 属性
spark.aws.serverlessStorage.enabled设置为 t rue,创建启用无服务器存储的 EMR Serverless 7.12(或更高版本)应用程序。aws emr-serverless create-application \ --type "SPARK" \ --namemy-application\ --release-label emr-7.12.0 \ --runtime-configuration '[{ "classification": "spark-defaults", "properties": { "spark.aws.serverlessStorage.enabled": "true" } }]' \ --region<AWS_REGION> -
开始一个 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 支持以下区域的无服务器存储:
-
美国东部(弗吉尼亚州北部)
-
美国西部(俄勒冈州)
-
欧洲地区(爱尔兰)