Sqoop import-all-table 到特定数据库中的 hive 失败

Sqoop import-all-table to hive in specific database fails

我正在执行下面的 sqoop 命令

sqoop import-all-tables -m 1 \
--connect "jdbc:mysql://nn01.itversity.com:3306/retail_db" \
--username=retail_dba \
--password=itversity \
--hive-import \
--hive-home /apps/hive/warehouse \
--hive-overwrite \
--hive-database grv_sqoop_import \
--create-hive-table \
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec \
--outdir java_files

正如我指定的那样,应该将 --hive-database 表导入其中。但我收到以下错误:

ERROR tool.ImportAllTablesTool: Encountered IOException running import job: org.apache.hadoop.mapred.FileAlreadyExistsException: Ou
tput directory hdfs://nn01.itversity.com:8020/user/gauravfrankly/categories already exists

无法理解为什么要查看 /user/gauravfrankly/ hdfs 位置。

帮助理解这个问题,我在这里遗漏了什么?

我也经历过,但想知道,有没有其他更好的方法来处理它。

你可以试试这些:

  • 删除这个:--create-hive-table如果设置,那么如果目标配置单元作业将失败 table 退出。默认情况下,此 属性 为假。 并添加:--hive-overwrite 覆盖 Hive 中的现有数据 table.

  • 提供:--warehouse-dir <dir> HDFS parent for table destination.

当您将数据作为 Hive table 导入 HDFS 时,Sqoop 首先在您的主目录(您的案例 /user/gauravfrankly/)中创建一个具有相同文件夹名称的暂存区,然后将数据移动到 hive目录。

因此,主目录中不应该有任何与您作为配置单元 table 导入的 table 名称相同的目录。如果它在那里,它会给你同样的错误。

解决方案是从主位置删除目录,然后重试。

注意:这仅在您作为配置单元导入时发生 table,当您导入到 HDFS 时不会发生暂存。