hive报错(1)MoveTask/HIVE return code 1、2、3

您所在的位置:网站首页 目录引擎 hive报错(1)MoveTask/HIVE return code 1、2、3

hive报错(1)MoveTask/HIVE return code 1、2、3

2023-08-19 14:32| 来源: 网络整理| 查看: 265

今天在CDH上执行hive sql的时候报了一个错

错误内容为:

    FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask 错误语句:

    INSERT OVERWRITE DIRECTORY '{$dir}' select * from tmp_analyse_os where logdata='{$begin}'  

错误原因:

    hive源码会检查导出的路径是否存在,如果不存在则报这个错。这个错只有在CDH上的hive才会报错,apache已经修复了这个bug,其实CDH不是没有修复这个bug,而是添加了一个配置文件,但配置文件默认是false(蛋疼)。

解决方法:

    在hive上添加一个配置即可。

hive.insert.into.multilevel.dirs true

下面是源码中关于文件权限继承的开关代码: HiveConf.ConfVars.HIVE_WAREHOUSE_SUBDIR_INHERIT_PERMS); import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.conf.HiveConf.ConfVars;

产生问题的原因: hive的查询结果在在进行move操作时,需要进行文件权限的授权,多个文件的授权是并发进行的,hive中该源码是在一个线程池中 执行的,该操作在多线程时线程同步有问题的该异常,这是hive的一个bug,目前截止目前的最新版本Apache Hive 2.1.1还没有修复该问题; 可以通过关闭hive的文件权限继承 hive.warehouse.subdir.inherit.perms=false 来规避该问题。

解决方法: hive.warehouse.subdir.inherit.perms

hive.warehouse.subdir.inherit.perms true Set this to false if the table directories should be created with the permissions derived from dfs umask instead of inheriting the permission of the warehouse or database directory.

return code 1 

原因:

      'Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask'     

      报错是抄的,多次实践证明,执行hive sql ERROR 返回 return code 1 基本上是执行的HQL无法加入到对应的用户队列中。

解决方法 1:

      执行HQL前,加入 set MapReduce.queue = QUEUE_CRA; CRA(用户名)

解决方法 2:

          hdfs dfs命令对文件夹下的文件赋予权限。使其可以进行操作。

 

return code 2:

     原因 1:

         HQL产生较大的笛卡尔积,撑爆了HIVE 执行的最大线程载荷。

     解决方法:

         优化HQL.

     原因 2 :

Hive运行成功之后,当输入select count(*) from XX或者插入数据时,居然碰到BUG。

2016-04-14 12:31:56,199 Stage-1 map = 0%,  reduce = 0%

Ended Job = job_1460599682683_0005 with errors

Error during job, obtaining debugging information...

FAILED: Execution Error, return code 2 fromorg.apache.hadoop.hive.ql.exec.mr.MapRedTask

MapReduce Jobs Launched:

Stage-Stage-1:  HDFS Read: 0HDFS Write: 0 FAIL

Total MapReduce CPU Time Spent: 0 msec 这个问题只是HIVE单方面的问题,而用Hadoop  Job日志查看,却是YarnException: Unauthorized request to start container的问题。未经授权的请求,怎么会有这样的问题呢。经过网上未解,说是各个节点的时间未同步的问题。

解决方法:

简直是晕,不知道谁刚好把某个节点时间修改了。才导致了这样的坑,居然都踩上了。于是把时间进行修改,进行系统时间同步,果然没有再次出现。 return code 3:

    主要原因是数据倾斜。

解决方法 1:   对数据大的表进行GROUP BY ,减少数据量。

解决方法 2: 

   set hive.auto.convert.join = false;       

       •说明:是不是依据输入文件的大小,将Join转成普通的Map Join

       •默认值: false

   set hive.ignore.mapjoin.hint = false;

       •说明: 是否忽略mapjoin hint 即mapjoin标记

        •默认值: true

   set hive.exec.parallel = true;     

         •说明:是否并行提交任务

        •默认值:false



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3