使用sqoop导入Hive时得到一个文件存在的错误[英] Getting an file exists error while import into Hive using sqoop

问题描述

我正在尝试将Retail_DB数据库表复制到我已经创建的HIVE数据库中.当我执行以下代码

sqoop import-all-tables \
--num-mappers 1 \
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" \
--username=retail_dba \
--password=cloudera \
--hive-import \
--hive-overwrite \
--create-hive-table \
--outdir java_files \
--hive-database retail_stage

我的地图减少作业停止了以下错误:

错误工具.importalltablestool:遇到ioException运行导入 作业:org.apache.hadoop.mapred.filealreadyexistSexception:输出 目录HDFS://quickstart.cloudera:8020/user/cloudera/类别 已经存在

我正在尝试将表复制到Hive数据库,然后为什么Cloudera中的现有文件引起了问题.有没有办法忽略此错误或覆盖现有文件.

推荐答案

这是sqoop导入工作的方式:

  • sqoop在tmp dir(HDFS)中创建/导入数据,该数据是用户的家用dir(在您的情况下为/user/cloudera).

  • 然后将数据复制到其实际的Hive位置(即/user/hive/wearhouse.

  • 此categories在您运行导入语句之前,应该存在DIR.因此,如果重要的话,请删除该DIR或重命名.

hadoop fs -rmr /user/cloudera/categories

hadoop fs -mv /user/cloudera/categories /user/cloudera/categories_1

和重新运行sqoop命令!

因此,简而文件 - 因此,如果您尝试列出TMP登台DIR,则找不到它.

成功导入后:hadoop fs -ls /user/cloudera/categories - dir将不存在.

其他推荐答案

SQoop导入到Hive以3个步骤工作:

  • 将数据放在HDFS
  • 创建蜂巢表(如果不存在)
  • 将数据加载到Hive表中

您尚未提及--target-dir或--warehouse-dir,因此它将将数据放入HDFS主目录中,我相信/user/cloudera/在您的情况下.

现在,对于MySQL表categories您可能已经提前导入了它.因此,/user/cloudera/categories目录存在,您将获得此例外.

在--taget-dir中添加任何不存在的目录.然后,Sqoop将将所有由上面命令导入的MySQL表放在此位置.

其他推荐答案

基于上面的答案#1,我找到了 this .我尝试了,它起作用.

所以,只需添加-Delete-target-dir

本文地址:https://www.itbaoku.cn/post/859658.html