Sqoop 基础使用 MySQL <-> HDFS 互导数据

相关配置版本

组件 版本
Hadoop 2.9.2
Jdk 1.8.0_221
CentOS 7.7
Sqoop 2.6.0
MySQL 5.7.30
MySQL驱动 5.1.48

Sqoop 说明

把Sqoop 当作一个工具就好,它的主要作用就是把 传统数据库的数据大数据存储互导数据

  • MySQL <-> HDFS
  • MySQL <-> Hive
  • 使用SQL作为导入条件

安装MySQL

# 没有 wget ,则执行这个
yum install wget

# 下载 MySQL 5.7
wget  http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm

# 安装 rpm 包
yum -y install mysql57-community-release-el7-10.noarch.rpm

# 通过Yum来安装MySQL,会自动处理MySQL与其他组件的依赖关系
yum install mysql-community-server 

# 启动 MySQL
systemctl start mysqld.service

# 查看密码
grep password /var/log/mysqld.log

修改 MySQL 密码

原本密码强度需要 大小写母 特殊字符 数字, 最少8位,我们把密码改简单一点

# 首先进入 MySQL
mysql -uroot -p

# 查看密码策略
SHOW VARIABLES LIKE "%password%";

# 修改密码长度策略为5 就是密码长度最短 5 位
SET GLOBAL validate_password_length=5;

# 修改密码强度策略 0 就不需要大小写字母和符号
SET GLOBAL validate_password_policy=0;

# 修改密码
SET PASSWORD = PASSWORD("123456");

复制驱动

把 MySQL驱动 复制到 Sqoop 的lib/ 目录下

cp mysql-connector-java-5.1.38-bin.jar /usr/local/src/sqoop-1.4.7/lib/

测试是否连接成功

通过 Sqoop 查看 MySQL 数据库。

sqoop list-databases \
--connect jdbc:mysql://127.0.0.1:3306 \
--username 'root' \
--password '123456'

mark

MySQL —> HDFS

首先需要在 MySQL 建好需要导出的 ,以及添加好内容

# 创建 test  数据库
craete database test;

# 创建 stab 表
create table stab(
    id int,
    name varchar(20)
    );

# 插入 stab表 数据
insert into stab(id, name) values(1,"big"),(2,"data"),(3,"boy");

使用 Sqoop 导出,命令关键字 import(导入)

sqoop import \
--connect 'jdbc:mysql://127.0.0.1:3306/test' \
--table 'stab' \
--username 'root' \
--password '123456' \
--target-dir '/sqoop/stab' \
--fields-terminated-by '|' \
--split-by id

某些参数含义

  • —connect : MySQL数据库地址
  • —table : 需要导出表的表名
  • —target-dir : 表导出的HDFS地址
  • —fields-terminated-by : 设置 导出数据 字符分隔符
  • —split-by id : HDFS 上数据的分区规则(最好该字段是 int 类型,默认为主键),上命令,表示安装 id 字段分区,如果不分区,就把--split-by id替换成-m 1即可
  • -m : 表明需要使用几个map任务并发执行
    • 如果设置为2,则表示:
      • 第一个map执行拆分字段值为(1,25)之间的数据,处理结果会在一个分区
      • 第二个map执行拆分字段值为(26,50)之间的数据,处理结果会在另一个分区

mark

HDFS —> MySQL

Sqoop 不能创建表,所以需要实现把表创建完成。

清空 test数据库stab表的数据,命令关键字 export(导出)

truncate table test.stab;

使用 Sqoop 从 HDFS 导入到 MySQL

sqoop export \
--connect 'jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8' \
--username 'root' \
--password '123456' \
--table 'stab' \
--export-dir '/sqoop/stab' \
--fields-terminated-by '|' \
-m 1

mark

发表评论 / Comment

用心评论~