使用sqoop导入Hive时获取文件存在错误

普里亚兰詹

我正在尝试将retail_db数据库表复制到已经创建的配置单元数据库中。当我执行以下代码

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-reduce作业因以下错误而停止:

错误工具.ImportAllTablesTool:运行导入作业时遇到IOException:org.apache.hadoop.mapred.FileAlreadyExistsException:输出目录hdfs://quickstart.cloudera:8020 / user / cloudera /类别已经存在

我试图将表复制到配置单元数据库,然后为什么cloudera中的现有文件导致了问题。有没有办法忽略此错误或覆盖现有文件。

罗纳克帕特尔

这是sqoop导入作业的工作方式:

  • sqooptmpdir(HDFS)中创建/导入数据,该目录是用户的主目录(在您的情况下为/user/cloudera)。

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

  • categories运行导入语句之前,目录应该已经存在。因此,请删除该目录或将其重命名。

hadoop fs -rmr /user/cloudera/categories

要么

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

并重新运行sqoop命令!

简而言之,Importing toHive将使用hdfs作为暂存位置,并且sqoop/user/cloudera/categories在复制(成功)到实际的hdfs位置后,将删除暂存目录-这是sqoop作业的最后阶段,用于清理暂存/ tmp文件-因此,如果您尝试列出tmp暂挂目录,找不到。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章