当前位置: 首页 > news >正文

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

 

 

相关文章:

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

ETL ETL: 是数据抽取(Extract)、数据转换(Transform)和数据加载(Load)的整个过程 常用的ETL工具 sqoop 1.Apache Sqoop 是 Apache 软件基金会旗下的一个开源项目,旨在帮助用户高效地在 Hado…...

【核心特性】从鸭子类型到Go的io.Writer设计哲学

在编程语言的设计中,鸭子类型和接口设计是两种非常重要的理念。它们都强调了对象的行为和能力,而非其具体的类型或继承关系。Go 语言的io.Writer 接口是这种设计理念的典型代表,它通过简洁的接口定义,实现了强大的功能和灵活性。 …...

多模态模型详解

多模态模型是什么 多模态模型是一种能够处理和理解多种数据类型(如文本、图像、音频、视频等)的机器学习模型,通过融合不同模态的信息来提升任务的性能。其核心在于利用不同模态之间的互补性,增强模型的鲁棒性和准确性。 如何融合…...

Go 语言里中的堆与栈

在 Go 语言里,堆和栈是内存管理的两个重要概念,它们在多个方面存在明显差异: 1. 内存分配与回收方式 栈 分配:Go 语言中,栈内存主要用于存储函数的局部变量和调用信息。当一个函数被调用时,Go 会自动为其…...

八、OSG学习笔记-

前一章节: 七、OSG学习笔记-碰撞检测-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145558132?spm1001.2014.3001.5501 一、了解OSG图元加载显示流程 本章节代码: OsgStudy/wids CuiQingCheng/OsgStudy - 码云 - 开源中国https:…...

本地部署【LLM-deepseek】大模型 ollama+deepseek/conda(python)+openwebui/docker+openwebui

通过ollama本地部署deepseek 总共两步 1.模型部署 2.[web页面] 参考官网 ollama:模型部署 https://ollama.com/ open-webui:web页面 https://github.com/open-webui/open-webui 设备参考 Mac M 芯片 windows未知 蒸馏模型版本:deepseek-r1:14b 运行情况macminim2 24256 本地…...

网络分析工具—WireShark的安装及使用

Wireshark 是一个广泛使用的网络协议分析工具,常被网络管理员、开发人员和安全专家用来捕获和分析网络数据包。它支持多种网络协议,能够帮助用户深入理解网络流量、诊断网络问题以及进行安全分析。 Wireshark 的主要功能 数据包捕获与分析: …...

MobaXterm的图形化界面支持:原理与分辨率问题解决

1. 概述 MobaXterm 是一款功能强大的远程访问工具,支持SSH、RDP、X11、VNC等多种协议,并内置了强大的图形界面支持,让用户能够在远程操作Linux/Unix系统时,享受到类似本地桌面的流畅体验。 与传统的SSH客户端不同,Mo…...

Java JVM(Java Virtual Machine)解析

Java Virtual Machine(JVM)是Java平台的核心组成部分,它负责执行Java字节码,并提供了一个运行时环境。本文将深入探讨JVM的工作原理、组成部分以及其在Java开发中的重要性。 一、JVM的基本概念 JVM是一个虚拟的计算机&#xff0…...

pytest测试专题 - 1.2 如何获得美观的测试报告

<< 返回目录 1 pytest测试专题 - 1.2 如何获得美观的测试报告 1.1 背景 虽然pytest命令的报文很详细&#xff0c;用例在执行调试时还算比较方便阅读和提取失败信息&#xff0c; 但对于大量测试用例运行时&#xff0c;可能会存在以下不足 报文被冲掉测试日志没法归档 …...

现阶段股指期货交易保证金和费用多少?股指期货一手多少钱?

股指期货交易的保证金就是你在买卖股指期货合约时&#xff0c;需存入交易账户的一笔资金。 股指期货交易保证金是多少&#xff1f; 股指期货的交易保证金就像是租房时的押金&#xff0c;确保你能承担交易带来的风险。 一般来说&#xff0c;保证金的比例大概在合约价值的12-14…...

使用mermaid画流程图

本文介绍使用mermaid画流程图&#xff0c;并给出几个示例。 背景 目前&#xff0c;除有明确格式要求的文档外&#xff0c;笔者一般使用markdown写文档、笔记。当文档有图片时&#xff0c;使用Typora等软件可实时渲染&#xff0c;所见即所得。但如果文档接收方没有安装相关工具…...

大模型笔记:pytorch实现MOE

0 导入库 import torch import torch.nn as nn import torch.nn.functional as F 1 专家模型 #一个简单的专家模型&#xff0c;可以是任何神经网络架构 class Expert(nn.Module):def __init__(self, input_size, output_size):super(Expert, self).__init__()self.fc nn.L…...

HAL库USART中断接收的相关问题

文章目录 一、使用中断的步骤二、相关函数分析1、HAL_UART_IRQHandler2、UART_Receive_IT3、HAL_UART_Receive_IT4、UART_Start_Receive_IT5、总结 三、HAL库使用心得 一、使用中断的步骤 1、配置GPIO 2、配置USART1 3、设置UART1中断优先级&#xff08;不开启手动中断&#x…...

@Transational事务注解底层原理以及什么场景事务会失效

Transactional的底层是如何实现的 底层是通过动态代理实现的。Spring Boot 在运行时会生成一个代理对象&#xff0c;该代理对象被注解的方法调用&#xff0c;并在方法调用前后进行事务管理&#xff0c;事务管理包括开启事务&#xff0c;提交事务或回滚事务等操作。 1开启事务 …...

Linux扩容磁盘

启动 fdisk sudo fdisk /dev/sda输入p命令查询分区列表 输入d命令删除所有分区 需要一个一个删 输入n命令创建新分区 40G可以不用输入&#xff0c;直接回车使用默认 输入w命令保存操作 查看分区情况 sudo fdisk -l会发现sda1不是启动分区&#xff08;Boot列不是号&a…...

全面解析鸿蒙(HarmonyOS)开发:从入门到实战,构建万物互联新时代

文章目录 引言 一、鸿蒙操作系统概述二、鸿蒙开发环境搭建三、鸿蒙核心开发技术1. **ArkUI框架**2. **分布式能力开发**3. **原子化服务与元服务** 四、实战案例&#xff1a;构建分布式音乐播放器五、鸿蒙开发工具与调试技巧六、鸿蒙生态与未来展望结语 引言 随着万物互联时代…...

Uniapp 原生组件层级过高问题及解决方案

文章目录 一、引言&#x1f3c5;二、问题描述&#x1f4cc;三、问题原因❓四、解决方案&#x1f4af;4.1 使用 cover-view 和 cover-image4.2 使用 subNVue 子窗体4.3 动态隐藏原生组件4.4 使用 v-if 或 v-show 控制组件显示4.5 使用 position: fixed 布局 五、总结&#x1f38…...

Android adb测试常用命令大全

目录 一、查看最上层成activity名字: 二、查看Activity的任务栈&#xff1a; 三、获取安装包信息 四、性能相关 1、显示CPU信息 : 2、查看CPU使用信息 3、内存信息&#xff08;meminfo package_name or pid 使用程序的包名或者进程id显示内存信息&#xff09; 4、电量信…...

linux的基础入门2

linux的root用户 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中,拥有最大权限的账户名为:root(超级管理员) 而在前期&#xff0c;我们一直使用的账户是普通的用户 普通用户的权限&#xff0c;一般在其HOME目录内是不受限的 一旦出了HOME目录…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...