in emr-dynamodb-tools/src/main/java/org/apache/hadoop/dynamodb/tools/DynamoDBExport.java [100:149]
private void setTableProperties(JobConf jobConf, String tableName, Double readRatio, Integer
totalSegments) {
jobConf.set(DynamoDBConstants.TABLE_NAME, tableName);
jobConf.set(DynamoDBConstants.INPUT_TABLE_NAME, tableName);
jobConf.set(DynamoDBConstants.OUTPUT_TABLE_NAME, tableName);
DynamoDBClient client = new DynamoDBClient(jobConf);
TableDescription description = client.describeTable(tableName);
Long itemCount = description.getItemCount();
Long tableSizeBytes = description.getTableSizeBytes();
if (description.getBillingModeSummary() == null
|| description.getBillingModeSummary().getBillingMode()
.equals(DynamoDBConstants.BILLING_MODE_PROVISIONED)) {
jobConf.set(DynamoDBConstants.READ_THROUGHPUT,
description.getProvisionedThroughput().getReadCapacityUnits().toString());
jobConf.set(DynamoDBConstants.WRITE_THROUGHPUT,
description.getProvisionedThroughput().getWriteCapacityUnits().toString());
} else {
// If not specified at the table level, set a hard coded value of 40,000
jobConf.set(DynamoDBConstants.READ_THROUGHPUT,
DynamoDBConstants.DEFAULT_CAPACITY_FOR_ON_DEMAND.toString());
jobConf.set(DynamoDBConstants.WRITE_THROUGHPUT,
DynamoDBConstants.DEFAULT_CAPACITY_FOR_ON_DEMAND.toString());
}
jobConf.set(DynamoDBConstants.ITEM_COUNT, itemCount.toString());
jobConf.set(DynamoDBConstants.TABLE_SIZE_BYTES, tableSizeBytes.toString());
Double averageItemSize = DynamoDBUtil.calculateAverageItemSize(description);
jobConf.set(DynamoDBConstants.AVG_ITEM_SIZE, averageItemSize.toString());
log.info("Read throughput: " + jobConf.get(DynamoDBConstants.READ_THROUGHPUT));
log.info("Write throughput: " + jobConf.get(DynamoDBConstants.WRITE_THROUGHPUT));
log.info("Item count: " + itemCount);
log.info("Table size: " + tableSizeBytes);
log.info("Average item size: " + averageItemSize);
// Optional properties
if (readRatio != null) {
jobConf.set(DynamoDBConstants.THROUGHPUT_READ_PERCENT, readRatio.toString());
log.info("Throughput read ratio: " + readRatio);
}
if (totalSegments != null) {
jobConf.set(DynamoDBConstants.SCAN_SEGMENTS, totalSegments.toString());
log.info("Total segment count: " + totalSegments);
}
}