Hive无法执行SELECT *以外的查询

时间:2014-11-25 23:23:35

标签: hadoop hive

我正在我的系统上运行配置单元,我已成功创建了一个数据库和一个表。我已经用csv文件加载了该表,该文件位于我的HDFS上。

我成功地能够在hive中描述该表,查看我打算创建的所有列。

我也成功地运行了简单的SELECT * FROM table;查询,该查询返回了大量数据。

每当我尝试运行比这更复杂的查询时,我的问题就会开始。具体来说,当我尝试运行选择特定列名称或选择任何数据聚合的查询时。如果我尝试其他任何操作,我会在我的地图和减少任务已暂停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 *在所有其他查询失败时起作用。

感谢任何建议。

这是我运行的查询,允许尽可能多的NULL检查:SELECT year FROM flights WHERE year != NULL AND length(year) > 0 AND year <> '';此查询仍然失败。

3 个答案:

答案 0 :(得分:0)

可能是您的输入数据包含任何空值。因为,

  1. 如果您使用select all命令,该作业将无法进入mapreduce阶段。
  2. 如果您选择任何特定列,它将进入mapreduce阶段。所以你可能会收到这个错误。

答案 1 :(得分:0)

这里发生的事情是没有涉及mapreduce作业的查询正在运行。

&#34;选择*&#34; 查询不会调用任何mapreduce,只是按原样显示数据。请检查你的mapreduce日志,看看你是否能找到引起这种情况的东西。

答案 2 :(得分:0)

SELECT *不会调用mapreduce作业。

但任何复杂的查询都涉及地图缩减工作。

请检查MR工作日志。

这也可能是数据问题,数据可能与表架构不兼容。 请检查更少的行。