sqoop安装和使用

本文详细介绍了如何通过 Sqoop 实现 MySQL 和 Hadoop 生态系统之间的数据迁移,包括环境搭建、基本命令使用、数据导入导出操作及高级用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sqoop环境搭建:

1)下载
2)解压
3)配置文件:sqoop-env.sh
4)配置环境变量
sqoop-env.xml
配置hadoop路径,下面的那个hadoop jar的路径也是这个。
以下类似,hive路径

打开:bin目录下的sqoop,使用sqoop --help来查看使用方法(注意需要有mysql驱动,lib文件夹下面,不然正确的语法也会报错)

使用

usage: sqoop COMMAND [ARGS]
注意:sqoop的lib目录下需要有mysql驱动包
其他需要的包:hive-common-1.1.0-cdh5.7.0.jar以及以hive-shims开头的jar包(在hive的lib目录下)

查数据库:
sqoop list-databases \
--connect jdbc:mysql://localhost:3306 \
--username root \
--password root 
查表(数据库为sqoop):
sqoop list-tables \
--connect jdbc:mysql://localhost:3306/sqoop \
--username root \
--password root 
导入(把mysql中的数据导入到hdfs中):
sqoop import \
--connect jdbc:mysql://localhost:3306/sqoop \
--username root \
--password root \
--table emp
hadoop fs -ls和 -ls /的区别

-ls / 是查看的根目录/
-ls 是查看的用户目录/user/hadoop
也就是和linux 里的/和/home/hadoop的区别

sqoop部分语句使用
sqoop import \
--connect jdbc:mysql://localhost:3306/sqoop \
--username root --password root \
--table emp \
--mapreduce-job-name FromMySQL2HDFS \                  (设定作业名称)
--delete-target-dir \                                  (导入目标目录,以删除模式,也就是说已经存在目标文件夹的话,就删除掉)
--fields-terminated-by '\t' \                          (字段与字段之间的分隔符,lines-terminated-by是行)
-m 1 \                                                 (maptask的数量)
--null-non-string 0 \                                  (为空的转成0来表示,null-string的意思是把null转成空或者其他的字符串)
--columns "EMPNO,ENAME,JOB,SAL,COMM" \
--target-dir EMP_COLUMN_WHERE \                        (设定目标目录名称)
--where 'SAL>2000'                                     (where子句)

sqoop import \
--connect jdbc:mysql://localhost:3306/sqoop \
--username root --password root \
--mapreduce-job-name FromMySQL2HDFS \
--delete-target-dir \
--fields-terminated-by '\t' \
-m 1 --null-non-string 0 \
--target-dir EMP_COLUMN_QUERY \
	--query "select * from emp where empno>=7900 and \$CONDITIONS" 
	(query后面跟sql语句,但是跟--table和--columns不能同时存在。如果是双引号的话需要在后面加上\$CONDITIONS,单引号需要加$CONDITIONS)

--query 'select * from emp where empno>=7900 and $CONDITIONS'
可以把语句放到一个文件中,其内容:
import 
--connect 
jdbc:mysql://localhost:3306/sqoop 
--username 
root 
--password 
root 
--mapreduce-job-name 
FromMySQL2HDFS 
--table 
emp 
--delete-target-dir 
-m 
1 
--null-non-string 
0 
--target-dir 
EMP_OPTION

调用的语句是:
sqoop --options-file emp.opt


sqoop import \
--connect jdbc:mysql://localhost:3306/sqoop \
--username root \
--password root \
--table salgrage            (这张表没有主键,会报错,提示需要有主键,可以使用--split-by来指定,也可以加个参数'-m 1')

sqoop eval \
--connect jdbc:mysql://localhost:3306/sqoop \
--username root --password root \
--query "select * from emp"  
把查询结果输出到控制台/命令行
导出:(指定目录,hdfs导出到mysql中)
sqoop export \
--connect jdbc:mysql://localhost:3306/sqoop \
--username root \
--password root \
--table emp_demo \
--export-dir /user/hadoop/emp \
--fields-terminated-by '\t'         (注意分隔符需要与导入的分隔符相同)
某些字段的导出,需要加--columns(导出需要的文件也必须是这些字段)
mysql导入到hive(与hdfs类似,就多加几个参数)
sqoop import \
--connect jdbc:mysql://localhost:3306/sqoop \
--username root --password root \
--table emp \
--create-hive-table \                   (是否创建hive表,如果存在会报错)
--hive-database ruoze_hive \
--hive-import \
--hive-overwrite \
--hive-table emp_import \
--mapreduce-job-name FromMySQL2HDFS \
--delete-target-dir \
--fields-terminated-by '\t' \
-m 1 --null-non-string 0 

其中会报错,报HIVE_CONF_DIR找不到,(如果去hive-env.xml中配置,好像没用???),可以通过拷jar包解决(hive的lib中的jar包,hive-common-1.1.0-cdh5.7.0.jar以及以hive-shims开头的jar包,都拷到sqoop的lib目录下)。
导入Hive不建议大家使用–create-hive-table
建议事先创建好hive表,因为自动创建的表字段类型不合适。

hive导出到mysql(从hdfs中)
sqoop export --connect jdbc:mysql://localhost:3306/sqoop \
--username root \
--password root \
--table dept_demo \
--export-dir /user/hive/warehouse/ruoze_dept \
--fields-terminated-by '\t'
表需要存在,需要指定导出所需的目录(其实是导出hdfs中的文件)
job的使用

基于已经保存的jobs来进行工作

sqoop job --create ruozejob -- import --connect jdbc:mysql://localhost:3306/sqoop \
--username root \
--password root \
--table emp \
--delete-target-dir 

这是创建语句,可以通过sqoop job --list来查看所有job,使用sqoop job --show jobname,密码应该是mysql的密码。
sqoop job --exec jobname来执行job,sqoop job --delete jobname删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值