我是BigData的新手,我不知道发生了什么!请注意,我自己也在学习。
我使用此命令从名为sqooptest
的数据库中导入了一个名为sqoopex8
的表,来自:{/ p>
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
)有一个文件夹。不过里面没有任何东西。
接下来,直观地,在互联网上查看,我发现MySQL将所有dbs保存在/var/lib/mysql
中。显然,我无法访问它,所以我不得不从终端(CLI)访问它。当我这样做时,我在那里找到了所有的dbs。现在,我这样做了:
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
时,我会看到两个文件 - _SUCCESS
和part-m-00000
。这是为什么?为什么它第一次不起作用。
此外,在第一次尝试中,即使我将目标指定为HDFS --target-dir /user/hduser
,也不会出于某种原因。当我将目标作为本地文件系统时,它需要它。为什么呢?
答案 0 :(得分:0)
Sqoop需要一个空的目标路径来保存文件。您给出的路径/ var / lib / mysql用作保存导入文件的hdfs路径。
/ user / hduser可能没有用,因为该目录可能存在,或者您没有创建权限的权限。尝试hadoop fs -mkdir来检查。
对于SUCCESS和部分文件,这里是个好文章
答案 1 :(得分:0)
默认情况下,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 import \ --connect jdbc:mysql:// localhost / sqoopex8 \ - 表sqooptest \ --target-dir / path / to / your / desireddir \ -m 1
请查看文档here 。