我正在使用HDP 2.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), 例如。文件内容是:
我现在使用SQL命令覆盖HIVE表
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';
当我运行查询SELECT * from wind;
时,它运行正常。但是,如果我运行查询SELECT * from wind WHERE wind = 3;
,hive将启动一个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)
我做了很多研究和挖掘,并且能够在解析&#34;查询计划&#34;期间跟踪错误。使用&#39; WHERE&#39;的任何查询条款失败。如果我使用该命令将执行引擎设置为Tez,则查询运行正常。
set hive.execution.engine=tez;
在hive.execution.engine=mr
(我认为是默认值)时,不确定发生了什么以及失败的原因是什么?
编辑:我设置了一个3节点集群,并使用Ambari安装和设置HDP 2.1。我无法在3节点集群上重新创建问题。看起来问题仅在独立的VM HDP 2.1中显现。
答案 0 :(得分:0)
确实mr
是default value;但是,请记住,不建议使用Hive 0.13.0,并且“可能在没有进一步警告的情况下将其删除”。请认为Tez和Spark是更好的选择。
另一方面,您的模式中不存在列wind
。我最好的猜测是,ArrayIndexOutOfBoundsException
异常表明找不到列wind
,而Tez可以忽略它的不存在并完成查询。