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

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.csdn.net/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 先到这里

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

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值