如何解決使用 Amazon EMR 上的 Hive 匯入 DynamoDB 表時出現的「提供的金鑰元素不符合架構」錯誤?

1 分的閱讀內容
0

我嘗試使用 Hive 將 Amazon DynamoDB 表匯入 Amazon EMR 時,收到錯誤「提供的金鑰元素不符合架構 (服務: AmazonDynamoDBv2;狀態碼: 400;錯誤碼。」

解決方法

當您的架構不正確、資料損毀或資料不相符時,通常會發生此錯誤。如果排除這些常見原因後仍然收到錯誤訊息,請檢查 Hive 應用程式記錄。如果您開啟了記錄,則可以在 Amazon Simple Storage Service (Amazon S3) 上類似以下的位置找到記錄:

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

否則,您可以在 EMR 叢集的主節點上的 /mnt/var/log/hive 目錄中找到記錄。您可以連接至主節點,然後檢查記錄。記錄看起來類似下列內容:

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)

錯誤訊息中提及的列 ({"countryasin":"LOCATION '${INPUT}';","hts_type":null,"hts_code":null}) 是 Hive 腳本程式的一部分。此 Hive 腳本程式與輸入檔案位於相同的 Amazon Simple Storage Service (Amazon S3) 位置。匯入工作會將 Hive 腳本程式作為資料傳送至 DynamoDB 表格,並在匯入工作中使用該腳本程式。若要解決此問題,請將 Hive 腳本程式移至不同的 Amazon S3 位置。


相關資訊

優化 DynamoDB 中 Amazon EMR 操作的效能

DynamoDBMapper 類別

檢視記錄檔案

AWS 官方
AWS 官方已更新 1 年前