- Sqoop主要用于在Hadoop(Hive)与传统的数据库MySQL间进行数据的传递
- 可以将一个关系型数据库(如:MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
- 原理:将导入或导出命令翻译成mapreduce程序来实现
- 在翻译出的mapreduce中主要是对inputformat和outputformat进行定制
[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]$ ll2、修改配置文件
[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.sh3、添加配置文件内容
[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.74、拷贝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 .. //验证Sqoop配置是否正确 [mnlg@XJ202 sqoop-1.4.6]$ bin/sqoop help //生成Available commands:。。。。等即配置正确 [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关键字
[mnlg@XJ202 ~]$ my_hadoop.sh start //启动集群 [mnlg@XJ202 ~]$ mysql -uroot -p //进入mysql2、MySQL中新建表并插入一些数据
mysql> create database company; //新建数据库
mysql> use company; //一定要use,不然会报错
//新建表
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文件夹)
//第三行‘XJ202’根据需求进行更改 [mnlg@XJ202 sqoop-1.4.6]$ bin/sqoop import //导入 --connect jdbc:mysql://XJ202:3306/company //连接的端口 --username root //连接名 --password 000000 //连接的密码 --table staff //导入数据的表名 --target-dir /company //导入数据放在文件夹company下 --num-mappers 1 //设置map的任务数量为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)
//第三行‘XJ202’根据需求进行更改 [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 //这里采用刚刚导入数据来进行导出(即将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; //查看staff1表中是否有数据 +----+------+--------+ | id | name | sex | +----+------+--------+ | 1 | tom | male | | 2 | jary | female | +----+------+--------+ 2 rows in set (0.00 sec)



