當我使用 Apache Hive 將 Amazon DynamoDB 資料表匯入 Amazon EMR 時,收到「提供的關鍵元素與結構描述不符」錯誤。
解決方法
當結構描述不正確、資料損壞或資料不符時,您可能會收到以下錯誤:
「提供的關鍵元素與結構描述不符 (服務: AmazonDynamoDBv2;狀態代碼: 400;錯誤代碼: ValidationException; 請求 ID: #ABC###########)」
如果結構描述不正確、資料損壞或資料不符沒有導致錯誤,請檢查 Hive 應用程式日誌。若要尋找 Hive 應用程式日誌,請連線至 Amazon EMR 叢集的主節點,並導覽至 /mnt/var/log/hive 目錄。
如果您已開啟記錄,則可以在 Amazon Simple Storage Service (Amazon S3) 中找到日誌。使用類似於 s3://log-location/cluster-id/node/primary-instance-id/applications/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 S3 位置。匯入作業會將 Hive 指令碼作為資料傳送到 DynamoDB 表,並在匯入作業中使用。若要解決此問題,請將 Hive 指令碼移至其他 Amazon S3 位置。
相關資訊
查看 Amazon EMR 日誌檔案