zoukankan      html  css  js  c++  java
  • hive”return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask”问题

    1.问题背景

    需要将生成的数据放到hive中。

    原本思路通过python的impala包插入,发现速度很慢:10条数据需要200多秒。

    改用先将数据写到hdfs中,然后通过load命令,将hdfs中的文件load到hive中。

    load时出现”return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask”错误。

    2.问题出现过程

    过程:

    • hive中新建表
    • 将数据(没有列名)上传到hdfs
    • load命令将数据loadhive

    hive中新建表

    建表语句:

    create table my_student(id int, name string) 
    row format delimited fields Terminated by ',' lines terminated by '\n'stored AS textfile

      

    数据上传

    # 数据上传:
    from hdfs.client import Client
    client = Client(hadoop_http_path, root="/", timeout=10000, session=False)
    client.write(hdfs_path, data, overwrite=True, append=False, encoding='utf-8')

    执行hive的load命令

    LOAD DATA INPATH hdfs_path INTO TABLE table_name
    

     或者在python中执行。

    3.问题

    执行load命令(在DBeaver或者python中),会出现以下错误:

    4.问题和解决方法

    查看日志:

    查看http://hadoop_master_ip:50070/logs下的hadoop-hdfs-namenode-xxxx.log日志
    curl http://hadoop_master_ip:50070/logs/hadoop-hdfs-namenode-xxx.log >> a.txt
    cat a.txt | grep 时间
    

     

    是由于"destination exists" 原因导致MoveTask错误。

    解决方法:

    在load命令中加入overwrite,覆盖之前的内容。

    load命令的正确写法:

    LOAD DATA INPATH hdfs_path OVERWRITE INTO TABLE table_name
    

      

    经测试,可以解决这个日志报的错误。

    5.后续

    出现这个错误,网上有说是move权限原因:可以通过关闭hive的文件权限继承 hive.warehouse.subdir.inherit.perms=false 来规避该问题。

    MoveTask错误可能有多种原因,一切还是看日志报的什么错。

  • 相关阅读:
    使用Kuboard界面在k8s上部署SpringCloud项目
    改造项目使用的Dockerfile文件
    在Kuboard上安装 Ingress Controller
    解决nexus仓库只能拉取不能推送的问题
    Logstash:运用 memcache 过滤器进行大规模的数据丰富
    Docker Compose配置文件详解(V3)
    Dockerfile 和 docker-compose.yml的区别
    实战---在Portainer中编排docker-compose.yml文件
    ctk-获取MANIFEST.MF中的数据
    继承时的析构函数
  • 原文地址:https://www.cnblogs.com/yq055783/p/15718388.html
Copyright © 2011-2022 走看看