Amazon Elastic MapReduce: la inserción masiva de S3 a DynamoDB es increíblemente lenta

Necesito realizar una carga inicial de aproximadamente 130 millones de elementos (5+ Gb en total) en una sola tabla de DynamoDB. Después me enfrentéproblemas Al subirlos usando la API de mi aplicación, decidí probar EMR en su lugar.

En pocas palabras, la importación de esa cantidad muy promedio (para EMR) de datos lleva mucho tiempo, incluso en el clúster más poderoso, y consume cientos de horas con muy poco progreso (aproximadamente 20 minutos para procesar la prueba de bits de datos de 2Mb, y no se logró) Para finalizar con el archivo de prueba de 700Mb en 12 horas).

Ya me he contactado con el Soporte Premium de Amazon, pero hasta el momento solo dijeron que "por alguna razón, la importación de DynamoDB es lenta".

He intentado las siguientes instrucciones en mi sesión interactiva de colmena:

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;

Varias banderas no parecen tener ningún efecto visible. Han probado las siguientes configuraciones en lugar de las predeterminadas:

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;

Los mismos comandos ejecutados para HDFS en lugar de DynamoDB se completaron en segundos.

Eso parece ser una tarea simple, un caso de uso muy básico, y realmente me pregunto qué puedo estar haciendo mal aquí.

Respuestas a la pregunta(1)

Su respuesta a la pregunta