我正在我的系统上运行hive,在那里我成功地创建了一个数据库和一个表。我已经用一个csv文件加载了那个表,这个文件位于我的hdfs上。
我成功地描述了配置单元中的表,看到了我打算创建的所有列。
我也能成功地运行简单的 SELECT * FROM table;
返回大量数据列表的查询。
每当我试图运行比这更复杂的查询时,我的问题就开始了。具体地说,当我尝试运行一个选择特定列名或选择任何数据聚合的查询时。如果我尝试其他操作,我会在map和reduce任务保持0%一段时间后收到此错误消息。
Diagnostic Messages for this Task:
java.lang.RuntimeException: java.lang.NullPointerException
at org.apache.hadoop.hive.ql.exec.Utilities.getMapRedWork(Utilities.java:230)
at org.apache.hadoop.hive.ql.io.HiveInputFormat.init(HiveInputFormat.java:255)
at org.apache.hadoop.hive.ql.io.HiveInputFormat.pushProjectionsAndFilters(HiveInputFormat.java:381)
at org.apache.hadoop.hive.ql.io.HiveInputFormat.pushProjectionsAndFilters(HiveInputFormat.java:374)
at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getRecordReader(CombineHiveInputFormat.java:536)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:394)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:332)
at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
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:1438)
at org.apache.hadoop.mapred.Child.main(Child.java:262)
Caused by: java.lang.NullPointerException
at org.ap
我尝试了许多不同的语法技巧,并执行了大量的健全性检查,以确认表确实存在。使我困惑的是,select*在所有其他查询失败时工作。
任何建议都将不胜感激。
下面是我运行的一个查询,其中包含尽可能多的空检查: SELECT year FROM flights WHERE year != NULL AND length(year) > 0 AND year <> '';
此查询仍然失败。
3条答案
按热度按时间nkkqxpd91#
您的输入数据可能包含任何空值。因为,
如果你使用
select all
命令作业不会进入mapreduce阶段。如果选择任何特定列,它将进入mapreduce阶段。所以你可能会得到这个错误。
xuo3flqw2#
select*不调用mapreduce作业。
但任何复杂的查询都涉及map reduce作业。
请检查mr作业日志。
这也可能是数据问题,数据可能与表架构不兼容。请用较少的行检查。
m528fe3b3#
这里发生的事情是,没有一个涉及mapreduce作业的查询正在运行。
“select*”查询不调用任何mapreduce,只按原样显示数据。请检查您的mapreduce日志,看看是否可以找到导致此问题的原因。