我需要將大約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