Sqoop学习

目录

一、Soop简介

二、Sqoop的安装

[1. 上传压缩包到/opt/install目录下](#1. 上传压缩包到/opt/install目录下)

2.解压

3.修改文件名

4.拷贝sqoop-1.4.7.bin__hadoop-2.6.0目录下的sqoop-1.4.7.jar包到/opt/soft/sqoop147目录下

5.拷贝sqoop-1.4.7.bin__hadoop-2.6.0/lib目录下该jar包到sqoop/lib目录下

6.复制hive的jar包到sqoop147/lib目录下

7.修改配置文件

8.配置环境变量

9.检验Sqoop是否安装成功

10.退出安全模式

三、使用案例

(一)Sqoop查看mysql数据库

(二)查看指定数据库下所有表

(三)Sqoop创建Hive表

(四)导入案例------mysql导入HDFS

1.将mysql中的表全部导入到HDFS指定目录下的文件中

2.导入HDFS时添加条件过滤

3.指定列导入HDFS

4.查询语句导入HDFS

(五)导入案例------将mysql数据库中的表导入到Hive中

1.全表导入hive的default库中

2.导入到hive的指定库中


一、Soop简介

Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql等)间进行数据的传递。可以将关系型数据库(MySQL ,Oracle,Postgres等)中的数据导入到HDFS中,也可以将HDFS的数据导进到关系型数据库中。

Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个 Apache 项目。

二、Sqoop的安装

1. 上传压缩包到/opt/install目录下

2.解压

复制代码
[root@lxm147 install]# tar -zxf sqoop-1.4.7.tar.gz -C /opt/soft/

3.修改文件名

复制代码
[root@lxm147 soft]# mv sqoop-1.4.7/ sqoop147

4.拷贝sqoop-1.4.7.bin__hadoop-2.6.0目录下的sqoop-1.4.7.jar包到/opt/soft/sqoop147目录下

5.拷贝sqoop-1.4.7.bin__hadoop-2.6.0/lib目录下该jar包到sqoop/lib目录下

6.复制hive的jar包到sqoop147/lib目录下

复制代码
[root@lxm147 lib]# cp /opt/soft/hive312/lib/hive-common-3.1.2.jar ./

[root@lxm147 lib]# cp /opt/soft/hive312/lib/mysql-connector-java-8.0.29.jar ./

7.修改配置文件

复制代码
[root@lxm147 conf]# pwd
/opt/soft/sqoop147/conf
[root@lxm147 conf]# ll
total 20
-rw-rw-r--. 1 lxm lxm 3895 Dec 19  2017 oraoop-site-template.xml
-rw-rw-r--. 1 lxm lxm 1404 Dec 19  2017 sqoop-env-template.cmd
-rwxr-xr-x. 1 lxm lxm 1345 Dec 19  2017 sqoop-env-template.sh
-rw-rw-r--. 1 lxm lxm 6044 Dec 19  2017 sqoop-site-template.xml
[root@lxm147 conf]# cp sqoop-env-template.sh sqoop-env.sh

[root@lxm147 conf]# vim sqoop-env.sh


 22 #Set path to where bin/hadoop is available
 23 export HADOOP_COMMON_HOME=/opt/soft/hadoop313
 24 
 25 #Set path to where hadoop-*-core.jar is available
 26 export HADOOP_MAPRED_HOME=/opt/soft/hadoop313
 27 
 28 #set the path to where bin/hbase is available
 29 #export HBASE_HOME=
 30 
 31 #Set the path to where bin/hive is available
 32 export HIVE_HOME=/opt/soft/hive312
 33 export HIVE_CONF_DIR=/opt/soft/hive312/conf
 34 #Set the path for where zookeper config dir is
 35 export ZOOCFGDIR=/opt/soft/zookeeper345/conf

8.配置环境变量

复制代码
# SQOOP_HOME
export SQOOP_HOME=/opt/soft/sqoop147
export PATH=$PATH:$SQOOP_HOME/bin


source /etc/profile

9.检验Sqoop是否安装成功

复制代码
sqoop version

出现版本信息即可

10.退出安全模式

复制代码
[root@lxm147 ~]# hdfs dfsadmin -safemode leave
Safe mode is OFF

三、使用案例

(一)Sqoop查看mysql数据库

复制代码
[root@lxm147 ~]# sqoop list-databases \
> --connect jdbc:mysql://192.168.180.141:3306 \
> --username root \
> --password root

(二)查看指定数据库下所有表

复制代码
sqoop list-tables \
> --connect jdbc:mysql://192.168.180.141:3306/mysql50 \
> --username root \
> --password root

(三)Sqoop创建Hive表

复制代码
[root@lxm147 ~]# sqoop create-hive-table --help

在hive中创建一个teacher表,与mysql50库中的teacher结构相同

mysql50中teacher表结构:

复制代码
sqoop create-hive-table --connect jdbc:mysql://192.168.180.141:3306/mysql50 --username root --password root --table teacher --hive-table teacher


sqoop create-hive-table --connect jdbc:mysql://192.168.180.141:3306/mysql50 --username root --password root --table teacher --hive-table teacher1 

(四)导入案例------mysql导入HDFS

1.将mysql中的表全部导入到HDFS指定目录下的文件中

复制代码
[root@lxm147 ~]# sqoop import \
> --connect jdbc:mysql://192.168.180.141:3306/mysql50 \
> --username root --password root \
> --table sc \
> --target-dir /tmp/mysql50/sc \
> --fields-terminated-by '\t' \
> -m 1

-m 2

复制代码
sqoop import --connect jdbc:mysql://192.168.180.141:3306/kb21 --username root --password root --table account --target-dir /tmp/kb21/account --fields-terminated-by '\t' -m 2

[root@lxm147 ~]# hdfs dfs -cat /tmp/kb21/account/part-m-00000
2023-03-09 11:01:04,748 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
1	张三	2500.00
[root@lxm147 ~]# hdfs dfs -cat /tmp/kb21/account/part-m-00001
2023-03-09 11:01:32,211 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
2	李四	2500.00

主键值%3=0,1,2放在不同的桶中

-m 3

2.导入HDFS时添加条件过滤

复制代码
[root@lxm147 ~]# sqoop import --connect jdbc:mysql://192.168.180.141:3306/mysql50 --username root --password root --table sc --where "sid='01'" --target-dir /tmp/mysql50/sid01 -m 1 

[root@lxm147 ~]# hdfs dfs -cat /tmp/mysql50/sid01/part-m-00000
2023-03-09 11:28:22,867 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
01,01,80.0
01,02,90.0
01,03,99.0

3.指定列导入HDFS

复制代码
[root@lxm147 ~]# sqoop import \
> --connect jdbc:mysql://192.168.180.141:3306/mysql50 \
> --username root --password root \
> --table sc --columns "cid,score" --where "sid='01'" \
> --target-dir /tmp/mysql50/sid02 \
> -m 1



[root@lxm147 ~]# hdfs dfs -cat /tmp/mysql50/sid02/part-m-00000
2023-03-09 11:32:48,382 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
01,80.0
02,90.0
03,99.0
​

4.查询语句导入HDFS

复制代码
[root@lxm147 ~]# sqoop import \
> --connect jdbc:mysql://192.168.180.141:3306/mysql50 \
> --username root \
> --password root \
> --target-dir /tmp/mysql50/squery \
> --query 'select * from sc where $CONDITIONS and CID="02" and score > 80 ' \
> --fields-terminated-by "\t" \
> -m 1


[root@lxm147 ~]# hdfs dfs -cat /tmp/mysql50/squery/part-m-00000
2023-03-09 11:58:21,914 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
01	02	90.0
05	02	87.0
07	02	89.0

(五)导入案例------将mysql数据库中的表导入到Hive中

1.全表导入hive的default库中

复制代码
[root@lxm147 ~]# sqoop import --connect jdbc:mysql://192.168.180.141:3306/mysql50 --username root --password root --table sc --hive-import -m 1

2.导入到hive的指定库中

复制代码
[root@lxm147 ~]# sqoop import --connect jdbc:mysql://192.168.180.141:3306/mysql50 --username root --password root --table sc --hive-import --hive-database kb21 -m 1

重写,元数据会被覆盖

复制代码
[root@lxm147 ~]# sqoop import --connect jdbc:mysql://192.168.180.141:3306/mysql50 --username root --password root --table sc --hive-import --hive-overwrite --hive -database kb21 -m 1

增量导入

复制代码
[root@lxm147 ~]# sqoop import --connect jdbc:mysql://192.168.180.141:3306/mysql50 --username root --password root --table sc --hive-import --incremental --hive -database kb21 -m 1

(六)Hive导入到mysql中

相关推荐
likangbinlxa4 小时前
【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用
数据库·sql
r i c k4 小时前
数据库系统学习笔记
数据库·笔记·学习
野犬寒鸦5 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL5 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·6 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德6 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫6 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i6 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.6 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn7 小时前
【Redis】渐进式遍历
数据库·redis·缓存