HIVE加入问题

时间:2012-10-19 15:25:32

标签: exception join hadoop hive

我有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值。

2 个答案:

答案 0 :(得分:0)

您最好提供有关您的hive环境的更多信息。比如表格模式和原始数据。

在您提供的上述异常中,问题可能是您存储在hdfs中的数据与hive日期列不匹配。

答案 1 :(得分:0)

你真的应该提供完整的sql。无论如何,以下内容无效:

nanos > 999999999 or < 0 

应该是:

(nanos > 999999999 or nanos < 0) 

因此,“在一个视图中”工作正常是不正确的。作为创建视图的一部分,您必须更正该语法错误。您的视图与独立查询匹配。