我们使用运行在emr5.2.0上的hive将许多文件运行到dynamo表。表上配置的吞吐量为每秒3000次写入。
不管配置单元脚本中设置的吞吐量百分比是多少,我们只能达到2000次写入。
配置单元执行引擎设置为mr,dynamo.throughput.read.percent设置为1.0。我们使用emr来运行commandrunner的步骤。到目前为止,我们还找不到任何原因来解释为什么它只使用了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作为写入吞吐量,我们就能够在配置量内实现最佳写入,这让我想到可能是集群的设置导致了问题?
1条答案
按热度按时间kx5bkwkv1#
读写百分比设置是最大努力速率限制器。dynamodb连接器根据一个项目大小启发式方法估计读写容量,可能并不总是正确的。这就是为什么你实际上可以“过度提供”读写高达1.5(150%),所以你应该试试。
另一个可能导致您的写容量没有达到设置的限制的因素是密钥空间中存在热点。如果一个分区中的项目比其他分区中的项目多,那么利用率将不均衡,并且您将在(一个或两个分区)上遇到限制,即使您没有对整个表使用完全配置的速率。有3000个写容量单元和一些读取,表至少有4个分区,所以这肯定是一个因素。