DynamoDB 预置吞吐量 - Amazon DynamoDB

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

DynamoDB 预置吞吐量

如果针对外部 DynamoDB 表发出 HiveQL 语句,DynamoDBStorageHandler 类创建相应低级别 DynamoDB API 请求,占用预置吞吐量。如果 DynamoDB 表没有足够的读取或写入容量,请求将受到限制,导致 HiveQL 性能降低。因此,应确保该表具有足够的吞吐量。

例如,假设为 DynamoDB 表预置 100 个读取容量单位。这将允许您每秒读取 409,600 字节(100 × 4 KB 读取容量单位大小)。现在假定该表包含 20 GB 的数据(21,474,836,480 字节),希望使用 SELECT 语句通过 HiveQL 选择所有数据。可以如下估计查询需要的时间:

21474836480/409600 = 52429 秒 = 14.56 小时

在这种情况下 DynamoDB 表是一个瓶颈。添加更多 Amazon EMR 节点没有帮助,因为 Hive 吞吐量限制为每秒 409,600 字节。减少 SELECT 语句所需时间的唯一方法是增加 DynamoDB 表的预置读取容量。

可以执行类似计算估计将数据批量加载到映射到 DynamoDB 表的 Hive 外部表中所需的时间。确定每个项目所需的写入容量单位总数(小于 1 KB = 1,1-2 KB = 2 等),然后将其乘以要加载的项目数。这将为您提供所需的写入容量单位数。用该数除以每秒分配的写入容量单位数。得到加载表所需的秒数。

您应定期监控表的 CloudWatch 指标。有关 DynamoDB 控制台的快速概述,请选择表,然后选择指标选项卡。这里可以查看占用的读取和写入容量单位,以及已受到限制的读取和写入请求。

读取容量

Amazon EMR 根据表的预置吞吐量设置。管理对 DynamoDB 表的请求负载。但是,如果在任务输出中看到大量 ProvisionedThroughputExceeded 消息,可以调整默认读取速率。要执行该操作,可修改 dynamodb.throughput.read.percent 配置变量。可以使用 SET 命令在 Hive 命令提示符处设置此变量:

SET dynamodb.throughput.read.percent=1.0;

此设置仅为当前 Hive 会话保留。如果退出 Hive 并在以后返回,dynamodb.throughput.read.percent 将恢复默认值。

dynamodb.throughput.read.percent 可以在 0.11.5 之间(包括)。0.5 表示默认读取速率,这意味着 Hive 将尝试占用表的一半的读取容量。如果增加值超过 0.5,Hive 将增加请求速率;将值降低到 0.5 以下将降低读取请求速率。(实际读取速率取决于 DynamoDB 表中是否存在统一键分配的等因素。)

如果发现 Hive 经常耗尽表的预置读取容量,或者如果读取请求被限制过多,请尝试减少 dynamodb.throughput.read.percent 低于 0.5。如果表中有足够的读取容量,希望更快响应 HiveQL 操作,可以设置值超过 0.5

写入容量

Amazon EMR 根据表的预置吞吐量设置管理对 DynamoDB 表的请求负载。但是,如果在任务输出中看到大量 ProvisionedThroughputExceeded 消息,可以调整默认写入速率。要执行该操作,可修改 dynamodb.throughput.write.percent 配置变量。可以使用 SET 命令在 Hive 命令提示符处设置此变量:

SET dynamodb.throughput.write.percent=1.0;

此设置仅为当前 Hive 会话保留。如果退出 Hive 并在以后返回,dynamodb.throughput.write.percent 将恢复默认值。

dynamodb.throughput.write.percent 可以在 0.11.5 之间(包含上述两者)。0.5 表示默认写入速率,这意味着 Hive 将尝试占用表的一半的写入容量。如果增加值超过 0.5,Hive 将增加请求速率;将值降低到 0.5 以下将降低写入请求速率。(实际写入速率取决于 DynamoDB 表中是否存在统一键分配的等因素。)

如果发现 Hive 经常耗尽表的预置写入容量,或者如果写入请求被限制过多,请尝试减少 dynamodb.throughput.write.percent 低于 0.5。如果表中有足够的容量,希望更快响应 HiveQL 操作,可以设置值超过 0.5

使用 Hive 将数据写入到 DynamoDB 时,确保写入容量单位数大于集群的映射器数量。例如,假设 Amazon EMR 集群包含 10 个 m1.xlarge 节点。m1.xlarge 节点类型提供 8 个映射器任务,因此集群总共有 80 个映射器 (10 × 8)。如果 DynamoDB 表的写入容量单位少于 80,则 Hive 写入操作可能会占用该表的所有写入吞吐量。

要确定 Amazon EMR 节点类型的映射器数量,请参见 Amazon EMR 开发人员指南任务配置

有关映射器的更多信息,请参阅 调整映射器