这是我如何在拥有十亿条记录的 DynamoDB 表上获取准确的项目计数的方法:
hive>
set dynamodb.throughput.write.percent = 1;
set dynamodb.throughput.read.percent = 1;
set hive.execution.engine = mr;
set mapreduce.reduce.speculative=false;
set mapreduce.map.speculative=false;
CREATE EXTERNAL TABLE dynamodb_table (`ID` STRING,`DateTime` STRING,`ReportedbyName` STRING,`ReportedbySurName` STRING,`Company` STRING,`Position` STRING,`Country` STRING,`MailDomain` STRING) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "BillionData", "dynamodb.column.mapping" = "ID:ID,DateTime:DateTime,ReportedbyName:ReportedbyName,ReportedbySurName:ReportedbySurName,Company:Company,Position:Position,Country:Country,MailDomain:MailDomain");
SELECT count(*) FROM dynamodb_table;
*您应该拥有一个EMR集群,其中安装了Hive和DynamoDB记录处理程序。
*使用此命令,Hive上的DynamoDB处理程序会发出“PARALLEL SCANS”,多个Mapreduce映射器(也称为工作程序)在不同的分区上工作以获取计数。这比普通扫描更有效率和更快。
*您必须愿意在一定时间内将读取容量提高到非常高的水平。
*在一个体量适中的(20个节点)集群上,使用10000 RCU,大约需要15分钟才能对十亿条记录进行计数。
*在此期间对此DDB表进行的新写入将使计数不一致。