配置单元无法执行除选择以外的查询*

ua4mk5z4  于 2021-05-30  发布在  Hadoop
关注(0)|答案(3)|浏览(345)

我正在我的系统上运行hive,在那里我成功地创建了一个数据库和一个表。我已经用一个csv文件加载了那个表,这个文件位于我的hdfs上。
我成功地描述了配置单元中的表,看到了我打算创建的所有列。
我也能成功地运行简单的 SELECT * FROM table; 返回大量数据列表的查询。
每当我试图运行比这更复杂的查询时,我的问题就开始了。具体地说,当我尝试运行一个选择特定列名或选择任何数据聚合的查询时。如果我尝试其他操作,我会在map和reduce任务保持0%一段时间后收到此错误消息。

  1. Diagnostic Messages for this Task:
  2. java.lang.RuntimeException: java.lang.NullPointerException
  3. at org.apache.hadoop.hive.ql.exec.Utilities.getMapRedWork(Utilities.java:230)
  4. at org.apache.hadoop.hive.ql.io.HiveInputFormat.init(HiveInputFormat.java:255)
  5. at org.apache.hadoop.hive.ql.io.HiveInputFormat.pushProjectionsAndFilters(HiveInputFormat.java:381)
  6. at org.apache.hadoop.hive.ql.io.HiveInputFormat.pushProjectionsAndFilters(HiveInputFormat.java:374)
  7. at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getRecordReader(CombineHiveInputFormat.java:536)
  8. at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:394)
  9. at org.apache.hadoop.mapred.MapTask.run(MapTask.java:332)
  10. at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
  11. at java.security.AccessController.doPrivileged(Native Method)
  12. at javax.security.auth.Subject.doAs(Subject.java:415)
  13. at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1438)
  14. at org.apache.hadoop.mapred.Child.main(Child.java:262)
  15. Caused by: java.lang.NullPointerException
  16. at org.ap

我尝试了许多不同的语法技巧,并执行了大量的健全性检查,以确认表确实存在。使我困惑的是,select*在所有其他查询失败时工作。
任何建议都将不胜感激。
下面是我运行的一个查询,其中包含尽可能多的空检查: SELECT year FROM flights WHERE year != NULL AND length(year) > 0 AND year <> ''; 此查询仍然失败。

nkkqxpd9

nkkqxpd91#

您的输入数据可能包含任何空值。因为,
如果你使用 select all 命令作业不会进入mapreduce阶段。
如果选择任何特定列,它将进入mapreduce阶段。所以你可能会得到这个错误。

xuo3flqw

xuo3flqw2#

select*不调用mapreduce作业。
但任何复杂的查询都涉及map reduce作业。
请检查mr作业日志。
这也可能是数据问题,数据可能与表架构不兼容。请用较少的行检查。

m528fe3b

m528fe3b3#

这里发生的事情是,没有一个涉及mapreduce作业的查询正在运行。
“select*”查询不调用任何mapreduce,只按原样显示数据。请检查您的mapreduce日志,看看是否可以找到导致此问题的原因。

相关问题