Sqoop学习详细介绍!!

一、Sqoop介绍

Sqoop是一款开源的工具,主要用于在Hadoop(HDFS/Hive/HBase)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。

二、安装

1).解压
tar -zxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/installs
2).重命名
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop1.4.6
3).修改配置文件
cd /opt/installs/sqoop1.4.6/conf
mv sqoop-env-template.sh sqoop-env.sh
vi sqoop-env.sh
#增加配置,注意修改路径
export HADOOP_COMMON_HOME=/opt/installs/hadoop3.1.4
export HADOOP_MAPRED_HOME=/opt/installs/hadoop3.1.4
export ZOOCFGDIR=/opt/installs/zookeeper3.4.6
export HIVE_HOME=/opt/installs/hive3.1.24).将mysql的驱动jar复制到sqoop的lib目录下 (底层需要用JDBC操作MySQL数据库)
cp /opt/installs/hive3.1.2/lib/mysql-connector-java-8.0.26.jar /opt/installs/sqoop1.4.6/lib/5).配置sqoop环境变量
export PATH=$PATH:/opt/installs/sqoop1.4.6/bin

三、sqoop-import

在Sqoop中,“导入”概念指:从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE,HBASE)中传输数据,叫做:导入,即使用import关键字。

-- 测试数据库的表是否可以连接,显示库中的所有表
sqoop list-tables --connect jdbc:mysql://hadoop10:3306/test1 --username root --password 123456

1). RDBMS(mysql) -> HDFS

sqoop import \
--driver com.mysql.jdbc.Driver \
--connect jdbc:mysql://hadoop10:3306/test1?characterEncoding=UTF-8 \
--username root \
--password 123456 \
--table t_sex \
--num-mappers 4 \
--fields-terminated-by '\t' \
--target-dir /mysql/t_user \
--delete-target-dir

参数                                  作业
--driver                        mysql驱动
--connect                    数据库连接url  jdbc:mysql://ip:3306/数据库
--username                 连接mysql数据库用户名
--password                 连接mysql数据库密码
--table                         mysql中test1数据库中表名
--num-mappers           sqoop底层是mapreduce, 指定启动的maptask个数,海量数据可以并                                    行抽取
                                  解释:sqoop抽取任务会转换成mr作业,该mr作业由于不需要对数据进行聚合,所有只需要保留maptask阶段,没有reduceTasksqoop,需要依赖hadoop的HDFS和Yarn
--fields-terminated-by    数据写入HDFS存储到文件中,列与列之间的分隔符
--target-dir                     存储到HDFS的目标路径,配置的是目录,并且该目录应该不存在
--delete-target-dir          如果存在,则提前删除 

 mysql中的表:

运行1:

 查看:

yarn:

hdfs:


运行2: 

sqoop import \
--driver com.mysql.cj.jdbc.Driver \
--connect jdbc:mysql://hadoop10:3306/test1?characterEncoding=UTF-8 \
--username root \
--password 123456 \
--table t_sex \
--columns "id,name" \
--where "id > 2" \
--target-dir /mysql/t_user \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by ','

参数
--columns     指定列名
--where       指定查询条件

查看hdfs:


运行3:

 

sqoop import \
--driver com.mysql.cj.jdbc.Driver \
--connect jdbc:mysql://hadoop10:3306/test1?characterEncoding=UTF-8 \
--username root \
--password 123456 \
--num-mappers 2 \
--split-by id \
--fields-terminated-by '\t' \
--query 'select id, name,sex from t_sex where $CONDITIONS and id > 2' \
--target-dir /mysql/t_user \
--delete-target-dir

参数             作用
--split-by      根据指定字段进行拆分,相当于datax的splitPK。根据这一列的值把数据分成几部分
--num-mappers   指定并行度,简写-m 
--query         查询语句。$CONDITIONS相当于占位符,写where条件必须有写这个

查看hdfs:

 

 2). RDBMS -> Hive

运行:

sqoop import \
--driver com.mysql.cj.jdbc.Driver \
--connect jdbc:mysql://hadoop10:3306/test1?characterEncoding=UTF-8 \
--username root \
--password 123456 \
--table t_sex \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "," \
--hive-overwrite \
--hive-database test_hive \
--hive-table hive_user

 --hive-import              代表将数据导入hive
--fields-terminated-by   导入hive后,存储在HDFS上文件的分隔符
--hive-database          hive的数据库
--hive-table             上边指定库下的表,可以不存在,会自动创建
--hive-overwrite         将表中数据覆盖

查看hive:

 四、sqoop-export

在Sqoop中,“导出”概念指:从大数据集群(HDFS,HIVE,HBASE)向非大数据集群(RDBMS关系型数据库)中传输数据,叫做:导出,即使用export关键字。

1). HDFS|hive -> RDBMS

① 准备数据,上传hdfs的sqoop目录下

vi a.txt 
# 在文件中添加如下内容
1 zhangsan true 20 2020-01-11
2 lisi false 25 2020-01-10
3 wangwu true 36 2020-01-17
4 zhaoliu false 50 1990-02-08
5 win7 true 20 1991-02-08#在hdfs上创建sqoop目录(目录名称随意,不过需要和后边对应),将文件上传到sqoop目录下
hdfs dfs -mkdir /sqoop
hdfs dfs -put a.txt /sqoop

② 在mysql中创建表

注意:导出并不会自动创建对应的表,需要提前自己创建
create table t_user2(id int primary key auto_increment,name VARCHAR(32),sex boolean,age int,birthDay date
) CHARACTER SET=utf8;

 ③ 将hdfs上的数据导入mysql表中

sqoop export \
--connect jdbc:mysql://hadoop10:3306/test1?characterEncoding=UTF-8 \
--username root \
--password 123456 \
--export-dir /sqoop \
--input-fields-terminated-by ' ' \
--columns "id,name,sex,age,birthDay" \
--table t_user2 \
--update-key id \
--update-mode allowinsert

--export-dir   指定导出数据的目录
--table        mysql中的表名
--columns      字段名
--update-mode  如果是allowinsert,则允许不但能够导入新数据的时候,还可以更新之前的数据
               如果是updateonly,则只会更新以前的数据,不添加新数据
--update-key   如果指定列的值已经存在,则会触发修改操作,否则添加,一般指定主键列

查看mysql:

 五、sqoop应用问题汇总

1.sqoop在导入或者导出的时候,空值问题处理。

注意:不用直接通过工具界面修改表中的数据,制造空数据,需要重新添加一条
Hive 中的 Null 在底层是以“\N”来存储,而 MySQL 中的 Null 在底层就是 Null,为了保证数据两端的一致性。导入数据时采用--null-string 和--null-non-string。
导出数据时采用--input-null-string 和--input-null-non-string 两个参数。--null-string含义是 string类型的字段,当Value是NULL,替换成指定的字符
--null-string  '\\N'  替换为  \N

导入(mysql-->hive):

sqoop import \
--driver com.mysql.cj.jdbc.Driver \
--connect jdbc:mysql://hadoop10:3306/test1?characterEncoding=UTF-8 \
--username root \
--password 123456 \
--table t_user \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "," \
--hive-overwrite \
--hive-database test_hive \
--hive-table hive_user    \
--null-non-string   '\\N' \
--null-string  '\\N'

mysql表中有空数据: 

 查看hive表:

 

 

 导出(hive-->mysql):

sqoop export \
--connect jdbc:mysql://hadoop10:3306/test1?characterEncoding=UTF-8 \
--username root \
--password 123456 \
--export-dir /user/hive/warehouse/test_hive.db/dept \
--input-fields-terminated-by '\t' \
--columns "deptno,dname,loc" \
--table dept \
--update-key deptno \
--update-mode allowinsert \
--input-null-non-string   '\\N' \
--input-null-string   '\\N'

在hive表中插入空值数据:

 在mysql查看表:

2.将mysql数据导入到hive分区表中

sqoop import \
--driver com.mysql.cj.jdbc.Driver \
--connect jdbc:mysql://hadoop10:3306/test1?characterEncoding=UTF-8 \
--username root \
--password 123456 \
--table t_person2 \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "," \
--hive-overwrite \
--hive-database test_hive \
--hive-table t_person2    \
--null-non-string   '\\N' \
--null-string  '\\N' \
--hive-partition-key dt \
--hive-partition-value 20231220

 查看mysql表:

查看hive表:

 3.将hive分区表导出到mysql

在mysql建表:

 

sqoop export \
--connect jdbc:mysql://hadoop10:3306/test1?characterEncoding=UTF-8 \
--username root \
--password 123456 \
--export-dir /user/hive/warehouse/test_hive.db/t_person2/dt=20231220 \
--input-fields-terminated-by ',' \
--table t_person2 \
--update-key dt \
--update-mode allowinsert \
--input-null-non-string   '\\N' \
--input-null-string   '\\N'

查看表:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟声卡实现音频回环

虚拟声卡实现音频回环 一、电脑扬声器播放声音路由到麦克风1. Voicemeeters安装设置2. 音频设备选择 二、回声模拟 一、电脑扬声器播放声音路由到麦克风 1. Voicemeeters安装设置 2. 音频设备选择 以腾讯会议为例 二、回声模拟 选中物理输入设备“Stereo Input 1”和物理输出设…

GlusterFS企业分布式存储

GlusterFS 分布式文件系统代表-nfs常见分布式存储Gluster存储基础梳理GlusterFS 适合大文件还是小文件存储? 应用场景术语Trusted Storage PoolBrickVolumes Glusterfs整体工作流程-数据访问流程GlusterFS客户端访问流程 GlusterFS常用命令部署 GlusterFS 群集准备环…

修改版的VectorDBBench更好用

原版本VectorDBBench的几个问题 在这里就不介绍VectorDBBench是干什么的了,上官网即可。 1.并发数设置的太少 2.测试时长30秒太长 3.连接milvus无用户和密码框,这个是最大的问题 4.修改了一下其它参数 由于很多网友发私信问一些milvus的相关技术问…

【机器学习】支持向量机(个人笔记)

文章目录 SVM 分类器的误差函数分类误差函数距离误差函数C 参数 非线性边界的 SVM 分类器(内核方法)多项式内核径向基函数(RBF)内核 源代码文件请点击此处! SVM 分类器的误差函数 SVM 使用两条平行线,使用…

基于flask的网站如何使用https加密通信

文章目录 内容简介网站目录示例生成SSL证书单独使用Flask使用WSGI服务器Nginx反向代理参考资料 内容简介 HTTPS 是一种至关重要的网络安全协议,它通过在 HTTP 协议之上添加 SSL/TLS 层来确保数据传输的安全性和完整性。这有助于防止数据在客户端和服务器之间传输时…

高考志愿专业选择:计算机人才需求激增,人工智能领域成热门

随着2024年高考的落幕,数百万高三学生站在了人生新的十字路口,面临着一个重要的抉择:选择大学专业。这一选择不仅关乎未来四年的学习生涯,更可能决定一个人一生的职业方向和人生轨迹。在众多专业中,计算机相关专业因其…

如何用Xinstall CPS结算系统打破传统营销桎梏,实现用户增长?

在互联网流量红利逐渐衰退的今天,App推广和运营面临着前所未有的挑战。如何快速搭建起满足用户需求的运营体系,成为了众多企业急待解决的问题。而在这个关键时刻,Xinstall CPS结算系统应运而生,以其独特的优势帮助企业解决了一系列…

深度学习500问——Chapter11:迁移学习(2)

文章目录 11.2 迁移学习的基本思路有哪些 11.2.1 基于样本迁移 11.2.2 基于特征迁移 11.2.3 基于模型迁移 11.2.4 基于关系迁移 11.2 迁移学习的基本思路有哪些 迁移学习的基本方法可以分为四种。这四种基本方法分别是:基于样本的迁移,基于模型的迁移&a…

Sa-Token鉴权与网关服务实现

纠错: 在上一部分里我完成了微服务框架的初步实现,但是先说一下之前有一个错误,就是依赖部分 上次的学习中我在总的父模块下引入了spring-boot-dependencies(版本控制)我以为在子模块下就不需要再引用了,…

Opencv图像梯度计算

Opencv图像梯度计算 Sobel算子 可以理解为是做边缘检测的一种方法。 首先说明自己对图像梯度的简单理解:简单理解就是图像的颜色发生变化的边界区域在X方向和Y方向上的梯度值 Gx Gy 而Gx和Gy处的梯度的计算—使用下面的公式来进行计算。 G x [ − 1 0 1 − 2 0 …

【计算机毕业设计】258基于微信小程序的课堂点名系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

总结【GetHub的WebAPI,ASSET_ID】,【Linux的jq命令】(草稿版+实际操作)

目录 1.介绍一下github中的 asset_id 2. GitHub 的 asset_id相关操作 2.1.获取特定 repository 的 release 列表: 2.2.获取特定 release 中的 asset 列表,并找到 asset_id: 2.3.使用ASSET_ID获取资材 3.返回的 assets 的信息 是什么样样…

【STM32CubeIDE -使用-调试过程中-遇到的“弹窗”报错问题-部分总结-处理方式】

【STM32CubeIDE -使用-调试过程中-遇到的“弹窗”报错问题-部分总结-处理方式】 1、前言2、软件环境问题1:Confirm Perspective Switch(确认视角切换)(1)问题描述:This kind of launch is configured to open the Debu…

14、modbus poll 使用教程小记1

开发平台:Win10 64位 Modbus Slave版本:64位 7.0.0 Modbus Poll版本:64位 7.2.2 因为项目中经常会用到modbus协议,所以就避免不了的要使用modbus测试工具,Modbus Slave/Poll无疑是众多测试工具中应用最广泛的。 文章目…

C语言的数据结构:串、数组、广义表

一、串 1、串的定义 串是一个线性表,但其节点中的内容只能为字符,所以也称为字符串。 字符串中可以有多个字符,也可以没有字符。没有字符的叫作:空串。 空串:""。 有值的串:"1123"。 只…

yolov3 详解

文章目录 1、yolov3原理2、损失函数3、yolov3改进4、使用opencv实现yolov35、卷积神经网络工作原理 1、yolov3原理 参考视频 darknet53:52个卷积层和1个全联接层 输入图像为416416 1313 -》 下采样32倍 2626 -》 下采样16倍 5252 -》 下采样8倍 由标注框中心点落在…

13600KF+3060Ti,虚拟机安装macOS 14,2024年6月

距离上次装macOS虚拟机已经有一段时间了,macOS系统现在大版本升级的速度也是越来越快了,由于Office只支持最新三个版本的macOS,所以现在保底也得安装macOS 12了,我这次是用macOS 14做实验,13和12的安装方式和macOS 14一…

eNSP学习——PPP的认证

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建OSPF网络 3、配置PPP的PAP认证 4、配置PPP的CHAP认证 主要命令 //设置本端的PPP协议对对端设备的认证方式为 PAP,认证采用的域名为huawei [R3]int s4/0/0 [R…

Android 14 系统启动流程 之 启动init进程、启动Zygote进程

Android 14 系统启动流程 之 启动init进程、启动Zygote进程 废话不多说,先上图,不清楚的可以在评论区留言。

【论文阅读】-- 时态合并树状图:时态标量数据的基于拓扑的静态可视化

时态合并树状图:时态标量数据的基于拓扑的静态可视化 摘要1 引言2 相关工作及背景介绍2.1 增广合并树2.2 (增强)合并树的可视化与跟踪2.3 特征跟踪2.4 数据线性化 3 时间合并树状图3.1 映射单个时间步长: R d → R R^d \rightarrow R Rd→R3.2 映射所有时…