我正在执行以下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,但想知道,还有其他更好的办法来处理它。
答案 0 :(得分:1)
当您将数据导入HDFS作为Hive表时,Sqoop首先在您的主目录(您的案例/user/gauravfrankly/
)中创建一个具有相同文件夹名称的暂存区域,然后将数据移动到Hive目录。
因此,家庭位置中的任何目录都不应与您作为hive表导入的表名相同。如果它在那里会给你同样的错误。
解决方法是从家庭位置删除目录,然后重试。
注意:仅当您作为hive表导入时,导入HDFS时不会发生分段。
答案 1 :(得分:0)
你可以试试这些:
删除它:--create-hive-table
如果设置,则作业将失败,如果目标配置单元
表退出。默认情况下,此属性为false。
并添加:--hive-overwrite
覆盖Hive表中的现有数据。
为表格目的地提供:--warehouse-dir <dir>
HDFS父级。