在实现数据导出之前,我们先做一下数据导入,使HDFS中有数据。
- 将之前已经存在的表emp的数据导入至HDFS
[root@hadoop01 ~]# sqoop import --connect jdbc:mysql://hadoop03:3306/test_sqoop --username root --password 123456 --table emp --target-dir hdfs://hadoop01:8020/test_sqoop_hdfs/emp --delete-target-dir;
可以看到数据已经导入:
- 在mysql中创建要接收HDFS导出数据的表
[root@hadoop03 ~]# mysql -uroot -p123456
mysql> use test_sqoop;
mysql> create table emp_export(
-> empno INT primary key,
-> ename VARCHAR(50),
-> job VARCHAR(50),
-> mgr INT,
-> hiredate DATE,
-> sal DECIMAL(7,2),
-> comm decimal(7,2),
-> deptno INT);
- 导出数据
[root@hadoop01 ~]# sqoop export --connect jdbc:mysql://hadoop03:3306/test_sqoop \
> --username root \
> --password 123456 \
> --table emp_export \ #导出至哪个表
> --export-dir '/test_sqoop_hdfs/emp/*' \ #导出HDFS中的哪个目录的数据
> -m 1; #指定map进程数
#mysql中默认使用逗号对字段进行分隔,所以如果你的HDFS中的数据如果是以逗号分隔的话,这里不用特殊处理,如果HDFS中的数据是以非逗号,比如以\t来分隔的,那么在导出数据时,就需要在这里加上参数--input-fields-terminated-by '\t'表示你input的数据是以\t来分隔的。
- 查看表
mysql> select * from emp_export;
可以看到表中数据与HDFS目录中的数据一致,导出成功。