DynamoDB 预置吞吐量 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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 开发人员指南任务配置

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