当我使用 Apache Hive 将 Amazon DynamoDB 表导入 Amazon EMR 时,我收到了“Provided key element doesn’t match the schema”(提供的键元素与架构不匹配)错误。
解决方法
当您的架构不正确、数据损坏或数据不匹配时,您可能会收到以下错误:
“提供的键元素与架构不匹配(服务: 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 日志文件