教程目录


0x00 教程内容


  1. Sqoop的下载与解压
  2. Sqoop的配置及校验
  3. Sqoop的入门案例

说明:

1、Sqoop版本有1和2,这里教程是1版本

2、因为Sqoop其实跑的就是MapReduce作业,所以需要确保HDFS、YARN有没有安装配置成功

3、此教程演示导入MySQL数据到HDFS,所以需先安装好MySQL

0x01 Sqoop的下载与解压

1. 下载

a. 网站

​ http://www.apache.org/dyn/closer.lua/sqoop/1.4.7​

Sqoop1的安装配置及入门案例_数据迁移

b. 其他镜像下载

​ http://mirrors.hust.edu.cn/apache/sqoop/1.4.7/​

c. 这里统一下载(版本没有特别要求hadoop-2.6.0适用于2.7.x)

​sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz​

2. 解压

a. 上传安装包到master,并解压到​​~/bigdata​

Sqoop1的安装配置及入门案例_数据迁移_02

0x02 Sqoop的配置及校验

1. 配置Sqoop环境变量

a. 配置Sqoop环境变量

​vi ~/.bash_profile​

添加内容:

export SQOOP_HOME=/home/hadoop-sny/bigdata/sqoop-1.4.7.bin__hadoop-2.6.0
PATH=$PATH:$SQOOP_HOME/bin

使环境变量生效

​source ~/.bash_profile​

2. 校验Sqoop

a. 将Mysql的JDBC驱动jar包上传到​​$SQOOP_HOME/lib​​目录

Sqoop1的安装配置及入门案例_sqoop_03b. 查看版本号(有则表示成功,警告信息可以忽略,还没有启动相关的组件而已)

​sqoop version​

Sqoop1的安装配置及入门案例_mysql_04

c. 查看帮助列表(具体命令的帮助可再加命令,如:​​sqoop help list-databases​​)

​sqoop help​

Sqoop1的安装配置及入门案例_hdfs_05

d. 通过Sqoop列出Mysql的数据库(命令可以参考上面help的提示)

前提:需要安装好Mysql(我安装在master机器,账号密码都是:root)

​sqoop list-databases --connect jdbc:mysql://master:3306 --username root --password root​

Sqoop1的安装配置及入门案例_mysql_06

0x03 Sqoop的入门案例之MySQL到HDFS

1. 准备MySQL数据

a. 为了演示,我在MySQL里新建一张演示表:sny_teacher

CREATE TABLE `sny_teacher` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '教师表id',
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(50) NOT NULL COMMENT '用户密码,MD5加密',
`email` varchar(50) DEFAULT NULL COMMENT 'email',
`wechat` varchar(50) DEFAULT NULL COMMENT '微信',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '最后一次更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `user_name_unique` (`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;

Sqoop1的安装配置及入门案例_sqoop_07

b. 插入几条数据

INSERT INTO `sny_teacher` VALUES 
('1', 'shaonaiyi', '427338237BD929443EC5D48E24FD2B1A', 'shaonaiyi@163.com', 'shaonaiyi888', '2019-09-06 16:56:45', '2019-09-07 19:27:36'),
('2', 'shaonaier', '427338237BD929443EC5D48E24FD2B1A', 'shaonaier@163.com', 'shaonaier888', '2019-09-06 16:56:46', '2019-09-07 19:27:37');

Sqoop1的安装配置及入门案例_mysql_08

2. 导入MySQL数据到HDFS

a. 启动HDFS和YARN(​​start-dfs.sh​​、​​start-yarn.sh​​)

Sqoop1的安装配置及入门案例_hdfs_09

b. 将Mysql中的​​sny_teacher​​表数据导入到HDFS中

​sqoop import --connect jdbc:mysql://master:3306/sny --username root --password root --table sny_teacher​

Sqoop1的安装配置及入门案例_sqoop_10

没有报错,但是我们没有指定导入数据到哪里,也没有其他的限制,均是使用默认的。

3. 校验是否导入成功

a. 查看HDFS上的数据

​hadoop fs -ls /user/hadoop-sny/​

​hadoop fs -ls /user/hadoop-sny/sny_teacher​

Sqoop1的安装配置及入门案例_sqoop_11

其实数据是默认放到了​​/user/用户名/表名​​这个路径下面的。

b. 继续查看里面的内容

​hadoop fs -cat /user/hadoop-sny/sny_teacher/part-m-00000​

​hadoop fs -cat /user/hadoop-sny/sny_teacher/part-m-00001​

Sqoop1的安装配置及入门案例_hdfs_12

4. 彩蛋之实现导入HDFS数据到Hive

a. 启动Hive客户端

​hive​

b. 在Hive中新建对应MySQL表​​sny_teacher​​的Hive表

CREATE DATABASE IF NOT EXISTS sny;
USE sny;
DROP TABLE IF EXISTS sny_teacher;

CREATE TABLE sny_teacher(
id INT,
username STRING,
password STRING,
email STRING,
wechat STRING,
create_time STRING,
update_time STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

LOAD DATA INPATH 'hdfs://master:9999/user/hadoop-sny/sny_teacher' OVERWRITE INTO TABLE sny_teacher;

执行完此步骤,其实已经没有 ​​hdfs://master:9999/user/hadoop-sny/sny_teacher​​ 此文件夹了。

Sqoop1的安装配置及入门案例_sqoop_13

0x04 Sqoop的入门案例之HDFS到MySQL

1. 准备HDFS数据

a. 因为刚刚将​​/user/hadoop-sny/sny_teacher​​是文件夹和数据都删除了,所以需要再导入一份进来

​sqoop import --connect jdbc:mysql://master:3306/sny --username root --password root --table sny_teacher​

2. 新建MySQL对应表

b. 在MySQL中新建​​sny_teacher1​​表,用于等下将HDFS上的数据导入到此表中:

CREATE TABLE `sny_teacher1` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '教师表id',
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(50) NOT NULL COMMENT '用户密码,MD5加密',
`email` varchar(50) DEFAULT NULL COMMENT 'email',
`wechat` varchar(50) DEFAULT NULL COMMENT '微信',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '最后一次更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `user_name_unique` (`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;
3. 从HDFS导出数据到MySQL

a. 从MySQL导出数据到HDFS上,默认是以逗号进行分割,所以此处是使用逗号

sqoop export  --connect jdbc:mysql://master:3306/sny  \
--username root --password root \
--table sny_teacher1 --m 1 \
--export-dir /user/hadoop-sny/sny_teacher/ \
--input-fields-terminated-by ','

0x05 Sqoop的入门案例之Hive到MySQL

1. 创建MySQL表
CREATE TABLE `sny_teacher2` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '教师表id',
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(50) NOT NULL COMMENT '用户密码,MD5加密',
`email` varchar(50) DEFAULT NULL COMMENT 'email',
`wechat` varchar(50) DEFAULT NULL COMMENT '微信',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '最后一次更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `user_name_unique` (`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;
2. 导出Hive表中的数据到MySQL

a. Hive的默认存储路径为​​/user/hive/warehouse/sny.db/sny_teacher​

sqoop export  --connect jdbc:mysql://master:3306/sny  \
--username root --password root \
--table sny_teacher2 --m 1 \
--export-dir /user/hive/warehouse/sny.db/sny_teacher \
--input-fields-terminated-by ','

其实,导完后,Hive中还是有数据的。

0xFF 总结


  1. 更多教程,可参考:​​使用Sqoop导出MySQL数据到Hive(实战案例)​
  2. Sqoop1导入表数据命令的参数可以输入:​​sqoop help import​​ 查看
    如根据id进行分区:
    ​sqoop import --connect jdbc:mysql://master:3306/movie --username root --password root --table movie --split-by id​​ 还有其他参数,如:​​--target-dir​​、​​--warehouse-dir​​等等
  3. 在MySQL中添加几条数据,然后重新执行命令,以进行增量导入,如:​​sqoop import --connect jdbc:mysql://master:3306/sny --username root --password root --table sny_teacher --split-by id --check-column id --last-value 2 --incremental append​

--check-column 核实数据类型
--last-value 上一次导入数据检查列的最大值
--incremental 增量导入的模式

作者简介:​邵奈一​

全栈工程师、市场洞察者、专栏编辑

福利:

​邵奈一的技术博客导航​

​邵奈一​​ 原创不易,如转载请标明出处。