Sqoop1的安装配置及入门案例

 

教程目录

 

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的安装配置及入门案例

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的安装配置及入门案例b. 查看版本号(有则表示成功,警告信息可以忽略,还没有启动相关的组件而已)
sqoop version
Sqoop1的安装配置及入门案例
c. 查看帮助列表(具体命令的帮助可再加命令,如:sqoop help list-databases
sqoop help
Sqoop1的安装配置及入门案例
d. 通过Sqoop列出Mysql的数据库(命令可以参考上面help的提示)
前提:需要安装好Mysql(我安装在master机器,账号密码都是:root)
sqoop list-databases --connect jdbc:mysql://master:3306 --username root --password root
Sqoop1的安装配置及入门案例

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的安装配置及入门案例
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的安装配置及入门案例

2. 导入MySQL数据到HDFS

a. 启动HDFS和YARN(start-dfs.shstart-yarn.sh
Sqoop1的安装配置及入门案例
b. 将Mysql中的sny_teacher表数据导入到HDFS中
sqoop import --connect jdbc:mysql://master:3306/sny --username root --password root --table sny_teacher
Sqoop1的安装配置及入门案例
没有报错,但是我们没有指定导入数据到哪里,也没有其他的限制,均是使用默认的。

3. 校验是否导入成功

a. 查看HDFS上的数据
hadoop fs -ls /user/hadoop-sny/
hadoop fs -ls /user/hadoop-sny/sny_teacher
Sqoop1的安装配置及入门案例
其实数据是默认放到了/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的安装配置及入门案例

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的安装配置及入门案例

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 增量导入的模式

作者简介:邵奈一
全栈工程师、市场洞察者、专栏编辑
| 公众号 | 微信 | 微博 | CSDN | 简书 |

福利:
邵奈一的技术博客导航
邵奈一 原创不易,如转载请标明出处。


 

上一篇:Could not find artifact org.apache.sqoop:sqoop:jar:1.4.6.2.3.99.0-195


下一篇:利用sqoop将hive数据导入导出数据到mysql