#amazon-web-services #amazon-dynamodb #amazon-emr
#amazon-web-services #amazon-dynamodb #amazon-emr
Вопрос:
У меня есть готовая таблица DynamoDB с примерно 1,5 миллиардами объектов. Я пишу сценарий EMR для резервного копирования таблицы в S3. Я бы предпочел, чтобы это было сделано как можно быстрее. У меня есть скрипт, который обеспечивает кластер EMR с 4 узлами размером m4.2x и выполняет следующие запросы hive:
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 по требованию, а затем переключаюсь на provisioned после запуска задания…но это не очень весело.
Есть идеи?
Комментарии:
1. Интересно, что эта проблема возникает только при чтении данных из моей таблицы dynamo, а не при записи в мою таблицу dynamo.
Ответ №1:
Похоже, что для новых версий EMR требуется dynamodb.пропускная способность.параметры записи / чтения, которые необходимо указать вручную (чего не было в более старых версиях). Например.
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