我正在尝试将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
导入作业的工作方式:
sqoop
在tmp
dir(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] 删除。
我来说两句