Sqoop

Sqoop

Hadoop关系数据库服务器之间传送数据的一种工具

1
2
3
4
# 下载,解压,改名,配置环境变量,修改配置参数,添加所需jar包
wget http://archive.apache.org/dist/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop-1.4.7

环境配置文件:conf/sqoop-env.sh

一、表全量数据导入

1.1 关系性数据库全量数据导入HDFS

1
2
3
4
5
6
7
8
9
sqoop import \  
--connect jdbc:mysql://ip:3306/database_name \ # 指定JDBC连接字符串,包括数据库服务器的地址、端口和数据库名
--username root \ # 数据库的用户名
--password 123456 \ # 数据库的密码
--target-dir /path \ # 指定HDFS上的目标目录,Sqoop会将导入的数据存储在这里
--table table_name \ # 指定要导入的数据库表名
--fields-terminated-by '\t' \ # 指定输出文件中字段的分隔符为制表符
--split-by column_name \ # 指定用于生成MapReduce作业的输入拆分的列。
--m 2 # 指定MapReduce作业的map任务数量。

map任务数量不为1时,默认按主键拆分,没有主键时报错,需指定拆分键--split-by

1
ERROR tool.ImportTool: Import failed: No primary key could be found for table movie_list. Please specify one with --split-by or perform a sequential import with '-m 1'.

指定文本格式为拆分键需改配置参数

1
-Dorg.apache.sqoop.splitter.allow_text_splitter=true
1
2
3
4
5
6
7
8
9
10
sqoop import \
-Dorg.apache.sqoop.splitter.allow_text_splitter=true \
--connect jdbc:mysql://ip:3306/database_name \
--username root \
--password 123456 \
--target-dir /path \
--table table_name \
--fields-terminated-by '\t' \
--split-by column_name \
--m 2

1.2 关系性数据库全量数据导入Hive

将关系型数据库表结构复制到hive中

1
2
3
4
5
6
sqoop create-hive-table \
--connect jdbc:mysql://single01:3306/ebs \
--username root \
--password L3154638821 \
--table movie_list \
--hive-table test.movie

二、表子集数据导入

1
# 
1
# 增量数据导入
1
# 默认模式到导出
1
# 更新模式导出
1
# job 作业

DataX

kettle

Maxwell


Sqoop
https://leaf-domain.gitee.io/2025/03/22/bigdata/others/sqoop/
作者
叶域
发布于
2025年3月22日
许可协议