Hadoop 配置单元无法执行除“选择”之外的查询*

Hadoop 配置单元无法执行除“选择”之外的查询*,hadoop,hive,Hadoop,Hive,我正在我的系统上运行hive,在那里我成功地创建了一个数据库和一个表。我已经用位于HDFS上的csv文件加载了该表 我成功地描述了配置单元中的表,看到了我打算创建的所有列 我还成功地运行了简单的SELECT*FROM表返回大量数据列表的查询 每当我尝试运行比这更复杂的查询时,我的问题就开始了。具体地说,当我尝试运行一个选择特定列名或选择任何数据聚合的查询时。如果我尝试其他操作,我会在映射和减少任务在0%的状态下运行一段时间后收到此错误消息 Diagnostic Messages for this

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

我成功地描述了配置单元中的表,看到了我打算创建的所有列

我还成功地运行了简单的
SELECT*FROM表返回大量数据列表的查询

每当我尝试运行比这更复杂的查询时,我的问题就开始了。具体地说,当我尝试运行一个选择特定列名或选择任何数据聚合的查询时。如果我尝试其他操作,我会在映射和减少任务在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!=空值和长度(年)>0和年“此查询仍然失败。

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

  • 如果使用
    全选
    命令,作业将不会进入mapreduce阶段
  • 如果选择任何特定列,它将进入mapreduce阶段。所以你可能会得到这个错误

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


    “选择*”查询不调用任何mapreduce,只按原样显示数据。请检查您的mapreduce日志,看看是否可以找到导致此问题的原因。

    SELECT*不调用mapreduce作业

    但任何复杂的查询都涉及到map-reduce作业

    请检查MR作业日志

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

    是的,某些列中可能包含空数据,尽管我确信我选择的列已填充了所有行。请尝试使用where条件子句删除空值。是否可以使用示例?你的意思是什么地方有价值!=无效的使用值!=NULL或值!=NaN或获取字符串的长度,然后像这样检查StringLength>0。用我运行的实际查询更新了帖子。我遇到过这样的情况,行数较少,所以这一定是某种MR问题。尽管如此,我使用的是多用户系统,其他用户可以毫无问题地运行这些配置单元查询。