J'ai fait référence à ce lien: http://docs.aws.amazon.com/emr/latest/ReleaseGuide/EMR_Hive_Commands.html.Exporter Dynamodb à S3 en utilisant Hive
Mon script ruche est comme ci-dessous:
DROP TABLE IF EXISTS hiveTableName;
CREATE EXTERNAL TABLE hiveTableName (item map<string,string>)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES ("dynamodb.table.name" = "test_table", "dynamodb.region"="us-west-2");
DROP TABLE IF EXISTS s3TableName;
CREATE EXTERNAL TABLE s3TableName (item map<string, string>)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'
LOCATION 's3://bucket/test-hive2';
SET dynamodb.throughput.read.percent=0.8;
INSERT OVERWRITE TABLE s3TableName SELECT *
FROM hiveTableName;
Table DynamoDB peut être exporté avec succès à S3, mais le format de fichier n'est pas JSON, il est comme:
uuid{"s":"db154955-8555-4b49-bf40-ee36605ac510"}num{"n":"1294"}info{"s":"qwefjdkslafjdafl"}
uuid{"s":"d9898564-2b56-42ba-9cfb-fd092e7d0b8d"}num{"n":"100"}info{"s":"qwefjdkslafjdafl"}
Est-ce que quelqu'un sait comment exporter au format JSON? Je sais que je peux utiliser Data Pipeline, et il peut exporter la table dynamodb vers S3 au format JSON, mais pour une raison quelconque, j'ai besoin d'utiliser EMR. J'ai essayé un autre outil: https://github.com/awslabs/emr-dynamodb-connector, et utiliser la commande:
java -cp target/emr-dynamodb-tools-4.2.0-SNAPSHOT.jar org.apache.hadoop.dynamodb.tools.DynamoDBExport /where/output/should/go my-dynamo-table-name
mais l'erreur a été
Error: Could not find or load main class org.apache.hadoop.dynamodb.tools.DynamoDBExport
Quelqu'un peut-il me dire comment résoudre ces problèmes? Merci.
mise à jour == ==
Si je to_json, comme Chris a suggéré, mon code est comme ci-dessous:
DROP TABLE IF EXISTS hiveTableName2;
CREATE EXTERNAL TABLE hiveTableName2 (item map<string, string>)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES ("dynamodb.table.name" = "test_table", "dynamodb.region"="us-west-2");
DROP TABLE IF EXISTS s3TableName2;
CREATE EXTERNAL TABLE s3TableName2 (item string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'
LOCATION 's3://backup-restore-dynamodb/hive-test';
INSERT OVERWRITE TABLE s3TableName2 SELECT to_json(item)
FROM hiveTableName2;
Quand je regarde le fichier généré, il est comme
{"uuid":"{\"s\":\"db154955-8555-4b49-bf40-ee36605ac510\"}","num":"{\"n\":\"1294\"}","info":"{\"s\":\"qwefjdkslafjdafl\"}"}
Ce que je veux est une carte imbriquée, comme
map<string, map<string, string>>
pas
map<string, string>
Quelqu'un peut-il me donner quelques suggestions? Merci.
Merci Chris! Mais j'ai toujours un problème, s'il vous plaît se référer à la question mise à jour. –