资源规划

组件 bigdata-node1 bigdata-node2 bigdata-node3
OS centos7.6 centos7.6 centos7.6
JDK jvm jvm jvm
HDFS NameNode/SecondaryNameNode/DataNode/JobHistoryServer/ApplicationHistoryServer DataNode DataNode
YARN ResourceManager/NodeManager NodeManager NodeManager
Hive HiveServer2/Metastore/CLI/Beeline CLI/Beeline CLI/Beeline
MySQL N.A N.A MySQL-5.7.30
Sqoop sqoop N.A N.A

安装介质

版本:sqoop-1.4.6.binhadoop-2.0.4-alpha.tar.gz
下载:[http://archive.apache.org/dist/sqoop/1.4.6/sqoop-1.4.6.bin
hadoop-2.0.4-alpha.tar.gz](http://archive.apache.org/dist/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz)

环境准备

安装Hadoop

参考:《CentOS7.6-安装Hadoop-2.7.2

安装MySQL

参考:《CentOS7.6-安装MySQL-5.7.30

安装Sqoop

  1. 根据资源规划,Sqoop安装在节点bigdata-node1上。

解压缩

  1. cd /share
  2. wget http://archive.apache.org/dist/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
  3. tar -zvxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C ~/modules/
  4. rm sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

配置

配置sqoop-env.sh:

  1. cd ~/modules/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/conf
  2. cp sqoop-env-template.sh sqoop-env.sh
  3. vi ~/modules/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/conf/sqoop-env.sh

配置如下:

  1. # 末尾添加
  2. export HADOOP_COMMON_HOME=/home/vagrant/modules/hadoop-2.7.2
  3. export HADOOP_MAPRED_HOME=/home/vagrant/modules/hadoop-2.7.2
  4. export HIVE_HOME=/home/vagrant/modules/apache-hive-2.3.4-bin

加载JDBC驱动

拷贝jdbc驱动到sqoop的lib目录下,如:

  1. cp mysql-connector-java-5.1.47.jar ~/modules/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/

验证

  1. cd ~/modules/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
  2. bin/sqoop help

测试Sqoop是否能够成功连接数据库。

  1. cd ~/modules/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
  2. bin/sqoop list-databases --connect jdbc:mysql://bigdata-node3:3306/ --username root --password 123456

案例

数据准备

  • Hive库表

    1. # 需提前启动HDFS和Yarn服务
    2. # 创建数据文件
    3. vi ~/datas/stu.txt

    内容如下(注意:请检查确定列分割符为\t):

    1. 00001 zhangsan
    2. 00002 lisi
    3. 00003 wangwu
    4. 00004 zhaoliu

    创建库表并加载数据到Hive表:

    1. cd ~/modules/apache-hive-2.3.4-bin/bin
    2. ./hive
    3. # 创建表
    4. hive>> CREATE TABLE stu(id INT,name STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;
    5. # 加载数据
    6. hive>> load data local inpath '/home/vagrant/datas/stu.txt' into table stu;
    7. # 查看库表
    8. hive>> select * from stu;
  • MySQL库表

登录MySQL客户端:

  1. # bigdata-node3(MySQL安装节点,root)
  2. source /etc/profile
  3. mysql -uroot -p123456

执行如下SQL:

  1. -- 创建数据库
  2. create database `testdb` default character set utf8 collate utf8_general_ci;
  3. -- 切换数据库
  4. use testdb;
  5. -- 清除库表
  6. DROP TABLE IF EXISTS `stu`;
  7. -- 新建库表
  8. CREATE TABLE `stu` (
  9. `id` bigint(20) NOT NULL,
  10. `name` varchar(255) DEFAULT NULL,
  11. PRIMARY KEY (`id`)
  12. );
  13. -- 授权
  14. grant all on testdb.* to root@'%' identified by '123456' with grant option;
  15. grant all privileges on testdb.* to 'root'@'%' identified by '123456' with grant option;
  16. flush privileges;
  17. quit;

脚本开发

  1. 创建一个.opt文件。

    1. mkdir -p ~/modules/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/jobs
    2. cd ~/modules/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
    3. touch jobs/job_Hive2MySQL.opt
  2. 编写sqoop脚本。

    1. cd ~/modules/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
    2. rm -rf jobs/job_Hive2MySQL.opt
    3. vi jobs/job_Hive2MySQL.opt

    脚本内容如下:

    1. export
    2. --connect
    3. jdbc:mysql://bigdata-node3:3306/testdb?useSSL=false
    4. --username
    5. root
    6. --password
    7. 123456
    8. --table
    9. stu
    10. --num-mappers
    11. 2
    12. --export-dir
    13. /user/hive/warehouse/stu/stu.txt
    14. --input-fields-terminated-by
    15. "\t"
    16. --input-null-string
    17. '\\N'
    18. --input-null-non-string
    19. '\\N'
  3. 执行该脚本。

    1. # 请先启动HDFS、Yarn、MySQL等服务
    2. cd ~/modules/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
    3. bin/sqoop --options-file jobs/job_Hive2MySQL.opt

    扩展

  4. Sqoop导出模式。

Sqoop有多种导出方式(全量、增量、更新)等模式。

  1. 利用sqoop对mysql执行DML操作。

利用Sqoop对MySQL进行查询、添加、删除等操作。

  1. # 删除(delete from)
  2. cd ~/modules/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
  3. bin/sqoop eval \
  4. --connect jdbc:mysql://bigdata-node3:3306/testdb?useSSL=false \
  5. --username root \
  6. --password 123456 \
  7. --query "delete from stu "
  8. # 清除(truncate table)
  9. bin/sqoop eval \
  10. --connect jdbc:mysql://bigdata-node3:3306/testdb?useSSL=false \
  11. --username root \
  12. --password 123456 \
  13. --query "truncate table stu "
  14. # 存储过程调用(call procedure_xxx())
  15. sqoop eval \
  16. --connect jdbc:mysql://bigdata-node3:3306/testdb?useSSL=false \
  17. --username root \
  18. --password 123456 \
  19. --query "call procedure_clear_stu()"

参考

CSDN:Sqoop导出模式——全量、增量insert、更新update的介绍以及脚本示例
https://blog.csdn.net/wiborgite/article/details/80991567