调整映射器
Hive 启动 Hadoop 任务后,任务将由一个或多个映射器任务处理。假设 DynamoDB 表具有足够的吞吐量容量,可以修改集群的映射器数量,从而可能提高性能。
注意
Hadoop 任务使用的映射器任务数量受输入拆分影响,其中 Hadoop 将数据细分为逻辑块。如果 Hadoop 未执行足够的输入拆分,则写入操作可能无法占用 DynamoDB 表的所有可用写入吞吐量。
增加映射器数量
Amazon EMR 的每个映射器的最大读取速率为每秒 1 MiB。集群的映射器数量取决于集群节点的大小。(有关节点大小和每个节点的映射器数量的信息,请参见 Amazon EMR 开发人员指南的任务配置。)
如果 DynamoDB 表具有足够的读取吞吐量,则可以通过执行以下操作之一尝试增加映射器的数量:
-
增加集群的节点大小。例如,如果集群使用 m1.large 节点(每个节点有三个映射器),则可以尝试升级到 m1.xlarge 节点(每个节点八个映射器)。
-
增加集群的节点数。例如,如果具有 m1.xlarge 节点的三节点集群,则总共有 24 个可用映射器。如果集群大小翻倍,节点类型不变,则有 48 个映射器。
可以使用 Amazon Web Services Management Console 管理集群的节点大小或数量。(可能需要重启集群才能使这些更改生效。)
增加映射器数量的另一个方法是修改 mapred.tasktracker.map.tasks.maximum
Hadoop 配置参数。(这是一个 Hadoop 参数,而不是 Hive 参数。无法从命令提示符以交互方式修改。) 如果增加 mapred.tasktracker.map.tasks.maximum
值,则可以在不增加节点大小或数量的情况下增加映射器的数量。但是,如果设置的值太高,集群节点可能会耗尽内存。
首次启动 Amazon EMR 集群时,设置 mapred.tasktracker.map.tasks.maximum
值作为引导操作。有关更多信息,请参阅 Amazon EMR 管理指南的(可选)创建引导操作以安装其他软件。
减少映射器数量
如果使用 SELECT
语句从映射到 DynamoDB 的外部 Hive 表选择数据,则 Hadoop 任务可以根据需要使用任意数量的任务,最多可达集群中的映射器最大数量。在这种情况下,长时间运行 Hive 查询会占用 DynamoDB 表的所有预置读取容量,从而对其他用户产生负面影响。
可以使用 dynamodb.max.map.tasks
参数设置映射任务的上限:
SET dynamodb.max.map.tasks=1
此值必须等于或大于 1。如果 Hive 处理查询,从 DynamoDB 表读取时生成的 Hadoop 任务将使用不超过 dynamodb.max.map.tasks
。