Wie behebe ich den Fehler „Das bereitgestellte Schlüsselelement entspricht nicht dem Schema“ beim Import von DynamoDB-Tabellen mit Hive in Amazon EMR?

Lesedauer: 2 Minute
0

Wenn ich versuche, Amazon DynamoDB-Tabellen mithilfe von Hive in Amazon EMR zu importieren, erhalte ich die Fehlermeldung „Das bereitgestellte Schlüsselelement entspricht nicht dem Schema (Service: AmazonDynamoDBv2; Statuscode: 400; Fehlercode.“

Lösung

Dieser Fehler tritt normalerweise auf, wenn Sie ein falsches Schema, beschädigte Daten oder nicht übereinstimmende Daten haben. Wenn Sie nach dem Ausschluss dieser häufigen Ursachen immer noch die Fehlermeldung erhalten, überprüfen Sie die Hive-Anwendungsprotokolle. Wenn Sie die Protokollierung aktiviert haben, finden Sie die Protokolle auf Amazon Simple Storage Service (Amazon S3) an einem Ort, der etwa wie folgt aussieht:

s3://example-log-location/example-cluster-id/node/example-ec2-master-instance-id/applications/hive

Andernfalls finden Sie die Protokolle im Verzeichnis /mnt/var/log/hive auf dem Master-Knoten des EMR-Clusters. Sie können eine Verbindung zum Master-Knoten herstellen und dann nach Protokollen suchen. Die Protokolle sehen in etwa wie folgt aus:

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)

Die Zeile, die in der Fehlermeldung erwähnt wird ({"countryasin“: LOCATION '$ {INPUT} ';“, "hts\ _type“:null, "hts\ _code“:null}) ist Teil des Hive-Skripts. Dieses Hive-Skript befindet sich am selben Amazon Simple Storage Service (Amazon S3)-Speicherort wie die Eingabedateien. Der Importjob sendet das Hive-Skript als Daten an die DynamoDB-Tabelle und verwendet es im Importjob. Um dieses Problem zu lösen, verschieben Sie das Hive-Skript an einen anderen Amazon S3-Speicherort.


Ähnliche Informationen

Optimierung der Leistung für Amazon EMR-Operationen in DynamoDB

DynamoDbMapper-Klasse

Protokolldateien anzeigen

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr