如何解决在 Amazon EMR 上使用 Hive 导入 DynamoDB 表时出现的错误“The provided key element does not match the schema(提供的密钥元素与模式不匹配)”?

1 分钟阅读
0

我在尝试使用 Hive 将 Amazon DynamoDB 表导入到 Amazon EMR 时,收到错误消息“The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code. [提供的密钥元素与模式不匹配(服务: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)

The row that's mentioned in the error message ({"countryasin":"LOCATION '${INPUT}';","hts_type":null,"hts_code":null}) is part of the Hive script.此 Hive 脚本与输入文件位于 Amazon Simple Storage Service (Amazon S3) 的同一位置。导入作业将 Hive 脚本作为数据发送到 DynamoDB 表中,同时在导入作业中使用该脚本。要解决此问题,请将 Hive 脚本移至 Amazon S3 中的其他位置。


相关信息

在 DynamoDB 中优化 Amazon EMR 操作的性能

DynamoDBMapper 类

查看日志文件

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