Hive를 사용하여 Amazon DynamoDB 테이블을 Amazon EMR로 가져오려고 하면 "The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code)" 오류 메시지가 나타납니다.
해결 방법
이 오류는 일반적으로 잘못된 스키마, 손상된 데이터 또는 일치하지 않는 데이터가 있을 때 발생합니다. 이러한 가장 일반적인 원인을 제거한 후에도 오류 메시지가 나타난다면 Hive 애플리케이션 로그를 확인해 보세요. 로깅을 설정했다면 Amazon Simple Storage Service(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 클래스
로그 파일 보기