首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sqoop将文件导入到蜂巢时存在错误

问使用sqoop将文件导入到蜂巢时存在错误
EN

Stack Overflow用户
提问于 2016-07-29 01:16:11
回答 4查看 11.2K关注 0票数 3

我正在尝试将retail_db数据库表复制到我已经创建的hive数据库中。当我执行以下代码时

代码语言:javascript
复制
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-还原作业”因以下错误而停止:

ERROR tool.ImportAllTablesTool:遇到运行导入作业的IOException : hdfs://quickstart.cloudera:8020/user/cloudera/categories输出目录已经存在

我试图将表复制到hive数据库,那么为什么cloudera中的现有文件会导致问题。是否存在忽略此错误或覆盖现有文件的方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-07-29 13:25:09

这就是sqoop导入作业的方式:

  • sqoop在tmp dir(HDFS)中创建/导入数据,后者是用户的主dir(在您的例子中是/user/cloudera)。
  • 然后将数据复制到其实际的单元位置(即/user/hive/wearhouse )。
  • 在运行导入语句之前,这个categories dir应该已经存在。因此,删除该dir或将其重命名(如果其重要)。

hadoop fs -rmr /user/cloudera/categories

或

hadoop fs -mv /user/cloudera/categories /user/cloudera/categories_1

然后重新运行sqoop命令!

因此,简单地说,导入到Hive将使用hdfs作为暂存位置,sqoop在复制(成功地)到实际hdfs位置之后删除暂存dir /user/cloudera/categories (这是sqoop作业的最后一个阶段来清理暂存/ tmp文件),所以如果您试图列出tmp暂存dir,您将找不到它。

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

票数 6
EN

Stack Overflow用户

发布于 2016-07-29 05:09:57

Sqoop导入到Hive分三个步骤:

  • 将数据放入HDFS
  • 如果不存在,则创建Hive表
  • 将数据加载到蜂巢表

您没有提到--target-dir或--warehouse-dir,所以它会将数据放在Home目录中,在您的情况下,我认为是/user/cloudera/。

现在,对于MySQL表categories,您可能已经在前面导入了它。因此,存在/user/cloudera/categories目录,您将得到此异常。

在--taget-dir中添加任何不存在的目录,如--taget-dir /user/cloudera/mysqldata。然后sqoop将上述命令导入的所有Mysql表放在这个位置。

票数 4
EN

Stack Overflow用户

发布于 2018-07-25 17:05:25

基于上面的答案#1,我找到了这。我试过了而且成功了。

所以,只需添加-删除-目标-dir

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38649071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档