我们正在使用运行在EMR 5.2.0上的Hive来运行许多文件到Dynamo表。表上的预配置吞吐量是每秒3000次写入。
无论Hive脚本中设置的吞吐量百分比如何,我们都只能达到2000次写入。
Hive执行引擎设置为mr,dynamo.throughput.read.percent设置为1.0。 我们使用EMR使用command-runner运行该步骤。到目前为止,我们无法找到任何原因,为什么它只使用2/3的配置写入。
非常感谢任何建议或帮助,谢谢。
编辑添加配置单元脚本:
SET hive.execution.engine=mr;
DROP TABLE IF EXISTS s3_import;
DROP TABLE IF EXISTS dynamo_import;
CREATE EXTERNAL TABLE s3_import(fld string, dateRef string)
ROW FORMAT
DELIMITED FIELDS
TERMINATED BY ','
ESCAPED BY '\\'
LOCATION 's3n://${s3Path}';
CREATE EXTERNAL TABLE dynamo_import(fld string, dateRef string)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES ("dynamodb.table.name" = '${tableName}',
"dynamodb.throughput.read.percent" = '${rp}',
"dynamodb.throughput.write.percent" = '${wp}',
"dynamodb.column.mapping" = "fld:fld,dateRef:dateRef");
INSERT OVERWRITE TABLE dynamo_import SELECT * FROM s3_import;
编辑: 如果我并行运行两个使用0.5作为写入吞吐量的应用程序,我们能够在预配量内实现最佳写入,这使我认为群集中可能存在导致问题的设置?
答案 0 :(得分:0)
读取和写入百分比设置是尽力而为速率限制器。 DynamoDB连接器根据项目大小启发式估计读取和写入容量,并且可能并不总是正确。这就是为什么你实际上可以“过度配置”读写高达1.5(150%),所以你应该尝试。
实际上可能导致写入容量未达到预设限制的另一件事是密钥空间中存在热点。如果一个分区中的项目多于其他分区,则利用率将不均匀,即使您没有使用整个表格的完整预配速率,也会在(一个或两个分区)上进行限制。有3000个写入容量单位和一些读取,你的表至少有4个分区,所以这肯定是一个因素。