ETL的使用(sqoop):数据导入,导出

ETL

ETL: 是数据抽取(Extract)、数据转换(Transform)和数据加载(Load)的整个过程

常用的ETL工具 

sqoop

1.Apache Sqoop 是 Apache 软件基金会旗下的一个开源项目,旨在帮助用户高效地在 Hadoop 生态系统和关系型数据库之间传输大量数据

2.可以将数据在关系型数据库(如MySQL、Oracle、PostgreSQL等)和 Hadoop生态系统(如HDFS、Hive、HBase等)中进行迁移

sqoop官网Sqoop -

更多内容,阅读文档Sqoop 文档 (v1.4.7)

Kettle

也被称为Pentaho Data Integration (PDI),是一个开源的数据处理工具,用于数据集成和数据转换。它由Pentaho公司开发,是Pentaho开源商业智能套件的一部分。Kettle提供了一个图形用户界面(GUI),允许用户通过拖放组件和定义数据流来设计数据处理任务,而无需编写代码

工作中, sqoop更常用, 因为更高效

sqoop的命令

在终端命令窗口输入

 sqoop version   

会显示当前安装的 Sqoop 版本信息

Sqoop 的版本是 1.4.7-cdh6.2.1

sqoop help

查看特定命令的帮助,示例

sqoop help import

Common arguments: 常见参数

导入数据:全量导入

全量数据(Full Data) : 就是全部数据,所有数据。如对于表来说,就是表中的所有数据。

增量数据(Incremental data): 就是上次操作之后至今产生的新数据。

数据子集:  也叫做部分数据。整体当中的一部分。

导入和导出: sqoop安装在hadoop, 数据从关系型数据库到HDFS 叫导入数据,反之叫导出

HDFS:  Hadoop的分布式文件系统

 

数据流向: 上流系统>>ETL>>下流系统   即      业务数据>>ETL>>数仓   

 示例: TiDB数据库的数据>>ETL工具: sqoop>>HDFS

准备数据源: 导入数据到数据库(mysql)示例

 

全量导入TiDB的数据到HDFS的命令

命令解释:

  1. sqoop import: 这是Sqoop命令,用于从关系型数据库(如MySQL)导入数据到HDFS。

  2. --connect jdbc:mysql://192.168.105.200:4000/userdb: 指定要连接的TiDB数据库的JDBC URL。这里,数据库服务器IP是192.168.105.200,端口是4000,数据库名称是userdb。

  3. --username root: 指定连接TiDB数据库的用户名,这里是root。

  4. --password 123456: 指定连接TiDB数据库的密码,这里是123456。

  5. --table emp: 指定要从TiDB数据库中导入的表,这里是emp表。

  6. --target-dir /user/sqoop_data/sjh/result1: 指定HDFS上的目标目录,导入的数据将存储在这个目录中。

  7. -m 1: 指定使用1个map任务来执行导入操作。这个参数控制并行度,1表示不使用并行处理。如果不指定 -m 1,Sqoop会根据默认行为来决定使用多少个map任务。Sqoop默认会根据表的主键或指定的分割列(split-by column)自动选择并行度。如果没有指定 -m 参数,Sqoop通常会使用4个map任务(这是Sqoop的默认并行度)。如果表没有主键,且没有指定 --split-by 参数来选择一个列用于分割数据,Sqoop将无法自动并行化导入操作,这时会回退到使用单个map任务(相当于 -m 1)。

  8. 空格加斜杠是换行,注意斜杠后别空格;  没有斜杠时回车表示执行命令,有斜杠表示未完待续

可以代替-m 1的方式

 

使用 --split-by 强制单任务

如果表中有主键或唯一键,Sqoop 会根据该键自动拆分任务。如果没有主键,Sqoop 会提示你指定 --split-by 列。如果你不希望拆分任务,可以指定一个常量列(如 --split-by 一个固定值),但这通常不推荐,因为可能会导致数据倾斜。

mysql和TiDB

mysql的默认端口号是3306,如果想从mysql中通过sqoop导入数据到HDFS,修改上方命令的端口号即可;

TiDB是一个分布式SQL数据库,它与MySQL兼容,并且设计上支持MySQL协议。这意味着许多为MySQL设计的工具和客户端(如Sqoop)也可以与TiDB一起使用。

  1. 兼容性:TiDB与MySQL高度兼容,因此使用MySQL的工具(如Sqoop)可以直接与TiDB交互。

  2. 特定环境配置:在某些环境中,可能已经配置了TiDB来替代MySQL,或者TiDB被用作MySQL的替代品。

示例

"Running job" 这一行表示Sqoop已经成功提交了一个MapReduce作业到Hadoop集群,并且该作业正在执行中。

这代表着数据的导入已经完成

检验:通过Hue, 通过命令窗口查看,不能通过hive查看

Hue

数据被导入HDFS后会生成2个文件,第一个文件的内容是动态生成的日志信息,具体包括作业的执行状态、数据传输量、耗时等;第二个文件内容是导入的数据

通过命令端口查看

导入时指定分隔符

把TiDB的数据导入hive

示例

注意:数据导入hive的底层逻辑是>>数据会先被导入到HDFS再到hive

所以,如果前面有把数据导入到HDFS, 需要先把该文件删掉

验证: 通过Hue查看/hive查看/通过命令窗口查看

导入数据在Hue的位置

非textfile格式的文件/HCataLog API

HCataLog API 提供了一种编程方式来访问 Hive 的元数据存储(即 Hive Metastore),允许开发者执行诸如创建、修改、删除数据库和表等操作。

sqoop 原生参数支持的存储格式只有 textfile ,如果遇到其他格式 可以借助 HCataLog API

非textfile格式的文件 全量导入TiDB的数据到HDFS的命令,不指定分隔符

 

 

  • --hcatalog-database sjh:指定 HCatalog 数据库名称,这里是 sjh。HCatalog 是 Hadoop 的表存储管理层,允许使用 Hive 表。

  • --hcatalog-table emp4:指定 HCatalog 中的目标表名,这里是 emp4。数据将被导入到这个 Hive 表中。

非textfile格式的文件 全量导入TiDB的数据到HDFS的命令,指定分隔符 

 

  • --fields-terminated-by '\t':指定导入数据时字段之间的分隔符,这里是制表符 (\t)。这个选项通常用于文本文件格式。

增量导入数据

方法一:  where 条件

 

--hive-table sjh.emp_add: 其中sjh是数据库名, emp_add是表名

方法二: sqoop自带的参数

设计思路: 对某一个列的值进行判断,只要大于上一次的值就会导入

参数格式

--check-column 列

--last-value 值

--incremental 导入模式(导入模式有: append 或 lastmodified)

append模式

1.先全量导入

-P:这个选项提示用户在执行命令时输入密码. 相当于命令中写 --password 123456

这2种方式的区别

2.业务数据库增加数据

 

3.使用append完成增量导入

使用 Apache Sqoop 工具从 MySQL 数据库中导入数据到 HDFS

解释: 

  1. --check-column id:指定用于增量导入的检查列。增量导入是指只导入自上次导入以来有变化的数据。这里使用 id 列来检查数据的变化。

  2. --last-value 1205:指定增量导入的起始值。这里表示从 id 为 1205 的记录开始导入数据。

  3. --incremental append:指定增量导入模式为 append,即在现有的数据文件中追加新导入的数据。

lastmodified 模式

特点: 即导入新增数据也导入更新数据

数据源准备

 

先全量导入

在关系型数据库和 HDFS 之间传输数据

使用 lastmodified 实现 插入并更新

  • --check-column last_mod:指定用于增量导入的列,这里是 last_mod 列。Sqoop 会根据这个列的值来判断哪些数据是新增或修改的。

  • --last-value "2025-02-12 15:59:36":指定上次导入的最后一个值。Sqoop 会导入 last_mod 列值大于这个时间戳的记录。

  • --incremental lastmodified:指定增量导入的模式为 lastmodified,即基于时间戳的增量导入。Sqoop 会导入 last_mod 列值大于 --last-value 的记录。

  • --merge-key id:指定合并键列,这里是 id 列。Sqoop 会根据这个列的值来合并新导入的数据和已有数据。如果新导入的数据与已有数据的 id 相同,Sqoop 会更新已有数据。

3种增量导入方式的区别与适用场景

 

append模式Sqoop 会自动记录上次导入的最大值, 为什么还指定last-value

导出数据

Sqoop导出:需要用户提前手动创建同结构的表

hdfs -》 Mysql

在mysql中建表>>目标表

 

使用 Apache Sqoop 工具将数据从 HDFS 导出到 MySQL 数据库

hive --> mysql

在hive建表>>源表 

 

在mysql建表

使用 Apache Sqoop 工具将数据从 hive 导出到 MySQL 数据库的命令

注意:如果hive的底层表是orc格式进行存储的,则必须使用 HcataLog API

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安卓手游内存call综合工具/内部call/安卓注入call/数据分析(类人猿学院)

进程分析注入综合工具总界面 模块分析函数分析遍历 函数分析 so汇编分析 汇编call植入器,支持模拟器x86 x64 和手机arm64指令全平台 防ce搜索数据功能 全国首套发布,阿凡老师学院最好的安卓内存逆向老师,几乎行业最强的,有兴趣可以…

Transformer 详解:了解 GPT、BERT 和 T5 背后的模型

目录 什么是 Transformer? Transformer如何工作? Transformer 为何有用? 常见问题解答:机器学习中的 Transformer 在技​​术领域,突破通常来自于修复损坏的东西。制造第一架飞机的人研究过鸟类。莱特兄弟观察了秃鹫如何在气流中保持平衡,意识到稳定性比动力更重要。…

在C++的DLL文件中定义的结构体,在DLL外可以使用吗,如何使用?

在C的DLL文件中定义的结构体,在DLL外可以使用,但需要正确处理类型匹配和内存管理。‌ 在DLL外使用DLL中定义的结构体的方法: 一、 ‌使用extern "C"声明‌: 在DLL的导出声明中使用extern "C"可以确保函数和…

PDF另存为图片的一个方法

说明 有时需要把PDF的每一页另存为图片。用Devexpress可以很方便的完成这个功能。 窗体上放置一个PdfViewer。 然后循环每一页 for (int i 1; i < pdfViewer1.PageCount; i) 调用 chg_pdf_to_bmp函数获得图片并保存 chg_pdf_to_bmp中调用了PdfViewer的CreateBitmap函数…

中间件-安装Minio-集成使用(ubantu-docker)

目录 1、安装docer 2、运行以下命令拉取MinIO的Docker镜像 3、检查当前所有Docker下载的镜像 4、创建目录 5、创建Minio容器并运行 6、SDK操作 FileUploader.java 1、安装docer 参考这篇&#xff1a;Linux安装Docker 2、运行以下命令拉取MinIO的Docker镜像 docker pull…

ffmpeg学习:ubuntu下编译Android版ffmpeg-kit

文章目录 前言一. 配置环境1.1 虚拟机版本1.2 安装Android环境1.2.1 Android SDK安装1.2.2 Android NDK安装 1.3 编译前的准备工作1.3.1 libtasn1-1安装1.3.2 meson安装1.3.3 harfbuzz下载 二. 编译ffmpeg-kit三. 总结 前言 ffmpeg-kit是一款跨多个平台的&#xff0c;用于在应…

【全球人口数据集】全球人口密度数据集GPWv4

目录 数据概述数据处理方法数据下载参考GPWv4: Population Density, Revision 11 是由 NASA Socioeconomic Data and Applications Center (SEDAC) 提供的全球人口密度数据集,旨在支持社会经济和环境研究。 数据概述 Gridded Population of the World, Version 4 (GPWv4): Po…

PyTorch 中 `torch.cuda.amp` 相关警告的解决方法

在最近的写代码过程中&#xff0c;遇到了两个与 PyTorch 的混合精度训练相关的警告信息。这里随手记录一下。 警告内容 警告 1: torch.cuda.amp.autocast FutureWarning: torch.cuda.amp.autocast(args...) is deprecated. Please use torch.amp.autocast(cuda, args...) i…

NLP面试之-激活函数

一、动机篇 1.1 为什么要有激活函数&#xff1f; 数据角度&#xff1a;由于数据是线性不可分的&#xff0c;如果采用线性化&#xff0c;那么需要复杂的线性组合去逼近问题&#xff0c;因此需要非线性变换对数据分布进行重新映射;线性模型的表达力问题&#xff1a;由于线性模型…

四、自然语言处理_08Transformer翻译任务案例

0、前言 在Seq2Seq模型的学习过程中&#xff0c;做过一个文本翻译任务案例&#xff0c;多轮训练后&#xff0c;效果还算能看 Transformer作为NLP领域的扛把子&#xff0c;对于此类任务的处理会更为强大&#xff0c;下面将以基于Transformer模型来重新处理此任务&#xff0c;看…

关于conda换镜像源,pip换源

目录 1. 查看当前下载源2. 添加镜像源2.1清华大学开源软件镜像站2.2上海交通大学开源镜像站2.3中国科学技术大学 3.删除镜像源4.删除所有镜像源&#xff0c;恢复默认5.什么是conda-forge6.pip换源 1. 查看当前下载源 conda config --show channels 如果发现多个 可以只保留1个…

因果机器学习(CausalML)前沿创新思路

结合了传统因果推断与机器学习的因果机器学习是目前AI领域的前沿研究方向&#xff0c;其核心优势在于将因果逻辑融入数据驱动模型&#xff0c;从根本上解决了传统方法的缺陷。因此&#xff0c;它也是突破传统机器学习瓶颈的关键方向&#xff0c;不仅当下热度高&#xff0c;在未…

网络防御高级02-综合实验

web页面&#xff1a; [FW]interface GigabitEthernet 0/0/0 [FW-GigabitEthernet0/0/0]service-manage all permit 需求一&#xff0c;接口配置&#xff1a; SW2: [Huawei]sysname SW2 1.创建vlan [sw2]vlan 10 [sw2]vlan 20 2.接口配置 [sw2]interface GigabitEther…

【devops】 Git仓库如何fork一个私有仓库到自己的私有仓库 | git fork 私有仓库

一、场景说明 场景&#xff1a; 比如我们Codeup的私有仓库下载代码 放入我们的Github私有仓库 且保持2个仓库是可以实现fork的状态&#xff0c;即&#xff1a;Github会可以更新到Codeup的最新代码 二、解决方案 1、先从Codeup下载私有仓库代码 下载代码使用 git clone 命令…

一竞技瓦拉几亚S4预选:YB 2-0击败GG

在2月11号进行的PGL瓦拉几亚S4西欧区预选赛上,留在欧洲训练的YB战队以2-0击败GG战队晋级下一轮。双方对阵第二局:对线期YB就打出了优势,中期依靠卡尔带队进攻不断扩大经济优势,最终轻松碾压拿下比赛胜利,以下是对决战报。 YB战队在天辉。阵容是潮汐、卡尔、沙王、隐刺、发条。G…

ATF系统安全从入门到精通

CSDN学院课程连接&#xff1a;https://edu.csdn.net/course/detail/39573

Linux内核实时机制x - 中断响应测试 Cyclictest分析1

Linux内核实时机制x - 中断响应测试Cyclitest 1 实时性测试工具 rt-test 1.1 源码下载 1.下载源码&#xff1a; ~/0-code/5.15$ git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git 正克隆到 rt-tests... remote: Enumerating objects: 5534, done. remot…

实现限制同一个账号最多只能在3个客户端(有电脑、手机等)登录(附关键源码)

如上图&#xff0c;我的百度网盘已登录设备列表&#xff0c;有一个手机&#xff0c;2个windows客户端。手机设备有型号、最后登录时间、IP等。windows客户端信息有最后登录时间、操作系统类型、IP地址等。这些具体是如何实现的&#xff1f;下面分别给出android APP中采集手机信…

如何获取,CPU,GPU,硬盘,网卡,内存等硬件性能监控与各项温度传感器

首先需要下载 OpenHardwareMonitorServer 这是一个基于OpenHardwareMonitor 的 Web 服务器。可以让任何语言都可以获取硬件信息和值&#xff0c;OpenHardwareMonitorServer 是没有UI界面的因此它可以当成控制台程序使用。 该程序可用参数如下 参数&#xff1a;需要管理员权限…

解锁大语言模型潜能:KITE 提示词框架全解析

大语言模型的应用日益广泛。然而&#xff0c;如何确保这些模型生成的内容在AI原生应用中符合预期&#xff0c;仍是一个需要不断探索的问题。以下内容来自于《AI 原生应用开发&#xff1a;提示工程原理与实战》一书&#xff08;京东图书&#xff1a;https://item.jd.com/1013604…