【发布时间】:2012-05-27 19:53:21
【问题描述】:
我需要将大约 1.3 亿个项目(总共 5+ Gb)初始上传到单个 DynamoDB 表中。在我遇到 problems 使用我的应用程序中的 API 上传它们之后,我决定尝试使用 EMR。
长话短说,即使在最强大的集群上,导入该非常平均(对于 EMR)的数据量也需要很长时间,花费数百小时而几乎没有进展(大约 20 分钟来处理测试 2Mb 数据位,并且没有'无法在 12 小时内完成测试 700Mb 文件)。
我已经联系了 Amazon Premium Support,但到目前为止他们只告诉“由于某种原因 DynamoDB 导入速度很慢”。
我在交互式 hive 会话中尝试了以下说明:
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 中存在某种问题”,差不多一周就没有了 :( 如果知道更多,我会更新。所以到目前为止,我切换到本地数据库。
-
我还尝试在不同的区域运行场景,并且还从脚本而不是从交互会话运行它。没有区别。
-
嗨,Dan,请在下面查看我自己发布的答案(我从 AWS 支持部门获得了一些反馈)。
标签: amazon-s3 hive amazon-dynamodb amazon-emr