从 Amazon DynamoDB 读取或写入操作时,如何优化 AWS Glue ETL 工作负载?

上次更新日期:2021 年 8 月 16 日

我想优化我的 AWS Glue 提取、转换和负载 (ETL) 作业,以便从 Amazon DynamoDB 读取或写入操作。

-或者-

我的 AWS Glue ETL 任务会导致我的 DynamoDB 表出现节流异常。

解决方法

在创建要读取或写入 DynamoDB 表的 AWS Glue ETL 任务之前,请考虑以下配置更新。这些更新可以帮助优化 AWS Glue 和 DynamoDB 中资源的使用。

从 DynamoDB 中阅读

  • dynamodb.throughput.read.percent:此配置变量表示要使用的读取容量单位 (RCU) 的百分比。此变量的原定设置值设为 0.5。可接受的值范围从 0.11.5(也包含上述两个数字)。值 0.5 表示 AWS Glue 任务试图消耗表的一半读取容量。实际读取率取决于因素,例如 DynamoDB 表中是否有统一的密钥分配。
    使用此示例计算任务的大致运行时间:假设您为 DynamoDB 表预置了 100 个 RCU。使用 1 个 RCU,您可以读取 4 KB 的数据。使用 100 个 RCU,您可以每秒执行 100 次读取 409,600 字节。假设您的表有 20 GB(21,474,836,480 字节)的数据,并且您已将 dynamodb.throughput.read.percent 的值设置为 1.0。这意味着您的任务使用 100% 的 RCU 执行全表扫描。
    然后,您可以按如下方式计算任务的大致运行时间:
    表的大小/每秒读取的字节数 = 21,474,836,480 /409,600 = 52,429 秒 = 14.56 小时
    为了缩短任务的运行时间,可以通过为 dynamodb.throughput.read.percent 设置适当的值来增加 RCU 的数量。有关更多信息,请参阅读取容量
    如果 DynamoDB 表很大,则为表选择按需读/写容量模式,而不是预置模式。您可以在创建新表时选择按需读/写容量模式,或者在现有表的容量选项卡中更新此设置。有关更多信息,请参阅读/写入容量模式
  • dynamodb.split:此连接选项定义了读取数据时表被分区到的分割数量。原定设置值将设为 1。可接受的值范围为 11,000,0000(也包含上述两个数字)。值 1 表示没有并行性。为此变量设置更高的值是最佳实践。可以实现的并行度取决于 AWS Glue 工件类型以及为该任务配置的工作人员数量。要计算可用作 dynamodb.split 值的 numSlots,请使用 "connectionType": "dynamodb" 作为源"dynamodb.splits" 下的公式。

写入 DynamoDB

  • dynamodb.throughput.write.percent:此配置变量定义了要使用的写入容量单位 (WCU) 的百分比。原定设置值将设为 0.5。可接受的值范围从 0.11.5(也包含上述两个数字)。值 0.5 表示 AWS Glue 尝试消耗表的一半写入容量。实际写入率取决于各种因素,例如 DynamoDB 表中是否有统一的密钥分配。根据您的使用案例更新此变量的值。
    如果 DynamoDB 表很大,那么最佳实践是为表选择按需读/写容量模式,而不是预置模式。
    有关更多信息,请参阅 "connectionType": "dynamodb" 作为 Sink 下面的 "dynamodb.throughput.write.percent"
  • Dynamodb.output.numParallelTask:此连接选项定义了同时写入 DynamoDB 的并行任务的数量。请注意,这是一个可选参数。如果不指定此参数,那么 numParallelTasks 值将根据 numPartitions numSlotsnumExecutors 计算。该值可以用作 dynamodb.output.numParallelTasks 的值。有关详细的公式,请参阅 "connectionType": "dynamodb" 作为 Sink 下面的 "dynamodb.output.numParallelTasks"

有关显示如何从 DynamoDB 表中读取和写入操作的代码示例,请参阅代码示例


这篇文章对您有帮助吗?


您是否需要账单或技术支持?