以下是我如何在十亿条记录 DynamoDB 表上获得确切的项目数:
蜂巢>
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 处理程序发出“并行扫描”,多个 Mapreduce 映射器(AKA Worker)在不同的分区上工作以获取计数。这将比普通扫描更有效和更快。
*您必须愿意在一段时间内将读取容量提高到非常高的水平。* 在一个相当大的(20 节点)集群上,拥有 10000 个 RCU,需要 15 分钟才能计算十亿条记录。
* 在此期间对该 DDB 表的新写入会导致计数不一致。