sqoop 是基于 hdfs 的一款 ETL 工具,主要作用是进行 hive(hdfs) 和关系型数据库之间的数据传输。 jdk 、 hadoop 和 hive 在之前的文章 Hadoop安装指南 、 Hive安装指南 详细介绍过安装方法。sqoop 分 sqoop1 和 sqoop2 两个版本并行发展,因为 sqoop2 目前还有许多问题,所以选择 sqoop1 来安装,现在介绍安装 sqoop1 ,同样采用本地模式安装以用来学习。
安装环境
ubuntu-18.04
jdk-1.8.0_261
hadoop-2.10.0
hive-2.3.7
sqoop-1.4.7
安装 sqoop
在 Sqoop 官网 下载所需要版本的 sqoop 安装包,解压到 /usr/local
文件夹中。需要样在 ~/.bashrc
中设置环境变量。
1
2
3
# set sqoop home.
export SQOOP_HOME=/usr/local/sqoop
export PATH=$SQOOP_HOME/bin:$PATH
修改 sqoop 配置文件
sqoop-env.sh
1
2
3
4
5
export HADOOP_COMMON_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=/usr/local/hadoop
export HBASE_HOME=/usr/local/hbase-2.3.0
export HIVE_HOME=/usr/local/apache-hive-3.1.2-bin
export ZOOCFGDIR=/usr/local/apache-zookeeper-3.6.1-bin/conf
添加 mysql 驱动
下载 mysql 对应的驱动包,放到 $SQOOP_HOME/lib
目录中。
驱动下载:
https://dev.mysql.com/downloads/connector/j/
常用操作
查看数据库
1
2
3
4
sqoop list-databases \
--connect 'jdbc:mysql://localhost:3306/hive2?serverTimezone=Asia/Shanghai' \
--username 'hive' \
--password 'hive'
执行 SQL
1
2
3
4
5
sqoop-eval \
--connect 'jdbc:mysql://localhost:3306/hive2?serverTimezone=Asia/Shanghai' \
--username 'hive' \
--password 'hive' \
--query "SHOW TABLES"
导入数据
首先要在 hive 中创建一个和 mysql 中表结构相同的表。
1
2
3
4
5
6
7
8
9
10
11
DROP TABLE IF EXISTS dbs;
CREATE TABLE `dbs`(
`db_id` bigint,
`desc` string,
`db_location_uri` string,
`name` string,
`owner_name` string,
`owner_type` string,
`ctlg_name` string
)
;
1
2
3
4
5
6
7
8
9
10
11
12
13
sqoop import \
--delete-target-dir \
--connect 'jdbc:mysql://localhost:3306/hive?serverTimezone=Asia/Shanghai' \
--username 'hive' \
--password 'hive' \
--query "SELECT db_id, \`desc\`, db_location_uri, name, owner_name, owner_type, ctlg_name FROM dbs WHERE \$CONDITIONS" \
--split-by db_id \
--boundary-query "SELECT MIN(db_id), MAX(db_id) FROM dbs" \
--fields-terminated-by '\001' \
--lines-terminated-by '\n' \
--null-string '\\N' \
--null-non-string '\\N' \
--target-dir 'hdfs://localhost:9000/user/hive/warehouse/dbs/'
导出数据
1
2
3
4
5
6
7
8
9
10
11
sqoop export \
--connect 'jdbc:mysql://localhost:3306/hive?serverTimezone=Asia/Shanghai' \
--username 'hive' \
--password 'hive' \
--table dbs1 \
--columns 'db_id, desc, db_location_uri, name, owner_name, owner_type, ctlg_name' \
--export-dir 'hdfs://localhost:9000/user/hive/warehouse/dbs' \
--input-fields-terminated-by '\001' \
--input-lines-terminated-by '\n' \
--input-null-string "\\\\N" \
--input-null-non-string "\\\\N"