Sqoop1的导入导出
Sqoop1 和 Sqoop2 的区别
# 版本上
Sqoop1: 1.4.x
Sqoop2: 1.99.x
# 架构上
Sqoop1 使用 Sqoop客户端直接提交的方式(命令、将命令封装在脚本中)
Sqoop2 引入了 Sqoop Server,对Connector实现了集中的管理
# 访问方式
Sqoop1 通过Cli控制台方式进行访问
Sqoop2 通过 rest api、java api、web ui以及cli控制台方式进行访问
# 安全性
Sqoop1 在命令或脚本中指定用户数据库名及密码
Sqoop2 是通过Cli方式访问,在交互过程界面中,输入的密码信息会被看到,同时 Sqoop2 引入了基于角色的安全机制,Sqoop2比Sqoop多了一个Server端。
# 综述
Sqoop1 架构简单明了,部署即用,使用门槛比较低,但是耦合性强,用户密码暴露不安全。
Sqoop2 服务端部署,运行,提供 cli、rest api,webui 等入口,connector集中管理,rdbms 账户控制更安全,但是sqoop2仅负责数据的读写操作,架构相对复杂
Sqoop1 和 Sqoop2 的架构图


Sqoop1 的配置
解压安装之后,修改配置文件(conf/sqoop-env.sh)
#Set path to where bin/hadoop is available #export HADOOP_COMMON_HOME= export HADOOP_COMMON_HOME= /data/hadoop/hadoop < /span > #Set path to where hadoop-*-core.jar is available #export HADOOP_MAPRED_HOME= export HADOOP_MAPRED_HOME=$HADOOP_COMMON_HOME /share/hadoop/mapreduce/ < /span > #set the path to where bin/hbase is available #export HBASE_HOME= export HBASE_HOME= /data/hbase/hbase < /span > #Set the path to where bin/hive is available #export HIVE_HOME= export HIVE_HOME= /data/hive/apache-hive < /span > #Set the path for where zookeper config dir is #export ZOOCFGDIR= export ZOOCFGDIR= /data/zookeeper/apache-zookeeper < /span > |
Sqoop1 导入(MySQL导入到HDFS)
注意: 需要启动 MySQL、ZK、Hadoop
# demo1:table
# sqoop1 导入命令 mysql=>hdfs bin /sqoop import # mysql驱动类 --driver com.mysql.cj.jdbc.Driver< /span > # 连接字符串 --connect jdbc:mysql: // 192.168.56.1< /span > /dbName < /span >?serverTimezone=GMT%2B8< /span > # 从哪张表导数据 --table tbName< /span > # mysql账号 --username root< /span > # mysql 密码 --password 123456< /span > --verbose # 目标目录(HDFS) --target- dir = /sqoop/a_users < /span > |
# demo2:query
# 导入数据 # --query和--table是互斥的; bin /sqoop import --connect jdbc:mysql: // 192.168.56.1< /span > /dbName < /span >?serverTimezone=GMT%2B8< /span > --username root< /span > --password 123456< /span > --verbose # 获取记录条数 --fetch-size 30< /span > # SQL 语句 # $CONDITIONS sql语句执行的条件,这个条件由sqoop自己控制 --query 'select * from tbName where $CONDITIONS' # 按照 id 切分 #--split-by;拆分的这一列不能重复,一般是主键 -- split -by id < /span > # 目标目录(HDFS) --target- dir = /sqoop/a_users < /span > |
# demo3:将数据库账号、密码、SQL语句封装到一个文件中
# 新建一个文件;(一行一个,使用#注释);文件名随便写 import --connect jdbc:mysql: // 192.168.56.1< /span > /dbName < /span >?serverTimezone=GMT%2B8< /span > --username root< /span > --password 123456< /span > --verbose --fetch-size 30< /span > --query 'select * from a_users where $CONDITIONS' -- split -by id < /span > --target- dir = /sqoop/a_users < /span > |
执行封装了Sqoop命令的文件
bin /sqoop --options- file /root/fileName .txt < /span > |
# demo4:命令过长可以使用反斜杠换行
bin /sqoop import --connect jdbc:mysql: //192 .168.56.1:3306 /dbName ?serverTimezone=GMT%2B8 \< /span >< /strong > --username root --password 123456 --verbose --fetch-size 30 --query 'select * from tbName where $CONDITIONS' -- split -by id \< /span >< /strong > --target- dir = /sqoop/path |
Sqoop1 导入(MySQL导入到 Hive)
注意:启动Hive
# 配置
将 $HIVE_HOME/lib 下的 hive-common-x.x.x.jar 拷贝到 $SQOOP_HOME/lib 下
# fields-terminated-by;列的分隔符 bin /sqoop import --connect jdbc:mysql: //192 .168.56.1 /userscenter ?serverTimezone=GMT%2B8 \ --username root --password 123456 --verbose --fetch-size 30 --query 'select * from a_demo_dynasty where $CONDITIONS' -- split -by id \ --target- dir = /sqoop/a_dynasty \ --fields-terminated-by ',' \ --hive- import \ --hive-table mydata.a_dynasty --hive-overwrite |
Sqoop1 全表导入到HDFS
bin /sqoop import -all-tables --connect jdbc:mysql: //192 .168.56.1:3306 /dbName ?serverTimezone=GMT%2B8 \ --username root --password 123456 --verbose --fetch-size 30 \ --warehouse- dir = /sqoop/a_dynasty |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南