我正在尝试将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“我的Map-还原作业”因以下错误而停止:
ERROR tool.ImportAllTablesTool:遇到运行导入作业的IOException : hdfs://quickstart.cloudera:8020/user/cloudera/categories输出目录已经存在
我试图将表复制到hive数据库,那么为什么cloudera中的现有文件会导致问题。是否存在忽略此错误或覆盖现有文件的方法。
发布于 2016-07-29 13:25:09
这就是sqoop导入作业的方式:
sqoop在tmp dir(HDFS)中创建/导入数据,后者是用户的主dir(在您的例子中是/user/cloudera)。/user/hive/wearhouse )。categories dir应该已经存在。因此,删除该dir或将其重命名(如果其重要)。hadoop fs -rmr /user/cloudera/categories
或
hadoop fs -mv /user/cloudera/categories /user/cloudera/categories_1
然后重新运行sqoop命令!
因此,简单地说,导入到Hive将使用hdfs作为暂存位置,sqoop在复制(成功地)到实际hdfs位置之后删除暂存dir /user/cloudera/categories (这是sqoop作业的最后一个阶段来清理暂存/ tmp文件),所以如果您试图列出tmp暂存dir,您将找不到它。
成功导入后:hadoop fs -ls /user/cloudera/categories - dir将不存在。
发布于 2016-07-29 05:09:57
Sqoop导入到Hive分三个步骤:
您没有提到--target-dir或--warehouse-dir,所以它会将数据放在Home目录中,在您的情况下,我认为是/user/cloudera/。
现在,对于MySQL表categories,您可能已经在前面导入了它。因此,存在/user/cloudera/categories目录,您将得到此异常。
在--taget-dir中添加任何不存在的目录,如--taget-dir /user/cloudera/mysqldata。然后sqoop将上述命令导入的所有Mysql表放在这个位置。
发布于 2018-07-25 17:05:25
基于上面的答案#1,我找到了这。我试过了而且成功了。
所以,只需添加-删除-目标-dir
https://stackoverflow.com/questions/38649071
复制相似问题