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

时间:2017-01-13 12:43:23

标签: hadoop hive sqoop

我正在执行以下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位置。

帮助理解这个问题,我在这里缺少什么?

我也经历了Getting an file exists error while import into Hive using sqoop,但想知道,还有其他更好的办法来处理它。

2 个答案:

答案 0 :(得分:1)

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

因此,家庭位置中的任何目录都不应与您作为hive表导入的表名相同。如果它在那里会给你同样的错误。

解决方法是从家庭位置删除目录,然后重试。

注意:仅当您作为hive表导入时,导入HDFS时不会发生分段。

答案 1 :(得分:0)

你可以试试这些:

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

  • 为表格目的地提供:--warehouse-dir <dir> HDFS父级。