Hive 查询错误 java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException

Posted

技术标签:

【中文标题】Hive 查询错误 java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException【英文标题】:Hive query error java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException 【发布时间】:2017-07-28 05:13:04 【问题描述】:

您好,我正在执行 Hive 查询:

CREATE TABLE temp_session_orgid as
SELECT
    sorgid.property_num, sorgid.visitid, sorgid.fullvisitorid, sorgid.adate, sorgid.hits_customvariables_customvarvalue as orgid
FROM
    (
        SELECT
            *,
            row_number() over (partition by property_num, visitid, fullvisitorid, adate order by hitsid) as rn
        FROM bt_hits_custom_vars
        WHERE hits_customvariables_customvarname = 'orgId'
    ) sorgid
WHERE
    sorgid.rn = 1
;

Hive:2.1.1
EMR:5.3.1  

我在哪里得到以下错误:

引起:org.apache.hadoop.hive.ql.metadata.HiveException: java.nio.channels.ClosedChannelException 在 org.apache.hadoop.hive.ql.exec.FileSinkOperator.process(FileSinkOperator.java:785) 在 org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:879) 在 org.apache.hadoop.hive.ql.exec.SelectOperator.process(SelectOperator.java:95) 在 org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:879) 在 org.apache.hadoop.hive.ql.exec.FilterOperator.process(FilterOperator.java:126) 在 org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:879) 在 org.apache.hadoop.hive.ql.exec.PTFOperator$PTFInvocation.finishPartition(PTFOperator.java:373) 在 org.apache.hadoop.hive.ql.exec.PTFOperator.process(PTFOperator.java:122) 在 org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:879) 在 org.apache.hadoop.hive.ql.exec.SelectOperator.process(SelectOperator.java:95) 在 org.apache.hadoop.hive.ql.exec.tez.ReduceRecordSource$GroupIterator.next(ReduceRecordSource.java:348) ... 17 更多 引起:java.nio.channels.ClosedChannelException 在 org.apache.hadoop.hdfs.DFSOutputStream.checkClosed(DFSOutputStream.java:1546) 在 org.apache.hadoop.fs.FSOutputSummer.write(FSOutputSummer.java:104) 在 org.apache.hadoop.fs.FSDataOutputStream$PositionCache.write(FSDataOutputStream.java:60) 在 java.io.DataOutputStream.write(DataOutputStream.java:107) 在 org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat$1.write(HiveIgnoreKeyTextOutputFormat.java:87) 在 org.apache.hadoop.hive.ql.exec.FileSinkOperator.process(FileSinkOperator.java:751) ... 27 更多 ],TaskAttempt 3 失败,info=[错误:运行任务时出错(失败): 尝试_1501196537592_0020_2_01_000000_3:java.lang.RuntimeException: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException:Hive 运行时错误 处理行时(标签=0) "key":"reducesinkkey0":"89634781","re​​ducesinkkey1":"1442844353","re​​ducesinkkey2":"5186210141339993001","re​​ducesinkkey3":"20150921","re​​ducesinkkey4":"1","value" :"_col1":"客户" 在 org.apache.hadoop.hive.ql.exec.tez.TezProcessor.initializeAndRunProcessor(TezProcessor.java:211) 在 org.apache.hadoop.hive.ql.exec.tez.TezProcessor.run(TezProcessor.java:168) 在 org.apache.tez.runtime.LogicalIOProcessorRuntimeTask.run(LogicalIOProcessorRuntimeTask.java:370) 在 org.apache.tez.runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:73) 在 org.apache.tez.runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:61) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:422) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) 在 org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable.java:61) 在 org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable.java:37) 在 org.apache.tez.common.CallableWithNdc.call(CallableWithNdc.java:36) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)

这个错误的原因是什么?解决此错误的方法是什么?

【问题讨论】:

也发布查询,您的配置单元服务是否正常运行? 我的 hive 服务正在运行,没有任何错误 & 以下是查询:CREATE TABLE temp_session_orgid as SELECT sorgid.property_num, sorgid.visitid, sorgid.fullvisitorid, sorgid.adate, sorgid.hits_customvariables_customvarvalue as orgid FROM ( SELECT *, row_number() over (partition by property_num, visitid, fullvisitorid, adate order by hitsid) as rn FROM bt_hits_custom_vars WHERE hits_customvariables_customvarname = 'orgId' ) sorgid WHERE sorgid.rn = 1 ; 找到解决办法了吗 【参考方案1】:

在 hive 中使用以下设置。

set hive.auto.convert.join=false;
set hive.vectorized.execution.enabled=false;
set hive.vectorized.execution.reduce.enabled=false;
set hive.merge.cardinality.check=false;
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions.pernode=500;
set hive.auto.convert.join.noconditionaltask = true;
set hive.auto.convert.join.noconditionaltask.size = 10000000;
set hive.auto.convert.sortmerge.join=true;

【讨论】:

以上是关于Hive 查询错误 java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 启动失败:初始化“com.intellij.util.net.ssl.certificatemanager”时出现致命错误

hive连接远程hadoop使用查询语句时,发生错误

Hive 查询错误

hive 非正确json格式字段造成查询错误

两个查询的 Hive 联合给出编译错误

带有多个子查询的 SQL 错误 10249 Hive