【问题标题】:sqoop - trouble importing tablessqoop - 导入表时遇到问题
【发布时间】:2016-04-22 21:26:48
【问题描述】:

我是 BigData 的新手,我不知道发生了什么!请注意,这是我自己学习的。

我使用以下命令从名为 sqoopex8 的数据库中从 MySQL 导入了一个名为 sqooptest 的表:

sqoop import \
--connect jdbc:mysql://localhost/sqoopex8 \
--table sqooptest \
-m 1

我不知道它去哪里(或进口)。

抛出了一堆错误,老实说,我什至不知道要在错误中查找什么。如果是最后一行,则显示“16/04/23 01:46:52 ERROR tool.ImportTool: Error during import: Import job failed!”再次,我处于学习阶段,我正在自己学习,所以请多多包涵!

现在,我在/user/hduser/ 下查看,有一个以表名命名的文件夹 (sqooptest)。不过里面什么都没有。

接下来,凭直觉,在 Internet 上环顾四周,我发现 MySQL 将其所有 dbs 都保存在 /var/lib/mysql 中。显然,我无法访问它,所以我必须从终端(CLI)访问它。当我这样做时,我在那里找到了我所有的数据库。现在,我这样做了:

sqoop import \
--connect jdbc:mysql://localhost/sqoopex8 \
--table sqooptest \
--target-dir /var/lib/mysql \
-m 1

(已添加--target-dir /var/lib/mysql

这出于某种原因。当我执行hadoop fs -ls /var/lib/mysql 时,我看到两个文件-_SUCCESSpart-m-00000。这是为什么?为什么第一次没有成功。

另外,在第一次尝试中,即使我将目标指定为 HDFS --target-dir /user/hduser,由于某种原因它也没有接受它。当我将目标作为本地文件系统时,它会接受它。为什么?

【问题讨论】:

    标签: mysql hdfs sqoop


    【解决方案1】:

    Sqoop 需要一个空的目标路径来保存文件。您给 /var/lib/mysql 的路径用作保存导入文件的 hdfs 路径。

    /user/hduser 可能不起作用,因为该目录可能存在,或者您没有创建目录的权限。试试 hadoop fs -mkdir 检查一下。

    对于成功和部分文件,这里是不错的帖子

    What are SUCCESS and part-r-00000 files in hadoop

    【讨论】:

    【解决方案2】:

    默认情况下,sqoop 会将数据从 RDBMS 导入 hdfs 用户目录中的 hdfs,例如:/user/hduser/[tablename]/part-m-00000 为了避免这种情况并将数据存储在我们想要的目录中,我们必须在子句--target-dir 中提及它。但是除了路径中的最后一个目录之外,该路径应该存在。比如如果 --target-dir 是 /user/hduser/mydirectory/mytabledata 是路径,/user/hduser/mydirectory/ 应该存在于 hdfs 然后 sqoop 将在 /user/hduser/mydirectory/ 下创建一个目录[mytabledata here]并且会导入这个目录下的rdbms表数据。

    sqoop 导入\ --连接 jdbc:mysql://localhost/sqoopex8 \ --表 sqooptest \ --target-dir /path/to/your/desireddir \ -m 1

    请查看文档here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多