Sqoop安装及案例导入导出数据(基于Hadoop环境)
Sqoop主要用于在Hadoop(Hive)与传统的数据库MySQL间进行数据的传递 可以将一个关系型数据库(如:MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。 原理:将导入或导出命令翻译成mapreduce程序来实现 在翻译出的mapreduce中主要是对inputformat和outputformat进行定制
一、Sqoop的安装
1、将Sqoop的安装包拷贝到/opt/software目录下
[ mnlg@XJ202 ~ ] $ cd / opt/ software/
[ mnlg@XJ202 software] $ tar - zxvf sqoop- 1.4 .6 . bin__hadoop- 2.0 .4 - alpha. tar. gz - C / opt/ module /
[ mnlg@XJ202 software] $ cd / opt/ module /
[ mnlg@XJ202 module ] $ ll
[ mnlg@XJ202 module ] $ mv sqoop- 1.4 .6 . bin__hadoop- 2.0 .4 - alpha/ sqoop- 1.4 .6
[ mnlg@XJ202 module ] $ ll
2、修改配置文件
[ mnlg@XJ202 module ] $ cd sqoop- 1.4 .6 /
[ mnlg@XJ202 sqoop- 1.4 .6 ] $ ll
[ mnlg@XJ202 sqoop- 1.4 .6 ] $ cd conf/
[ mnlg@XJ202 conf] $ ll
[ mnlg@XJ202 conf] $ mv sqoop- env- template. sh sqoop- env. sh
3、添加配置文件内容
[ mnlg@XJ202 conf] $ vim sqoop- env. sh
export HADOOP_COMMON_HOME= / opt/ module / hadoop- 3.1 .3
export HADOOP_MAPRED_HOME= / opt/ module / hadoop- 3.1 .3
export HBASE_HOME= / opt/ module / hbase- 2.3 .6
export HIVE_HOME= / opt/ module / hive- 3.1 .2
export ZOOCFGDIR= / opt/ module / zookeeper- 3.5 .7
[ mnlg@XJ202 ~ ] $ cd / opt/ module / hadoop- 3.1 .3 /
[ mnlg@XJ202 hadoop- 3.1 .3 ] $ pwd
/ opt/ module / hadoop- 3.1 .3
[ mnlg@XJ202 hadoop- 3.1 .3 ] $ cd . .
[ mnlg@XJ202 module ] $ cd hbase- 2.3 .6 /
[ mnlg@XJ202 hbase- 2.3 .6 ] $ pwd
/ opt/ module / hbase- 2.3 .6
[ mnlg@XJ202 hbase- 2.3 .6 ] $ cd . .
[ mnlg@XJ202 module ] $ cd hive- 3.1 .2 /
[ mnlg@XJ202 hive- 3.1 .2 ] $ pwd
/ opt/ module / hive- 3.1 .2
[ mnlg@XJ202 module ] $ cd zookeeper- 3.5 .7 /
[ mnlg@XJ202 zookeeper- 3.5 .7 ] $ pwd
/ opt/ module / zookeeper- 3.5 .7
4、拷贝JDBC驱动
[ mnlg@XJ202 ~ ] $ cd / opt/ module / hive- 3.1 .2 /
[ mnlg@XJ202 hive- 3.1 .2 ] $ ll
[ mnlg@XJ202 hive- 3.1 .2 ] $ cd lib/
[ mnlg@XJ202 lib] $ cp mysql- connector- java- 5.1 .27 - bin. jar / opt/ module / sqoop- 1.4 .6 / lib/
[ mnlg@XJ202 lib] $ cd / opt/ module / sqoop- 1.4 .6 / lib/
[ mnlg@XJ202 lib] $ ll
[ mnlg@XJ202 lib] $ cd . .
[ mnlg@XJ202 sqoop- 1.4 .6 ] $ bin/ sqoop help
[ mnlg@XJ202 sqoop- 1.4 .6 ] $ mysql - uroot - p
mysql> quit;
5、 测试Sqoop是否能够成功连接数据库
[ mnlg@XJ202 sqoop- 1.4 .6 ] $ bin/ sqoop list- databases -- connect jdbc: mysql: / / XJ202: 3306 / \
> -- username root \
> -- password 000000
二、案例(Sqoop方式将数据导入到hdfs中)
在Sqoop中,“导入”概念指:从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE,HBASE)中传输数据,叫做:导入,即使用import关键字 在Sqoop中,“导出”概念指:从大数据集群(HDFS,HIVE,HBASE)向非大数据集群(RDBMS)中传输数据,叫做:导出,即使用export关键字
1、保证MySQL服务开启正常
[ mnlg@XJ202 ~ ] $ my_hadoop. sh start
[ mnlg@XJ202 ~ ] $ mysql - uroot - p
2、MySQL中新建表并插入一些数据
mysql> create database company;
mysql> use company;
mysql> create table staff ( id int primary key auto_increment, name varchar ( 20 ) , sex varchar ( 20 ) ) ;
mysql> show tables;
+ -- -- -- -- -- -- -- -- -- - +
| Tables_in_company |
+ -- -- -- -- -- -- -- -- -- - +
| staff |
+ -- -- -- -- -- -- -- -- -- - +
1 row in set ( 0.00 sec)
mysql> desc staff;
+ -- -- -- - + -- -- -- -- -- -- - + -- -- -- + -- -- - + -- -- -- -- - + -- -- -- -- -- -- -- -- +
| Field | Type | Null | Key | Default | Extra |
+ -- -- -- - + -- -- -- -- -- -- - + -- -- -- + -- -- - + -- -- -- -- - + -- -- -- -- -- -- -- -- +
| id | int ( 11 ) | NO | PRI | NULL | auto_increment |
| name | varchar ( 20 ) | YES | | NULL | |
| sex | varchar ( 20 ) | YES | | NULL | |
+ -- -- -- - + -- -- -- -- -- -- - + -- -- -- + -- -- - + -- -- -- -- - + -- -- -- -- -- -- -- -- +
3 rows in set ( 0.10 sec)
mysql> insert into staff values ( null , 'tom' , 'male' ) ;
mysql> insert into staff values ( null , 'jary' , 'female' ) ;
mysql> select * from staff;
mysql> quit;
3、导入数据(之后记得去浏览器端口查看是否有company文件夹)
[ mnlg@XJ202 sqoop- 1.4 .6 ] $ bin/ sqoop import \
-- connect jdbc: mysql: / / XJ202: 3306 / company \
-- username root \
-- password 000000 \
-- table staff \
-- target- dir / company \
-- num- mappers 1 \
-- fields- terminated- by "\t"
4、导出数据(不可使用之前的staff表,需新建表)
[ mnlg@XJ202 sqoop- 1.4 .6 ] $ mysql - uroot - p
mysql> use company;
mysql> create table staff1 ( id int primary key auto_increment, name varchar ( 20 ) , sex varchar ( 20 ) ) ;
mysql> show tables;
+ -- -- -- -- -- -- -- -- -- - +
| Tables_in_company |
+ -- -- -- -- -- -- -- -- -- - +
| staff |
| staff1 |
+ -- -- -- -- -- -- -- -- -- - +
2 rows in set ( 0.00 sec)
mysql> quit;
5、导出数据(HIVE/HDFS到RDBMS)
[ mnlg@XJ202 sqoop- 1.4 .6 ] $ bin/ sqoop export \
-- connect jdbc: mysql: / / XJ202: 3306 / company \
-- username root \
-- password 000000 \
-- table staff1 \
-- num- mappers 1 \
-- export- dir / company/ part- m- 00000 \
-- input- fields- terminated- by "\t"
6、查看数据是否导出成功
[ mnlg@XJ202 sqoop- 1.4 .6 ] $ mysql - uroot - p
mysql> use company;
mysql> select * from staff1;
+ -- -- + -- -- -- + -- -- -- -- +
| id | name | sex |
+ -- -- + -- -- -- + -- -- -- -- +
| 1 | tom | male |
| 2 | jary | female |
+ -- -- + -- -- -- + -- -- -- -- +
2 rows in set ( 0.00 sec)