Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

DynamoDB 配置的吞吐量

当您对 DynamoDB 外部表发出 HiveQL 语句时,DynamoDBStorageHandler 类会发出相应的低级 DynamoDB API 请求,这会占用预配置吞吐量。如果 DynamoDB 表上的读取或写入容量不足,请求将被阻止,导致 HiveQL 性能降低。因此,您应确保此表具有足够的吞吐容量。

例如,假设您为 DynamoDB 表预配置了 100 个读取容量单位。这将使您可以每秒读取 409600 字节 (100 × 4 KB 读取容量单位大小)。现在假设此表包含 20 GB 数据 (21474836480 字节),并且您想使用 HiveQL 的 SELECT 语句选择所有数据。您可以预估运行查询需要的时间,如下所示:

21474836480/409600 = 52429 秒 = 14.56 小时

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

您可以执行类似的计算来预估将数据批量加载到映射到 DynamoDB 表的 Hive 外部表中需要多长时间。确定要加载的数据中的总字节数,然后除以一个 DynamoDB 写入容量单位大小 (1 KB)。这将得出加载此表需要的秒数。

您应该定期监控您的表的 CloudWatch 指标。如需查看 DynamoDB 控制台的简要概述,请选择您的表,然后选择 Metrics 选项卡。在这里,您可以查看已占用的读取和写入容量单位以及已限制的读取和写入请求。

读取容量

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

Copy
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 命令提示符下设置此变量:

Copy
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 中时,应确保写入容量单位数大于集群中的映射器数。例如,考虑包括 10 个 m1.xlarge 节点的 Amazon EMR 集群。m1.xlarge 节点类型提供 8 个映射器任务,因此集群将一共有 80 个映射器 (10 × 8)。如果您的 DynamoDB 表中拥有的写入容量单位少于 80 个,则 Hive 写入操作可能会占用该表的所有写入吞吐量。

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

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

本页内容: