我需要将大约1.3亿个项目(总共5+ Gb)的初始上传执行到单个DynamoDB表中。在我面对problems上传使用我的应用程序中的API后,我决定尝试使用EMR。长期以来,即使在最强大的群集中,导入非常平均(用于EMR)的数据量也需要很长时间,耗时数百小时,进展非常小(大约20分钟来处理测试2Mb数据位,并且没有设法在12小时内完成测试700Mb文件)。Amazon Elastic MapReduce - 从S3到DynamoDB的大容量插入速度非常慢
我已经联系了Amazon Premium Support,但到目前为止,他们只告诉“由于某种原因,DynamoDB导入速度很慢”。
我曾尝试以下说明我的互动蜂巢会话:
CREATE EXTERNAL TABLE test_medium (
hash_key string,
range_key bigint,
field_1 string,
field_2 string,
field_3 string,
field_4 bigint,
field_5 bigint,
field_6 string,
field_7 bigint
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
LOCATION 's3://my-bucket/s3_import/'
;
CREATE EXTERNAL TABLE ddb_target (
hash_key string,
range_key bigint,
field_1 bigint,
field_2 bigint,
field_3 bigint,
field_4 bigint,
field_5 bigint,
field_6 string,
field_7 bigint
)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES (
"dynamodb.table.name" = "my_ddb_table",
"dynamodb.column.mapping" = "hash_key:hash_key,range_key:range_key,field_1:field_1,field_2:field_2,field_3:field_3,field_4:field_4,field_5:field_5,field_6:field_6,field_7:field_7"
)
;
INSERT OVERWRITE TABLE ddb_target SELECT * FROM test_medium;
各种标志似乎不会有任何明显的效果。已尝试以下设置而不是默认设置:
SET dynamodb.throughput.write.percent = 1.0;
SET dynamodb.throughput.read.percent = 1.0;
SET dynamodb.endpoint=dynamodb.eu-west-1.amazonaws.com;
SET hive.base.inputformat=org.apache.hadoop.hive.ql.io.HiveInputFormat;
SET mapred.map.tasks = 100;
SET mapred.reduce.tasks=20;
SET hive.exec.reducers.max = 100;
SET hive.exec.reducers.min = 50;
运行HDFS而不是DynamoDB目标的相同命令在几秒钟内完成。
这似乎是一个简单的任务,一个非常基本的用例,我真的很想知道我在这里可能会做什么错。
你在同一个过程中领先我一步,我不喜欢我在这里看到的..有没有人有成功的故事在这里分享(大数据导入到发电机)? –
我已经联系了Amazon Premium Support,他们只确认了这个问题,并承认“DynamoDB中存在某种问题”,几乎在一周内没有更多:(如果知道更多,我会更新。到目前为止,我切换到本地数据库。 – Yuriy
我也尝试在不同地区运行场景,并且也从脚本运行而不是从交互会话运行。 – Yuriy