sqoop导入不会在hdfs中移动整个表

时间:2018-08-22 16:12:38

标签: sqoop

我在mysql中创建了一个带有少量表的小型数据库。现在,我使用sqoop将表传输到HDFS。
下面是sqoop命令:
sqoop导入--connect jdbc:mysql:// localhost / sqooptest-用户名root -P --table emp --m 1 --driver com.mysql.jdbc.Driver

我没有获得工资和部门的最后两列
上面命令的输出
1201gopalmanager
1202manisha证明阅读器
1203khalilphp开发人员
1204prasanthphp开发人员
1205kranthiadmin

MySql表是:
+ ------ + ---------- + -------------- + -------- + ------ +
| id |名称|度|薪水|部门|
+ ------ + ---------- + -------------- + -------- + ------ +
| 1201 |戈帕尔|经理| 50000 | TP |
| 1202 | manisha |校对器| 50000 | TP |
| 1203 |哈利勒| php开发| 30000 | AC |
| 1204 | prasanth | php开发| 30000 | AC |
| 1205 |肯蒂管理员| 20000 | TP |
+ ------ + ---------- + -------------- + -------- + ------ +

我尝试使用“ -fields-terminated-by,**”或“ -input-fields-terminated-by,**”,但失败了

另外,当我使用(--m 3)这样的映射器计数时,在HDFS中仅获取单个文件。


我正在Ubuntu机器上使用apache Sqoop。

在此先感谢您找到解决方案。 :)

1 个答案:

答案 0 :(得分:0)

您的命令似乎正确。在下面提供一些步骤,您可以尝试再次遵循该步骤,看看是否可行:

1)创建表并填充它(MySQL)

mysql> create database sqooptest;
mysql> use sqooptest;
mysql> create table emp (id int, name varchar(100), deg varchar(50), salary int, dept varchar(10));

mysql> insert into emp values(1201, 'gopal','manager',50000,'TP');
mysql> insert into emp values(1202, 'manisha','Proof reader',50000,'TP');
mysql> insert into emp values(1203, 'khalil','php dev',30000,'AC');
mysql> insert into emp values(1204, 'prasanth','php dev',30000,'AC');
mysql> insert into emp values(1205, 'kranthi','admin',20000,'TP');

mysql> select * from emp;
+------+----------+--------------+--------+------+
| id   | name     | deg          | salary | dept |
+------+----------+--------------+--------+------+
| 1201 | gopal    | manager      |  50000 | TP   |
| 1202 | manisha  | Proof reader |  50000 | TP   |
| 1203 | khalil   | php dev      |  30000 | AC   |
| 1204 | prasanth | php dev      |  30000 | AC   |
| 1205 | kranthi  | admin        |  20000 | TP   |
+------+----------+--------------+--------+------+

2)运行导入

$ sqoop import --connect jdbc:mysql://localhost/sqooptest --username root -P --table emp --m 1 --driver com.mysql.jdbc.Driver --target-dir /tmp/sqoopout

3)检查结果

$ hadoop fs -cat /tmp/sqoopout/*
1201,gopal,manager,50000,TP
1202,manisha,Proof reader,50000,TP
1203,khalil,php dev,30000,AC
1204,prasanth,php dev,30000,AC
1205,kranthi,admin,20000,TP

HDFS只有一个文件(part-m-00000):

$ hadoop fs -ls /tmp/sqoopout
Found 2 items
/tmp/sqoopout/_SUCCESS
/tmp/sqoopout/part-m-00000

这是因为数据大小很小,并且一个映射器足以处理它。您可以通过查看输出的sqoop日志来验证这一点:

Job Counters
        Launched map tasks=1