我在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。
在此先感谢您找到解决方案。 :)
答案 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