首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >亚马逊弹性MapReduce -从S3到DynamoDB的批量插入速度非常慢

亚马逊弹性MapReduce -从S3到DynamoDB的批量插入速度非常慢
EN

Stack Overflow用户
提问于 2012-05-21 17:58:58
回答 1查看 7K关注 0票数 17

我需要将大约1.3亿个项目(总计为5+ Gb )初始上传到一个DynamoDB表中。当我面对problems从我的应用程序中使用API上传它们时,我决定尝试电子病历。

长话短说,即使在最强大的集群上,导入非常平均(对于EMR)的数据量也需要很长时间,耗费数百个小时,几乎没有进展(大约20分钟处理测试2Mb数据位,并且没有设法在12小时内完成测试700Mb文件)。

我已经联系了亚马逊高级支持,但到目前为止,他们只告诉我“由于某种原因,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目标运行的相同命令。

这似乎是一个简单的任务,一个非常基本的用例,我真的想知道我在这里能做错什么。

EN

回答 1

Stack Overflow用户

发布于 2021-12-23 19:40:15

上周我也遇到了同样的问题。我做了一些注释,以缩短在DynamoDB中写入数据的时间

  1. 查找输入文件,如果它们是压缩的,则配置单元不能拆分超过文件数,您将减少可能的映射器数量。

  1. 将reducers的数量设置为1或-1,看起来它们使用的并不多,这将为映射器打开插槽。

dynamodb中的wcu如果您使用的是提供的容量,则需要设置要使用的

  1. 的数量。请记住,hive将尽量不会消耗超过dynamodb.throughput.write.percent中的百分比。如果您使用的是弹性伸缩,请将write.percent设置为该目标百分比的最高值,以保证其可伸缩。或者把它放在点播上,不用担心这个,但它更贵。

  1. 您可以更改实例的内存配置来尝试获取更多的映射器,在上面的页面中可以查看默认配置,使其更改mapreduce.map.memory.mb和mapreduce.reduce.memory.mb。这里要小心,你可能会出现内存不足的错误。https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hadoop-task-config.html

相关的一些链接

http://cloudsqale.com/2018/10/22/tez-internals-1-number-of-map-tasks/

https://github.com/awslabs/emr-dynamodb-connector

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.PerformanceTuning.Mappers.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10683136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档