vks*_*vks 10 java hadoop hive amazon-emr
例外:
2017-06-21 22:47:49,993 FATAL ExecMapper (main): org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing writable org.apache.hadoop.dynamodb.DynamoDBItemWritable@2e17578f
at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:643)
at org.apache.hadoop.hive.ql.exec.ExecMapper.map(ExecMapper.java:149)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:441)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:377)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1132)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
Caused by: java.lang.RuntimeException: Exception while processing record: org.apache.hadoop.dynamodb.DynamoDBItemWritable@2e17578f
at org.apache.hadoop.hive.dynamodb.DynamoDBObjectInspector.getColumnData(DynamoDBObjectInspector.java:136)
at org.apache.hadoop.hive.dynamodb.DynamoDBObjectInspector.getStructFieldData(DynamoDBObjectInspector.java:97)
at org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorConverters$StructConverter.convert(ObjectInspectorConverters.java:328)
at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:626)
... 9 more
Caused by: java.lang.NumberFormatException: For input string: "17664956244983174066"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:444)
at java.lang.Long.parseLong(Long.java:483)
at org.apache.hadoop.hive.dynamodb.DynamoDBDataParser.getNumberObject(DynamoDBDataParser.java:179)
at org.apache.hadoop.hive.dynamodb.type.HiveDynamoDBNumberType.getHiveData(HiveDynamoDBNumberType.java:28)
at org.apache.hadoop.hive.dynamodb.DynamoDBObjectInspector.getColumnData(DynamoDBObjectInspector.java:128)
... 12 more
Run Code Online (Sandbox Code Playgroud)
我发送的配置单元查询是:
INSERT OVERWRITE TABLE temp_1
SELECT * FROM temp_2
WHERE t_id="17664956244983174066" and t_ts="636214684577250000000";
Run Code Online (Sandbox Code Playgroud)
这个数字太大而无法转换为int吗?我甚至尝试发送17664956244983174066没有引号但我得到相同的例外.
t_id在dynamobd中定义为BIGINTin hive table和Nor Number
编辑:
我尝试定义t_id为string==>Schema mismatch as dynamodb stores this as int
t_idas double== >>precision lost. no match.
这里有什么解决方案?
AWS专家的解决方案是
hadoop env您自己的 jar 位置附加到HADOOP_CLASSPATH.由于对 Java 不太了解,修改 emr-dynamodb-connector 对我来说是不可能的,但这就是解决方案。另外还可以做两件事...如果您不在StringsDynamodb 中使用,则映射string到hiveDynamodb ,否则添加从 hive 到 Dynamodb 的number映射和支持decimalnumber