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

【数据采集工具】Sqoop从入门到面试学习总结

国科大学习生活(期末复习资料、课程大作业解析、大厂实习经验心得等): 文章专栏(点击跳转)
大数据开发学习文档(分布式文件系统的实现,大数据生态圈学习文档等): 文章专栏(点击跳转)

【数据采集工具】Sqoop从入门到面试学习总结

  • 一、什么是Sqoop?
    • 1.1 Sqoop简介
    • 1.2 Sqoop的主要特点
    • 1.3 Sqoop的基本命令格式
  • 二、Sqoop的简单使用案例
    • 2.1 导入数据
      • 2.1.1 RDBMS 到 HDFS
      • 2.1.2 RDBMS 到 Hive
      • 2.1.3 RDBMS 到 Hbase
    • 2.2 导出数据
      • 2.2.1 Hive/HDFS到RDBMS
  • 三、脚本打包
  • 四、Sqoop一些常用命令及参数
    • 4.1 导入数据命令选项
    • 4.2 导出数据命令选项
    • 4.3 通用命令选项
  • 参考文献

一、什么是Sqoop?

1.1 Sqoop简介

在这里插入图片描述
Apache Sqoop(SQL-to-Hadoop Optimized Import/Export)是一个用于在关系型数据库管理系统(RDBMS)和Apache Hadoop之间的数据传输的工具。它旨在使大量数据的导入导出操作变得简单和高效。

Sqoop原理架构图

在这里插入图片描述

1.2 Sqoop的主要特点

  1. 批量数据传输:Sqoop可以高效地将大量数据从关系型数据库批量导入到Hadoop的HDFS中,或者将数据从HDFS批量导出到关系型数据库。

  2. 自动代码生成:Sqoop能够自动生成用于导入导出数据的代码,这使得开发者无需深入了解底层的复杂性。

    • Sqoop原理:将导入或导出命令翻译成mapreduce程序来实现。在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。
  3. 数据类型映射:Sqoop支持自动转换关系型数据库和Hadoop之间不同的数据类型

  4. 增量数据导入:Sqoop支持增量导入,这意味着它可以只导入自上次导入后发生变化的数据。

  5. 并行数据传输:Sqoop可以并行地从多个数据库表中导入数据,以提高数据传输效率。

  6. 数据压缩:为了减少网络传输的数据量,Sqoop支持数据压缩

  7. 错误处理:Sqoop提供了错误处理机制,例如在数据导入过程中遇到错误时,可以选择跳过错误记录或停止操作。

  8. 集成:Sqoop可以与Hadoop生态系统中的其他组件(如Hive和HBase)集成,以支持更复杂的数据处理任务。

1.3 Sqoop的基本命令格式

  • 导入数据
sqoop import \
--connect <JDBC连接字符串> \
--username <用户名> \
--password <密码> \
--table <表名> \
--target-dir <目标目录> \
--fields-terminated-by <字段分隔符> \
--lines-terminated-by <行分隔符> \
--columns <列名列表>
  • 导出数据
sqoop export \
--connect <JDBC连接字符串> \
--username <用户名> \
--password <密码> \
--table <表名> \
--input-null-string <输入中表示NULL值的字符串> \
--input-null-non-string <输入中表示NULL值的非字符串值> \
--export-dir <导出数据的源目录> \
--input-fields-terminated-by <输入字段的分隔符> \
--input-lines-terminated-by <输入行的分隔符> \
--columns <列名列表>
  • 增量导入数据语法示例
sqoop import \
--connect <JDBC连接字符串> \
--username <用户名> \
--password <密码> \
--table <表名> \
--target-dir <目标目录> \
--incremental <模式> \
--check-column <检查列> \
--last-value <上次导入的值>
  • 列出数据库语法示例:
sqoop list-databases 
--connect jdbc:mysql://hadoop102:3306/ 
--username root 
--password root
  • 查看表的结构语法示例:
sqoop eval \
--connect <JDBC连接字符串> \
--username <用户名> \
--password <密码> \
--query "DESCRIBE <表名>"

Sqoop是Hadoop生态系统中重要的数据迁移工具,它简化了传统数据库与大数据平台之间的数据交换过程

二、Sqoop的简单使用案例

2.1 导入数据

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

2.1.1 RDBMS 到 HDFS

  1. 确定Mysql服务开启正常

  2. 在Mysql中新建一张表并插入一些数据

    $ mysql -uroot -p000000 
    mysql> create database company; 
    mysql> create table company.staff(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255)); 
    mysql> insert into company.staff(name, sex) values('Stan', 'Male'); 
    mysql> insert into company.staff(name, sex) values('Catalina', 'FeMale'); 
    
  3. 导入数据

  • 全部导入

    $ bin/sqoop import \ 
    --connect jdbc:mysql://hadoop102:3306/company \ 
    --username root \ 
    --password 000000 \ 
    --table staff \ 
    --target-dir /user/company \ 
    --delete-target-dir \ 
    --num-mappers 1 \ 
    --fields-terminated-by "\t" 
    
  • 查询导入

    $ bin/sqoop import \ 
    --connect jdbc:mysql://hadoop102:3306/company \ 
    --username root \ 
    --password 000000 \ 
    --target-dir /user/company \ 
    --delete-target-dir \ 
    --num-mappers 1 \ 
    --fields-terminated-by "\t" \ 
    --query 'select name,sex from staff where id <=1 and $CONDITIONS;' 
    

    提示:must contain ‘$CONDITIONS’ in WHERE clause.
    如果query后使用的是双引号,则$CONDITIONS前必须加转移符,防止shell识别为自己的变量。

  • 导入指定列

    $ bin/sqoop import \ 
    --connect jdbc:mysql://hadoop102:3306/company \
    --username root \ 
    --password 000000 \ 
    --target-dir /user/company \ 
    --delete-target-dir \ 
    --num-mappers 1 \ 
    --fields-terminated-by "\t" \ 
    --columns id,sex \ 
    --table staff
    

    提示:columns中如果涉及到多列,用逗号分隔,分隔时不要添加空格。

  • 使用sqoop关键字筛选查询导入数据

    $ bin/sqoop import \ 
    --connect jdbc:mysql://hadoop102:3306/company \ 
    --username root \ 
    --password 000000 \ 
    --target-dir /user/company \ 
    --delete-target-dir \ 
    --num-mappers 1 \ 
    --fields-terminated-by "\t" \ 
    --table staff \ 
    --where "id=1"
    

2.1.2 RDBMS 到 Hive

$ bin/sqoop import \ 
--connect jdbc:mysql://hadoop102:3306/company \ 
--username root \ 
--password 000000 \ 
--table staff \ 
--num-mappers 1 \ 
--hive-import \ 
--fields-terminated-by "\t" \ 
--hive-overwrite \ 
--hive-table staff_hive

提示:该过程分为两步,第一步将数据导入到HDFS,第二步将导入到HDFS的数据迁移到 Hive仓库(默认还是存储到HDFS上)。

2.1.3 RDBMS 到 Hbase

$ bin/sqoop import \ 
--connect jdbc:mysql://hadoop102:3306/company \ 
--username root \ 
--password 000000 \ 
--table company \ 
--columns "id,name,sex" \ 
--column-family "info" \ 
--hbase-create-table \ 
--hbase-row-key "id" \ 
--hbase-table "hbase_company" \ 
--num-mappers 1 \ 
--split-by id

提示:sqoop1.4.6只支持HBase1.0.1之前的版本的自动创建HBase表的功能.
解决方案:手动创建HBase表

hbase> create 'hbase_company,'info'

2.2 导出数据

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

2.2.1 Hive/HDFS到RDBMS

$ bin/sqoop export \ 
--connect jdbc:mysql://hadoop102:3306/company \ 
--username root \ 
--password 000000 \ 
--table staff \ 
--num-mappers 1 \ 
--export-dir /user/hive/warehouse/staff_hive \ 
--input-fields-terminated-by "\t"

提示:Mysql中如果表不存在,不会自动创建。

三、脚本打包

使用opt格式的文件打包sqoop命令,然后执行。

  1. 创建一个.opt文件
$ mkdir opt 
$ touch opt/job_HDFS2RDBMS.opt 
  1. 编写sqoop脚本
$ vi opt/job_HDFS2RDBMS.opt 
export --connect jdbc:mysql://hadoop102:3306/company 
--username root 
--password 000000 
--table staff 
--num-mappers 1 
--export-dir /user/hive/warehouse/staff_hive 
--input-fields-terminated-by "\t" 
  1. 执行该脚本
$ bin/sqoop --options-file opt/job_HDFS2RDBMS.opt

四、Sqoop一些常用命令及参数

4.1 导入数据命令选项

参数描述
--connect指定数据库 连接URL
--username指定数据库 用户名
--password指定数据库 密码
--table指定要导入的数据库表名
--columns指定要导入的列
--target-dir指定导入数据的目标目录
--where指定导入数据的条件
--split-by指定用于拆分数据的列
--num-mappers指定并行导入的Mapper数量
--null-string指定数据库中表示NULL值的字符串
--null-non-string指定数据库中表示NULL值的非字符串值

4.2 导出数据命令选项

参数描述
--connect指定数据库连接URL
--username指定数据库用户名
--password指定数据库密码
--table指定要导出的数据库表名
--export-dir指定导出数据的源目录
--columns指定要导出的列
--input-fields-terminated-by指定输入字段的分隔符
--input-lines-terminated-by指定输入行的分隔符
--input-null-string指定输入中表示NULL值的字符串
--input-null-non-string指定输入中表示NULL值的非字符串值

4.3 通用命令选项

参数描述
--verbose显示详细的调试信息
--compress启用压缩
--direct使用直接模式进行导入/导出
--as-avrodatafile将数据导入/导出为Avro文件
--as-parquetfile将数据导入/导出为Parquet文件
--as-textfile将数据导入/导出为文本文件
--delete-target-dir在导入之前删除目标目录
--fields-terminated-by指定字段的分隔符
--lines-terminated-by指定行的分隔符
--null-string指定输出中表示NULL值的字符串
--null-non-string指定输出中表示NULL值的非字符串值

这只是Sqoop的一些常见命令选项,还有其他更多选项可用于满足特定的需求。你可以通过运行sqoop help命令来获取完整的命令选项列表和详细的帮助信息。

参考文献

Sqoop基础理论与常用命令详解(超详细)
Sqoop User Guide (v1.4.7) (apache.org)
大数据视频_Sqoop视频教程_哔哩哔哩_bilibili


2024年10月14日 14点56分
数据采集工具——Sqoop内容学习整理,如有错误,欢迎评论区交流指出。
不积跬步无以至千里!

相关文章:

【数据采集工具】Sqoop从入门到面试学习总结

国科大学习生活&#xff08;期末复习资料、课程大作业解析、大厂实习经验心得等&#xff09;: 文章专栏&#xff08;点击跳转&#xff09; 大数据开发学习文档&#xff08;分布式文件系统的实现&#xff0c;大数据生态圈学习文档等&#xff09;: 文章专栏&#xff08;点击跳转&…...

Matlab绘图总结(进阶)

本文在前文的基础上进一步整理画图方法 MATLAB画动图_CSDN博客 1. 基础图形绘制 1.1 rectangle&#xff08;矩形&#xff0c;圆形&#xff09; 在前文中&#xff0c;讲解了如何使用rectangle&#xff0c;rectangle本意是用来画矩形的&#xff0c;其中&#xff0c;Curvature可…...

QExcel 保存数据 (QtXlsxWriter库 编译)

QtXlsxWriter 是一个用于在 Qt 应用程序中创建和操作 Excel XLSX 文件的库。它提供了一个简单的 API&#xff0c;使开发者能够轻松地生成和修改 Excel 文件&#xff0c;而无需依赖 Microsoft Excel 或其他外部应用程序。支持初始化、写文件、读文件、格式设置、合并单元格、加粗…...

k8s ETCD数据备份与恢复

在 Kubernetes 集群中&#xff0c;etcd 是一个分布式键值存储&#xff0c;它保存着整个集群的状态&#xff0c;包括节点、Pod、ConfigMap、Secrets 等关键信息。因此&#xff0c;定期对 etcd 进行备份是非常重要的&#xff0c;特别是在集群发生故障或需要恢复数据的情况下。本文…...

【C语言】循环嵌套:乘法表

循环嵌套&#xff0c;外层循环执行一次&#xff0c;内层循环执行i次。分别控制 在循环的过程中加一层循环。 多层循环属于循环嵌套、嵌套循环 #include <stdio.h> #include <math.h> /* 功能&#xff1a;循环嵌套 乘法表 时间&#xff1a;2024年10月 地点&#xf…...

基于Java微信小程序的水果销售系统详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…...

从0开始深度学习(11)——多层感知机

前面介绍了线性神经网络&#xff0c;但是线性模型是有可能出错的&#xff0c;因为线性模型意味着是单调假设&#xff0c;但是现实中往往很复杂。例如&#xff0c;我们想要根据体温预测死亡率。 对体温高于37摄氏度的人来说&#xff0c;温度越高风险越大。 然而&#xff0c;对体…...

SQL语句查询

SQL语句查询 查询产生一个虚拟表 看到的是表形式显示的结果&#xff0c;但结果并不真正存储 每次执行查询只是从数据表中提取数据&#xff0c;并按照表的形式显示出来 查询语法 SELECT <列名> FROM <表名> [WHERE <查询条件表达式>] SELECT …...

OSI参考模型与TCP/IP模型

OSI参考模型 物理层 定义电压、接口、线缆标准、传输距离、传输介质等物理参数。数据链路层&#xff08;确定范围里的某一个&#xff09; MAC地址寻址网络层&#xff08;确定一个范围&#xff09; 网络地址层寻址、路由传输层&#xff08;区分不同的程序&#xff09; 数据分段…...

深度学习-26-基于PyTorch的多层感知机DNN

文章目录 1 代码分析1.1 加载数据集1.2 定义模型1.3 定义损失函数和优化器1.4 定义训练函数1.4.1 定义累加器Accumulator1.4.2 计算准确率accuracy1.4.3 评估函数evaluate_accuracy1.4.4 单轮训练函数train_epoch1.4.5 训练函数train1.2 执行训练2 整体代码3 参考附录1 代码分析…...

华为杯”第十三届中国研究生数学建模竞赛-B题:具有遗传性疾病和性状的遗传位点分析(附MATLAB代码实现)

目录 摘要: 1. 问题重述 1.1 问题背景 1.2 待解决问题 2. 符号说明 3. 问题一 3.1 问题分析 3.2 问题解决 4. 问题二 4.1 问题分析 4.2 问题解决 5. 问题三 5.1 问题分析 5.2 问题解决 6. 问题四 6.1 问题分析 6.2 问题解决 7. 总结 参考文献 代码实现 摘要: 人体的每条染色…...

滚雪球学Redis[8.2讲]:Redis的未来发展趋势:从云服务到AI与物联网的前沿探索

全文目录&#xff1a; &#x1f389;前言&#x1f504;Redis在云服务中的应用&#x1fa81;1. Redis作为云缓存服务&#x1fa84;示例&#xff1a;使用AWS ElastiCache Redis实例 &#x1f3ae;️2. 云原生应用中的持久化与高可用 ⚙️Redis 6.x及后续版本的新特性&#x1f579…...

针对考研的C语言学习(二叉树专题层次遍历---广度优先遍历)

层次便利需要一个队列来辅助保存节点信息 代码 #include<stdio.h> #include<stdlib.h> typedef char ElemType;//树 typedef struct trees{ElemType data;struct trees*lc;struct trees*rc; }treeNode,*Tree;//链表 typedef struct Links{Tree tree;struct Links…...

spring揭秘31-spring任务调度01-spring集成Quartz及JDKTimer定时器

文章目录 【README】【1】Quartz任务调度框架【1.1】Job调度任务【1.2】任务调度触发器Trigger【1.3】\*Quartz框架执行调度任务代码实践【1.3.1】硬编码执行Quartz调度任务【1.3.2】基于生产者模式执行quartz调度任务&#xff08;推荐&#xff09; 【2】spring集成Quartz【2.1…...

Kafka之资源容量评估

编写目的意义 应用场景为如果有租户需要部署kafka集群&#xff0c;并给出业务压力&#xff0c;根据业务评估kafka资源情况&#xff0c;如cpu 磁盘 内存 带宽等维度。为业务解决因资源过小故障和新业务部署提供了参考和计算方法&#xff0c;减少后续的维护成本 资源容量评估 …...

深度学习神经网络的7大分类

深度学习中的神经网络可通过其结构和功能分为多种类型&#xff0c;每种都针对特定的数据特征和应用场景进行了优化。 深度学习7大神经网络如下&#xff1a; 01 前馈神经网络&#xff08;Feedforward Neural Networks, FNN&#xff09;&#xff1a; 这是最基本的神经网络形式…...

【DNF mysql8.0安装】DNF安装MySQL服务器教程

在基于Red Hat的Linux发行版中&#xff0c;如CentOS或Fedora&#xff0c;DNF&#xff08;Dandified Yum&#xff09;是包管理器&#xff0c;用于安装、更新和卸载软件包。以下是使用DNF安装MySQL服务器&#xff08;也称为MySQL Community Server&#xff09;的步骤&#xff1a;…...

决策树与随机森林在分类问题中的应用

决策树与随机森林在分类问题中的应用 分类问题是机器学习中的重要任务之一&#xff0c;它涉及将数据划分到预定义的类别中。在分类问题中&#xff0c;决策树与随机森林模型被广泛应用&#xff0c;凭借其直观性、强大的预测能力和稳定的泛化性能&#xff0c;成为了机器学习的经…...

Dmitri Shuralyov的全职开源之旅

本篇内容是根据2017年7月份Full-time Open Source 音频录制内容的整理与翻译 Dmitri Shuralyov 加入节目&#xff0c;谈论作为开源的全职贡献者、开发开发人员工具以及其他有趣的 Go 项目和新闻。 过程中为符合中文惯用表达有适当删改, 版权归原作者所有. Erik St. Martin: 欢迎…...

基于LSTM-Transformer混合模型实现股票价格多变量时序预测(PyTorch版)

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...