Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 Amazon Elastic MapReduce-从S3到DynamoDB的质量插入速度非常慢_Amazon S3_Hive_Amazon Dynamodb_Amazon Emr - Fatal编程技术网

Amazon s3 Amazon Elastic MapReduce-从S3到DynamoDB的质量插入速度非常慢

Amazon s3 Amazon Elastic MapReduce-从S3到DynamoDB的质量插入速度非常慢,amazon-s3,hive,amazon-dynamodb,amazon-emr,Amazon S3,Hive,Amazon Dynamodb,Amazon Emr,我需要将大约1.3亿个项目(总共5+Gb)的初始上传到一个DynamoDB表中。在我从应用程序中使用API上传它们之后,我决定尝试使用EMR 长话短说,即使在功能最强大的集群上,导入如此平均(对于EMR)的数据量也需要很长的时间,耗时数百小时,但进展很小(处理测试2Mb数据位大约需要20分钟,并且无法在12小时内完成测试700Mb文件) 我已经联系了Amazon Premium支持部门,但到目前为止,他们只告诉我“出于某种原因,DynamoDB的导入速度很慢” 我在交互式配置单元会话中尝试了以下

我需要将大约1.3亿个项目(总共5+Gb)的初始上传到一个DynamoDB表中。在我从应用程序中使用API上传它们之后,我决定尝试使用EMR

长话短说,即使在功能最强大的集群上,导入如此平均(对于EMR)的数据量也需要很长的时间,耗时数百小时,但进展很小(处理测试2Mb数据位大约需要20分钟,并且无法在12小时内完成测试700Mb文件)

我已经联系了Amazon Premium支持部门,但到目前为止,他们只告诉我“出于某种原因,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目标运行的相同命令在几秒钟内完成


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

这是我最近从AWS支持部门得到的答案。希望这能帮助处于类似情况的人:

EMR工作人员目前作为单线程工作人员实施, 每个工作人员逐个写入项(使用Put,而不是BatchWrite)。
因此,每次写入消耗1个写入容量单位(IOP)

这意味着你建立了很多联系 在某种程度上降低了性能。如果使用了批处理写入,则 这意味着您可以在一个操作中提交多达25行 在性能方面成本更低(但如果我理解的话,价格相同 这是正确的)。这是我们已经意识到的,并且可能会发生的事情 在未来的EMR中实现。但我们不能提供时间表

如前所述,这里的主要问题是DynamoDB中的表 正在达到配置的吞吐量,因此请尝试增加吞吐量 暂时用于导入,然后可以将其减少到 不管你需要什么级别

这听起来可能有点方便,但有一个问题 执行此操作时发出警报,这就是您从未收到通知的原因 警觉的。从那以后,问题已经解决了


在同样的过程中,你比我领先了一步,我不喜欢我在这里看到的。。有没有人可以在这里分享成功的故事(将大数据导入dynamo)?我已经联系了Amazon Premium支持,他们只是确认了这个问题,并承认“DynamoDB中存在某种问题”,在近一周的时间里没有更多的事了:(如果知道更多,我会更新。到目前为止,我切换到了本地数据库。我还尝试在不同的地区运行该场景,并通过脚本而不是交互会话运行它。没有区别。嗨,丹,请参阅下面我自己发布的答案(我从AWS支持部门获得了一些反馈).+1,感谢您继续关注这个奇怪的问题-谢谢!这是否意味着您现在已通过临时增加配置的写入吞吐量来加速导入?老实说,我还没有尝试过,因为我正忙于实施基于本地托管数据库的替代解决方案:(这对我来说不再是合适的方法,但无论如何都会很快完成测试,并且会考虑将来的项目。另外一个原因是我现在的吞吐量(400个单位)。添加样本60K记录需要花费一个小时的时间,根据解释和我对DynamoDB阈值应用方式的理解,不应该这样做。@Yuriy如果您的hashkey分布不均匀或种类不够,也会导致IO瓶颈。DynamoDB使用hashkey进行分区。“因此,每次写入消耗1个写入容量单位(IOP)。”-仅澄清一条记录并不一定意味着1个写入吞吐量单位。它也基于记录大小。请参阅: