gpt4 book ai didi

import - 使用 sqoop 导入 Hive 时出现文件存在错误

转载 作者:行者123 更新时间:2023-12-02 08:39:09 27 4
gpt4 key购买 nike

我正在尝试将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 作业因以下错误而停止:

ERROR tool.ImportAllTablesTool: Encountered IOException running import job: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://quickstart.cloudera:8020/user/cloudera/categories already exists

我正在尝试将表复制到 hive 数据库,那么为什么 cloudera 中的现有文件导致了问题。有没有办法忽略此错误或覆盖现有文件。

最佳答案

这就是 sqoop 导入作业的工作原理:

  • sqooptmp 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 命令!

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

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

关于import - 使用 sqoop 导入 Hive 时出现文件存在错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38649071/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com