Lorsque j'essaie d'importer des tables Amazon DynamoDB dans Amazon EMR via Hive, je reçois l'erreur suivante : « The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code » (L'élément clé fourni ne correspond pas au schéma (Service : AmazonDynamoDBv2 ; Code d'état : 400 ; Code d'erreur).
Résolution
Cette erreur se produit généralement lorsque vous avez un schéma incorrect, des données corrompues ou non appariées. Si le message d'erreur s'affiche toujours après que vous ayez éliminé ces causes courantes, vérifiez les journaux de l'application Hive. Si vous avez activé la journalisation, vous pouvez trouver les journaux sur Amazon Simple Storage Service (Amazon S3) à l'emplacement qui ressemble à ce qui suit :
s3://example-log-location/example-cluster-id/node/example-ec2-master-instance-id/applications/hive
Sinon, vous pouvez trouver ces journaux dans le répertoire /mnt/var/log/hive sur le nœud principal du cluster EMR. Vous pouvez vous connecter au nœud principal, puis rechercher des journaux. Les journaux ressemblent à ce qui suit :
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row {"countryasin":"LOCATION '${INPUT}';","hts_type":null,"hts_code":null}
at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:565)
at org.apache.hadoop.hive.ql.exec.tez.MapRecordSource.processRow(MapRecordSource.java:86)
... 17 more
Caused by: java.lang.RuntimeException: com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: 0FF3KB36M2SJD8E79BUPOUP943VV4KQNSO5AEMVJF66Q9ASUAAJG)
La ligne mentionnée dans le message d'erreur ({"countryasin":"LOCATION '${INPUT}';","hts_type":null,"hts_code":null}) fait partie du script Hive. Ce script Hive se trouve dans le même emplacement d'Amazon Simple Storage Service (Amazon S3) que les fichiers d'entrée. La tâche d'importation envoie le script Hive à la table DynamoDB sous forme de données et l'utilise dans la tâche d'importation. Pour résoudre ce problème, placez le script Hive dans un emplacement différent d'Amazon S3.
Informations connexes
Optimisation des performances pour les opérations Amazon EMR dans DynamoDB
Classe DynamoDBMapper
Afficher les fichiers journaux