如何解决使用EMR和Hive将DynamoDB备份到S3时,只有一个映射器
我正在生产的DynamoDB表大约有15亿个对象。我正在编写一个EMR脚本以将表备份到S3。我希望尽快完成。我有一个脚本,该脚本配置了具有4个m4.2xlarge节点的EMR集群,并运行以下配置单元查询:
SET dynamodb.throughput.read.percent = 1.5;
SET dynamodb.throughput.write.percent = 1.5;
SET hive.exec.compress.output=true;
SET io.seqfile.compression.type=BLOCK;
SET mapred.output.compression.codec = org.apache.hadoop.io.compress.GzipCodec;
CREATE DATABASE IF NOT EXISTS my_db;
USE my_db;
CREATE EXTERNAL TABLE IF NOT EXISTS ddb_table (composite_key string) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "my_ddb_table","dynamodb.column.mapping" = "composite_key:composite_key");
INSERT OVERWRITE DIRECTORY 's3://s3-backups/ddb/' SELECT composite_key FROM ddb_table;
当我使用RCU按需运行脚本时,该作业会产生62个任务。当我使用预配置的RCU运行脚本时,我只会得到一个任务(每分钟消耗约800个RCU)。预配置的RCU的数量(我已经测试了40,000个RCU)或自动缩放似乎都没有改变任务的数量。似乎只有按需RCU才能创建其他任务。
除了AWS希望我支付更多钱外,是否有这种行为的原因或解决方法?调配更多的容量而少使用该调配的容量似乎违反直觉。
目前,我是使用按需RCU开始工作的,然后在工作开始后切换到预配置的...但这不是很有趣。
有什么想法吗?
解决方法
新的 EMR 版本似乎需要您需要手动指定的 dynamodb.throughput.write/read 参数(旧版本中并非如此)。例如
SET dynamodb.throughput.write=40000 // depending on your RCU
SET dynamodb.throughput.write.percent=0.9
SET dynamodb.throughput.read=40000 // depending on your WCU
SET dynamodb.throughput.read.percent=0.9
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。