我有5台机器上的Hive安装(Hive-0.8,Hadoop-1.0.3),每当我尝试连接两个表时,我都会遇到以下异常:
java.lang.RuntimeException:从任务日志URL读取时出错 在org.apache.hadoop.hive.ql.exec.errors.TaskLogProcessor.getErrors(TaskLogProcessor.java:130) 在org.apache.hadoop.hive.ql.exec.JobDebugger.showJobFailDebugInfo(JobDebugger.java:211) 在org.apache.hadoop.hive.ql.exec.JobDebugger.run(JobDebugger.java:81) 在java.lang.Thread.run(未知来源) 引起:java.io.IOException:服务器返回HTTP响应代码:400为URL:http:// hadoop4:50060 / tasklog?taskid = attempt_201210161122_0013_r_000001_4& start = -8193
网址可以指向其他计算机。
所以我通过谷歌搜索发现,如果我将taskid
更改为attemptid
,那么我可以看到实际问题,这是例外:
FATAL ExecReducer:java.lang.IllegalArgumentException:nanos> 999999999或< 0 at java.sql.Timestamp.setNanos(Unknown Source) at org.apache.hadoop.hive.serde2.io.TimestampWritable.populateTimestamp(TimestampWritable.java:348) at org.apache.hadoop.hive.serde2.io.TimestampWritable.toString(TimestampWritable.java:320) at org.apache.hadoop.hive.serde2.lazy.LazyTimestamp.writeUTF8(LazyTimestamp.java:95) 在org.apache.hadoop.hive.serde2.lazy.LazyUtils.writePrimitiveUTF8(LazyUtils.java:232) 在org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe.serialize(LazySimpleSerDe.java:427) 在org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe.serializeField(LazySimpleSerDe.java:381) 在org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe.serialize(LazySimpleSerDe.java:365) 在org.apache.hadoop.hive.ql.exec.FileSinkOperator.processOp(FileSinkOperator.java:569) 在org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471) 在org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:762) 在org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:84) 在org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471) 在org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:762) 在org.apache.hadoop.hive.ql.exec.FilterOperator.processOp(FilterOperator.java:132) 在org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471) 在org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:762) 在org.apache.hadoop.hive.ql.exec.CommonJoinOperator.genAllOneUniqueJoinObject(CommonJoinOperator.java:749) 在org.apache.hadoop.hive.ql.exec.CommonJoinOperator.checkAndGenObject(CommonJoinOperator.java:836) 在org.apache.hadoop.hive.ql.exec.JoinOperator.endGroup(JoinOperator.java:263) 在org.apache.hadoop.hive.ql.exec.ExecReducer.reduce(ExecReducer.java:198) 在org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:519) 在org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:420) 在org.apache.hadoop.mapred.Child $ 4.run(Child.java:255) at java.security.AccessController.doPrivileged(Native Method) 在javax.security.auth.Subject.doAs(未知来源) 在org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) 在org.apache.hadoop.mapred.Child.main(Child.java:249)
我不确定整个堆栈跟踪是否有用,但是我从google搜索中找到的,例外是IBM DB2更新/修复的链接。我不知道这是否与任何Hive问题有关,即使这样做,我也不知道该怎么做。
有人能指出我正确的方向吗?
PS:我已经尝试了在线建议的旧版Hive / Hadoop的解决方案,但没有一个产生任何结果。此外,我还检查了NULL
值。
答案 0 :(得分:0)
您最好提供有关您的hive环境的更多信息。比如表格模式和原始数据。
在您提供的上述异常中,问题可能是您存储在hdfs中的数据与hive日期列不匹配。
答案 1 :(得分:0)
你真的应该提供完整的sql。无论如何,以下内容无效:
nanos > 999999999 or < 0
应该是:
(nanos > 999999999 or nanos < 0)
因此,“在一个视图中”工作正常是不正确的。作为创建视图的一部分,您必须更正该语法错误。您的视图不与独立查询匹配。