作者:@郑琰
本文转载请注明出处!:https://www.cnblogs.com/zhengyan6/p/16180946.html
下载和解压 Sqoop
安装 Sqoop组件需要与 Hadoop环境适配。使用 root用户在 Master节点上进行部署,将 /opt/software/sqoop-1.4.7.bin_hadoop-2.6.0.tar.gz 压 缩 包 解 压 到/usr/local/src目录下
| [root@master ~]# tar -zxvf /opt/software/sqoop-1.4.7.bin_hadoop-2.6.0.tar.gz -C /usr/local/src |
| #将解压后生成的 sqoop-1.4.7.bin_hadoop-2.6.0文件夹更名为 sqoop |
| [root@master ~]# cd /usr/local/src/ |
| [root@master src]#mv sqoop-1.4.7.bin_hadoop-2.6.0 sqoop |
配置 Sqoop 环境
步骤一:创建 Sqoop 的配置文件 sqoop-env.sh
| #复制 sqoop-env-template.sh模板,并将模板重命名为 sqoop-env.sh |
| [root@master ~]# cd /usr/local/src/sqoop/conf/ |
| [root@master conf]# cp sqoop-env-template.sh sqoop-env.sh |
步骤二:修改 sqoop-env.sh 文件,添加 Hdoop、Hbase、Hive 等组件的安装路径
| |
| [root@master conf] |
| export HADOOP_COMMON_HOME=/usr/local/src/hadoop |
| export HADOOP_MAPRED_HOME=/usr/local/src/hadoop |
| export HBASE_HOME=/usr/local/src/hbase |
| export HIVE_HOME=/usr/local/src/hive |
步骤三:配置 Linux 系统环境变量,添加 Sqoop 组件的路径
| [root@master conf] |
| |
| |
| export SQOOP_HOME=/usr/local/src/sqoop |
| export PATH=$PATH:$SQOOP_HOME/bin |
| export CLASSPATH=$CLASSPATH:$SQOOP_HOME/lib |
步骤四:连接数据库
为了使 Sqoop能够连接 MySQL数据库,需要将/opt/software/mysql-connector-java-5.1.46.jar文件放入 sqoop的 lib目录中。该 jar文件的版本需要与 MySQL数据库的版本相对应,否则 Sqoop导入数据时会报错。(mysql-connector-java-5.1.46.jar对应的是 MySQL 5.7版本)若该目录没有 jar包,则使用第 6章导入 home目录的 jar包
| [root@master ~] |
| /usr/local/src/sqoop/lib/ |
启动 Sqoop
步骤一:执行 Sqoop 前需要先启动 Hadoop 集群
| |
| [root@master ~] |
| [hadoop@master ~]$ source /etc/profile |
| [hadoop@master ~]$ start-all.sh |
步骤二:检查 Hadoop 集群的运行状态
| [hadoop@master ~]$ jps |
| 1457 NameNode |
| 1795 ResourceManager |
| 2060 Jps |
| 1646 SecondaryNameNode |
步骤三:测试 Sqoop 是否能够正常连接 MySQL 数据库
| |
| [hadoop@master ~]$sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username root -P |
| |
| Warning: /home/hadoop/sqoop/../hcatalog does not exist! HCatalog |
| jobs will fail. |
| Please set $HCAT_HOME to the root of your HCatalog installation. |
| Warning: /home/hadoop/sqoop/../accumulo does not exist! Accumulo |
| imports will fail. |
| Please set $ACCUMULO_HOME to the root of your Accumulo |
| installation. |
| Warning: /home/hadoop/sqoop/../zookeeper does not exist! |
| Accumulo imports will fail. |
| Please set $ZOOKEEPER_HOME to the root of your Zookeeper |
| installation. |
| 19/04/22 18:54:10 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7 |
| Enter password: |
| 19/04/22 18:54:14 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. |
| information_schema hive mysql performance_schema |
| sys |
| |
| |
步骤四:连接 hive
| |
| |
| [root@master ~] cp /usr/local/src/hive/lib/hive-common-2.0.0.jar |
| /usr/local/src/sqoop/lib/ |
Sqoop 模板命令
步骤一:创建 MySQL 数据库和数据表
创建 sample 数据库,在 sample 中创建 student 表,在 student 表中插入了 3 条数据
| # 登录 MySQL数据库 |
| [hadoop@master ~]$ mysql -uroot -p |
| Enter password: |
| |
| # 创建 sample库 |
| mysql> create database sample; |
| Query OK, 1 row affected (0.00 sec) |
| |
| # 使用 sample库 |
| mysql> use sample; |
| Database changed |
| mysql> create table student(number char(9) primary key, name varchar(10)); |
| Query OK, 0 rows affected (0.01 sec) # 创建 student 表,该数据表有number学号和 name姓名两个字段 |
| |
| # 向 student表插入几条数据 |
| mysql> insert into student values('01','zhangsan'); |
| Query OK, 1 row affected (0.05 sec) |
| mysql> insert into student values('02','lisi'); |
| Query OK, 1 row affected (0.01 sec) |
| mysql> insert into student values('03','wangwu'); |
| Query OK, 1 row affected (0.00 sec) |
| |
| # 查询 student表的数据 |
| mysql> select * from student; |
| + |
| | number | name | |
| + |
| | 01 | zhangsan | |
| | 02 | lisi | |
| | 03 | wangwu | |
| + |
| 3 rows in set (0.00 sec) |
| mysql> exit |
步骤二:在 Hive 中创建 sample 数据库和 student 数据表
| [hadoop@master ~]$ hive # 启动 hive命令行 |
| |
| hive> create database sample; # 创建 sample库 |
| OK |
| Time taken: 0.679 seconds |
| |
| hive> show databases; # 查询所有数据库 |
| OK default |
| Time taken: 0.178 seconds, Fetched: 2 row(s) |
| |
| hive> use sample; # 使用 sample库 |
| OK |
| |
| hive> create table student(number STRING, name STRING) |
| row format delimited |
| fields terminated by "|" |
| stored as textfile; # 创建 student表 |
| OK |
| |
| hive> exit; # 退出 hive命令行 |
步骤三:从 MySQL 导出数据,导入 Hive
需要说明该命令的以下几个参数:
1)--connect:MySQL数据库连接 URL。
2)--username和--password:MySQL数据库的用户名和密码。
3)--table:导出的数据表名。
4)--fields-terminated-by:Hive中字段分隔符。
5)--delete-target-dir:删除导出目的目录。
6)--num-mappers:Hadoop执行 Sqoop导入导出启动的 map任务数。
7)--hive-import --hive-database:导出到 Hive的数据库名。
8)--hive-table:导出到 Hive的表名。
| [hadoop@master ~]$ sqoop |
| import --connect jdbc:mysql://master:3306/sample --username root --password Password123$ --table student --fields-terminated-by '|' --delete-target-dir --num-mappers 1 --hive-import --hive-database sample --hive-table student |
| |
| |
| [hadoop@master ~]$mysql -u root -p |
| mysql>use sample; |
| mysql>delete from student; |
| mysql>exit; |
步骤四:从 Hive 导出数据,导入到 MySQL
需要说明该命令的以下几个参数:
1)--connect:MySQL数据库连接 URL。
2)--username和--password:MySQL数据库的用户名和密码。
3)--table:导出的数据表名。
4)--fields-terminated-by:Hive中字段分隔符。
6)--export-dir:Hive数据表在 HDFS中的存储路径。
| [hadoop@master ~]$ sqoop export --connect "jdbc:mysql://master:3306/sample?useUnicode=true&characterEncoding=utf-8" --username root --password Password123$ --table student --input-fields-terminated-by '|' --export-dir /user/hive/warehouse/sample.db/student/* |
Sqoop 组件应用
Sqoop常用设置命令如下:
(1)列出 MySQL数据库中的所有数据库
| [hadoop@master ~]$ sqoop list-databases -connect jdbc:mysql://localhost:3306/ -username root -password Password123$ |
| |
(2)连接 MySQL并列出 sample数据库中的表
| [hadoop@master ~]$ sqoop list-tables -connect jdbc:mysql://localhost:3306/sample -username root -password Password123$ |
| |
(3)将关系型数据的表结构复制到 hive中,只是复制表的结构,表中的内容没有复制过去
| [hadoop@master ~]$ sqoop create-hive-table -connect jdbc:mysql://localhost:3306/sample -table student -username root -password Password123$ -hive-table test |
| #其中–table student为 MySQL中的数据库 sample中的表–hive-table test为 hive中新建的表名称 |
(4)从关系数据库导入文件到 Hive中
| [hadoop@master ~]$sqoop import --connect jdbc:mysql://master:3306/sample --username root --password Password123$ --table student --delete-target-dir --num-mappers 1 --hive-import --hive-database default --hive-table test |
(5)将 Hive中的表数据导入到 MySQL中,在进行导入之前,MySQL中的表hive_test表必须已经提前创建好
| |
| [hadoop@master ~]$ mysql -u root -p |
| mysql>use sample; |
| mysql>delete from student; |
| mysql>exit; |
| |
| [hadoop@master ~]$ sqoop export -connect jdbc:mysql://master:3306/sample -username root -password Password123$ -table student --input-fields-terminated-by '\001' -export-dir /user/hive/warehouse/test |
(6)从数据库导出表的数据到 HDFS上文件
| [hadoop@master ~]$ sqoop import -connect jdbc:mysql://master:3306/sample -username root -password Password123$ -table student --num-mappers 1 -target-dir /user/test |
(7)从数据库增量导入表数据到 HDFS中
| #密码 Password123$ |
| [hadoop@master ~]$mysql -u root -p |
| mysql>use sample; |
| mysql> insert into student values('04','sss'); |
| mysql> insert into student values('05','ss2'); |
| mysql> insert into student values('06','ss3'); |
| #非数值型的值不能当做增量 |
| mysql> alter table student modify column number int; |
| mysql> exit; |
| |
| [hadoop@master ~]$sqoop import -connect jdbc:mysql://master:3306/sample -username root -password Password123$ -table student |
| |
| #查看导入数据 |
| [hadoop@master ~]$hdfs dfs -cat /user/test/part-m-00000 |

至此已做完了!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)