我正在尝试将 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-reduce 作业因以下错误而停止:
错误工具.ImportAllTablesTool:运行导入时遇到 IOException
作业:org.apache.hadoop.mapred.FileAlreadyExistsException:输出
目录 hdfs://quickstart.cloudera:8020/user/cloudera/categories
已经存在
我正在尝试将表复制到 hive 数据库,那么为什么 cloudera 中的现有文件会导致问题。有没有办法忽略此错误或覆盖现有文件。
就是这样sqoop
进口工作作品:
sqoop
创建/导入数据tmp
dir(HDFS
)这是用户的主目录(在你的情况下是/user/cloudera
).
然后将数据复制到其实际的配置单元位置(即/user/hive/wearhouse
.
This categories
在运行 import 语句之前 dir 应该已经存在。因此,删除该目录或重命名它(如果它很重要)。
hadoop fs -rmr /user/cloudera/categories
OR
hadoop fs -mv /user/cloudera/categories /user/cloudera/categories_1
并重新运行 sqoop 命令!
简而言之,导入到Hive
将使用 hdfs 作为暂存位置,而 sqoop 删除暂存目录/user/cloudera/categories
复制(成功)到实际的 hdfs 位置后 - 这是 sqoop 作业的最后阶段清理 staging/tmp 文件 - 所以如果你尝试列出 tmp staging 目录,你将找不到它。
导入成功后:hadoop fs -ls /user/cloudera/categories
- dir 不会在那里。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)