Hadoop 当Hive.execution.engine设置为MR时,配置单元查询失败,当设置为Tez时,它们工作吗?

Hadoop 当Hive.execution.engine设置为MR时,配置单元查询失败,当设置为Tez时,它们工作吗?,hadoop,hive,hortonworks-data-platform,Hadoop,Hive,Hortonworks Data Platform,我正在使用HDP2.1沙盒进行我的工作。jar文件列出的配置单元版本是:hive-exec-0.13.0.2.1.1.0-385.jar 我已经在HDFS中创建了一个包含天气信息的目录。实际信息在文本文件中,包含以下5个字段usafid:string、obsdate:string、winddir:int、windspeed:int、visibility:double、, 例如,文件内容包括: 725805 201301010853 70 8 10.0 725805 2013

我正在使用HDP2.1沙盒进行我的工作。jar文件列出的配置单元版本是:hive-exec-0.13.0.2.1.1.0-385.jar

我已经在HDFS中创建了一个包含天气信息的目录。实际信息在文本文件中,包含以下5个字段usafid:string、obsdate:string、winddir:int、windspeed:int、visibility:double、, 例如,文件内容包括:

725805 201301010853 70 8 10.0 725805 201301010953 350 6 10.0 725805 201301011053 20 11 10.0 725805 201301011153 20 8 10.0 我现在使用SQL命令覆盖配置单元表

CREATE DATABASE weather;
USE weather;
CREATE EXTERNAL TABLE IF NOT EXISTS wind( 
    usafid     STRING,
    obsdate    STRING,
    winddir    INT,
    windspeed  INT,
   visibility DOUBLE
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES  TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/WEATHER/PROCESSED/WIND_RECORDS';
当我运行查询时,选择*from wind;,它很好用。但是,如果我运行查询SELECT*from wind,其中wind=3;,配置单元启动MR作业并失败,堆栈跟踪如下:

2014-10-29 00:10:58,975 ERROR [IPC Server handler 3 on 52990] org.apache.hadoop.mapred.TaskAttemptListenerImpl: Task: attempt_1414566304731_0001_m_000000_0 - exited : java.lang.RuntimeException: java.lang.ArrayIndexOutOfBoundsException: 0
    at org.apache.hadoop.hive.ql.exec.Utilities.getBaseWork(Utilities.java:284)
    at org.apache.hadoop.hive.ql.exec.Utilities.getMapWork(Utilities.java:250)
    at org.apache.hadoop.hive.ql.io.HiveInputFormat.init(HiveInputFormat.java:256)
    at org.apache.hadoop.hive.ql.io.HiveInputFormat.pushProjectionsAndFilters(HiveInputFormat.java:383)
    at org.apache.hadoop.hive.ql.io.HiveInputFormat.pushProjectionsAndFilters(HiveInputFormat.java:376)
    at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getRecordReader(CombineHiveInputFormat.java:552)
    at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.<init>(MapTask.java:168)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:409)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:342)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:167)
    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:1557)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
    at java.beans.XMLDecoder.readObject(XMLDecoder.java:250)
    at org.apache.hadoop.hive.ql.exec.Utilities.deserializeObject(Utilities.java:679)
    at org.apache.hadoop.hive.ql.exec.Utilities.deserializePlan(Utilities.java:622)
    at org.apache.hadoop.hive.ql.exec.Utilities.getBaseWork(Utilities.java:272)
我不确定当hive.execution.engine=mr我认为是默认值时发生了什么以及为什么会失败

编辑:我设置了一个3节点集群,并使用Ambari安装和设置HDP2.1。我无法在3节点群集上重新创建问题。看起来这个问题只会在独立的VM HDP 2.1中体现出来。

mr是正确的;但是,请记住,配置单元0.13.0已被弃用,可能会在没有进一步警告的情况下将其删除。请考虑Tez和Spice是更好的选择。

另一方面,模式中不存在列wind。我最好的猜测是,异常ArrayIndexOutOfBoundsException menas没有找到列wind,而Tez可以忽略它的不存在并完成查询

set hive.execution.engine=tez;