025 Sqoop的概念及安装 Sqoop的语句 (mysql连接问题 已解决) Sqoop使用query导入和export导出

本文详细介绍了如何使用Sqoop进行Hadoop与关系型数据库之间的数据迁移,包括安装配置、环境变量修改、基本命令使用,以及通过各种参数实现数据导入导出的高级操作。

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

Sqoop的概念及安装

hadoop生态圈中的一个迁移工具一个整合工具(hadoop和关系型数据库之间的数据迁移)

在这里插入图片描述
在这里插入图片描述
tar -zxvf /home/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /usr/local/
在这里插入图片描述
ok
修改环境变量
先改个名
在这里插入图片描述

vi /etc/profile
在这里插入图片描述
然后更新一下
在这里插入图片描述

看看sqoop里面的东西
在这里插入图片描述
将学习文档删掉吧
在这里插入图片描述

看看conf下的配置文件
在这里插入图片描述
先将绿色的名字 改个名
mv ./conf/sqoop-env-template.sh ./conf/sqoop-env.sh

在这里插入图片描述
在这里插入图片描述
编辑该文件
hadoop目录写上
hbase没学 先不写
hive写上
Zookeeper因为我们使用的ha高可用 也写上 没使用ha就不用
在这里插入图片描述
将jar包放到 lib下
cp /home/mysql-connector-java-5.1.6-bin.jar ./lib/

在这里插入图片描述

这样sqoop help 出现截图的下面的内容 就行
在这里插入图片描述
在这里插入图片描述


Sqoop的语句

1.创建一个数据库
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
1.sqoop list-databases --connect jdbc:mysql://hadoop01:3306;
第一次试探性连接 失败 原来是 jar包忘记加了 我明明记得加了 唉气
再加一遍
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样表明连接成功 不过没输入用户名和密码 所以读不出来所有数据库.

sqoop语句里 \ 反斜杠代表我的sqoop语句没写完下一行还有

2.加上用户密码再去连接 结果出错

sqoop list-databases --connect  jdbc:mysql://hadoop01:3306 \
--username root --password root \
;

在这里插入图片描述
解决办法
在这里插入图片描述
在这里插入图片描述


这样去连接 没问题了 数据出来了
在这里插入图片描述


  • -connect连接指定数据库
  • –driver 连接数据库驱动
  • -table 指定要读的表
  • -m 用n个map tasks 去并行导入 说白了就是指定map个数
  • –lines-terminated-by 字段用什么分隔
  • –fields-terminated-by 行用什么分隔
  • –null-string ‘\N’ --null-non-string ‘\N’
  • 这个表示空字符串怎么处理 如果不加 空字符串会用小写null表示(null 表示空 NUll表示非正常的值)
  • –target-dir HDFS destination dir hdfs的目标目录

1.import导入hdfs

sqoop import -connect jdbc:mysql://hadoop01:3306/ymp --driver com.mysql.jdbc.Driver \
-username root -password root \
-table hfile -m 1 --fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--target-dir /sqo/01;

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
读出来的汉字是乱码
因为我建数据库时编码规则使用latin1
所以在存入mysql表时 汉字就没存进去 现在我改一下fname fpath的字段的编码规则
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样我的汉字存入表中 再读一下试试
在这里插入图片描述

sqoop语句中
-m是为了将结果放到一个文件

不指定会生成多个文件 三条记录 生成 三个文件 太麻烦
这是视频截图 我就不演示了 不加-m会将三条记录分到三个文件
在这里插入图片描述

2.import指定列导入hdfs 使用–columns

–columns ‘fid,fname,fpath,owner’

sqoop import -connect jdbc:mysql://hadoop01:3306/ymp --driver com.mysql.jdbc.Driver \
-username root -password root \
-table hfile -m 1 \
--columns 'fid,fname,fpath,owner' \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--target-dir /sqo/03;

结果 缺失只有四列
在这里插入图片描述
3.import导入hive表

–create-hive-table --hive-import --hive-overwrite
–hive-table olqf.sql --delete-target-dir
在这里插入图片描述
提前开启hive服务

hive --service metastore
在这里插入图片描述

sqoop import -connect jdbc:mysql://hadoop01:3306/ymp --driver com.mysql.jdbc.Driver \
-username root -password root \
-table hfile -m 1 \
--columns 'fid,fname,fpath,owner' \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--create-hive-table --hive-import --hive-overwrite \
--hive-table olqf.sql --delete-target-dir \
;

在这里插入图片描述
注意挺长时间
第一次运行出错
在这里插入图片描述
在这里插入图片描述
https://blog.youkuaiyun.com/LewyPhoenix/article/details/83115893
https://www.cnblogs.com/zll20153246/p/9345921.html
配置
在这里插入图片描述
然后更新一下文件
在这里插入图片描述
然后进入到hadoop的sbin目录下 运行命令 mr-jobhistory-daemon.sh start historyserver
在这里插入图片描述
第二次运行 成功
在这里插入图片描述
找到olqf下的sql 不有错
然后select 结果如下 ok
在这里插入图片描述

4.import指定where来导入

sqoop import -connect jdbc:mysql://hadoop01:3306/ymp --driver com.mysql.jdbc.Driver \
-username root -password root \
-table hfile -m 1 \
--columns 'fid,fname,fpath,owner' \
--where 'fid > 8' \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--target-dir /sqo/04 --delete-target-dir \
;

运行
在这里插入图片描述
结果没错
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Sqoop使用query导入和export导出

5.import指定query来导入:

sqoop import -connect jdbc:mysql://hadoop01:3306/ymp --driver com.mysql.jdbc.Driver \
-username root -password root -m 1 \
--query 'select fid,fname,fpath from hfile where fid > 8 and $CONDITIONS' \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--target-dir /sqo/02 --delete-target-dir;

运行时出现这样的错误 以为是密码问题 结果上网一查 写错了 间隔
在这里插入图片描述
在这里插入图片描述
接着运行
在这里插入图片描述
ok 看结果
在这里插入图片描述
没有错

在这里插入图片描述
query替代了–table -columns -where
query 不能与这些同用

在这里插入图片描述
如果单写–where 或者 --columns 不会报错 但是不会用到这两个 只会使用query
注意
在这里插入图片描述
注意
query后跟的语句最好用单引号 双引号再使用变量可能出错 具体可看官网

6.import指定split-by来导入:

sqoop import -connect jdbc:mysql://hadoop01:3306/ymp --driver com.mysql.jdbc.Driver \
-username root -password root \
-m 2 -table hfile --split-by fid \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--target-dir /sqo/05 --delete-target-dir;

split-by和-m搭配使用 -m后面的n 将结果根据fid平分为n个结果文件
在这里插入图片描述
这里分成了三个 具体我也没搞明白
请大神赐教!

可能是我没有设置什么东西?

先创建一个表接收数据
在这里插入图片描述
然后导出

sqoop export -connect jdbc:mysql://hadoop01:3306/ymp --driver com.mysql.jdbc.Driver \
-username root -password root -table hfile2 -m 1 \
--export-dir '/spo/02' \
--input-fields-terminated-by '\t' --input-lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
;

–updata-mode 更新模式 有两种 只允许更新updataonly和允许插入allowinsert
–updata-key fid 将fid作为主键

第一次运行出错了 让我看日志 没看 检查了下数据 02 就3列 弄错了 换了个03 4列数据 没错了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ok 中文乱码因为我没设置字段的编码格式 不管了
在这里插入图片描述
ok 先到这里

在这里插入图片描述
在这里插入图片描述

期待我的暑假开始大数据之旅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值