目录
一、Soop简介
二、Sqoop的安装
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.sh22 #Set path to where bin/hadoop is available23 export HADOOP_COMMON_HOME=/opt/soft/hadoop31324 25 #Set path to where hadoop-*-core.jar is available26 export HADOOP_MAPRED_HOME=/opt/soft/hadoop31327 28 #set the path to where bin/hbase is available29 #export HBASE_HOME=30 31 #Set the path to where bin/hive is available32 export HIVE_HOME=/opt/soft/hive31233 export HIVE_CONF_DIR=/opt/soft/hive312/conf34 #Set the path for where zookeper config dir is35 export ZOOCFGDIR=/opt/soft/zookeeper345/conf
8.配置环境变量
# SQOOP_HOME
export SQOOP_HOME=/opt/soft/sqoop147
export PATH=$PATH:$SQOOP_HOME/binsource /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 teachersqoop 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中