【数据采集工具】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的主要特点
-
批量数据传输:Sqoop可以高效地将大量数据从关系型数据库批量导入到Hadoop的HDFS中,或者将数据从HDFS批量导出到关系型数据库。
-
自动代码生成:Sqoop能够自动生成用于导入导出数据的代码,这使得开发者无需深入了解底层的复杂性。
- Sqoop原理:将导入或导出命令翻译成mapreduce程序来实现。在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。
-
数据类型映射:Sqoop支持自动转换关系型数据库和Hadoop之间不同的数据类型。
-
增量数据导入:Sqoop支持增量导入,这意味着它可以只导入自上次导入后发生变化的数据。
-
并行数据传输:Sqoop可以并行地从多个数据库表中导入数据,以提高数据传输效率。
-
数据压缩:为了减少网络传输的数据量,Sqoop支持数据压缩。
-
错误处理:Sqoop提供了错误处理机制,例如在数据导入过程中遇到错误时,可以选择跳过错误记录或停止操作。
-
集成: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
-
确定Mysql服务开启正常
-
在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');
-
导入数据
-
全部导入
$ 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命令,然后执行。
- 创建一个.opt文件
$ mkdir opt
$ touch opt/job_HDFS2RDBMS.opt
- 编写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"
- 执行该脚本
$ 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从入门到面试学习总结
国科大学习生活(期末复习资料、课程大作业解析、大厂实习经验心得等): 文章专栏(点击跳转) 大数据开发学习文档(分布式文件系统的实现,大数据生态圈学习文档等): 文章专栏(点击跳转&…...

Matlab绘图总结(进阶)
本文在前文的基础上进一步整理画图方法 MATLAB画动图_CSDN博客 1. 基础图形绘制 1.1 rectangle(矩形,圆形) 在前文中,讲解了如何使用rectangle,rectangle本意是用来画矩形的,其中,Curvature可…...

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

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

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

基于Java微信小程序的水果销售系统详细设计和实现(源码+lw+部署文档+讲解等)
详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…...

从0开始深度学习(11)——多层感知机
前面介绍了线性神经网络,但是线性模型是有可能出错的,因为线性模型意味着是单调假设,但是现实中往往很复杂。例如,我们想要根据体温预测死亡率。 对体温高于37摄氏度的人来说,温度越高风险越大。 然而,对体…...

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

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

深度学习-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与物联网的前沿探索
全文目录: 🎉前言🔄Redis在云服务中的应用🪁1. Redis作为云缓存服务🪄示例:使用AWS ElastiCache Redis实例 🎮️2. 云原生应用中的持久化与高可用 ⚙️Redis 6.x及后续版本的新特性🕹…...

针对考研的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调度任务(推荐) 【2】spring集成Quartz【2.1…...

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

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

【DNF mysql8.0安装】DNF安装MySQL服务器教程
在基于Red Hat的Linux发行版中,如CentOS或Fedora,DNF(Dandified Yum)是包管理器,用于安装、更新和卸载软件包。以下是使用DNF安装MySQL服务器(也称为MySQL Community Server)的步骤:…...

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

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

基于LSTM-Transformer混合模型实现股票价格多变量时序预测(PyTorch版)
前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对…...

创建TaskPool任务组
实现任务的函数需要使用装饰器Concurrent标注,且仅支持在.ets文件中使用。 方法: taskpool.execute(任务名,执行权重优先级) import { taskpool } from kit.ArkTS//Concurrent 只能修饰全局函数 Concurrent async function getData(params1: string,…...

一文1800字从0到1浅谈web性能测试!
什么是性能测试? web性能应该注意些什么? 性能测试,简而言之就是模仿用户对一个系统进行大批量的操作,得出系统各项性能指标和性能瓶颈,并从中发现存在的问题,通过多方协助调优的过程。而web端的性能测试…...

计算机网络基础(1)
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络基础 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 计算机网…...

GNU/Linux - 宏处理工具M4
GNU M4 M4 "Macro Processor, Version 4". 1, Introduction to GNU M4 GNU M4 是传统 Unix 宏处理器的实现。它主要与 SVR4 兼容,但也有一些扩展功能(例如,处理超过 9 个位置参数的宏命令)。GNU M4 还内置了包含文件、…...

Oracle权限安全管理
实验内容 本次实验先使用system用户连接 温馨提示:题目要求切换账户登录的时候自己记得切换,本文章只提供相应的SQL语句 在表空间BOOKTBS1(实验4第1题已创建)创建一张表BOOKS,其字段如下:: SQL> create…...

C++笔记之静态多态和动态多态
C++笔记之静态多态和动态多态 code review! 在C++中,多态(Polymorphism)是面向对象编程的一个核心概念,允许对象以多种形式存在。多态性主要分为静态多态(Static Polymorphism)和动态多态(Dynamic Polymorphism)。下面将详细解释这两种多态及其在C++中的实现方式、优缺…...

Axure RP电商系统商城PC+app+后台买家卖端高保真原型模板及元件库
AxureRP电商商城PCapp后台买家卖端高保真原型模板本套包含三份原型图素材 APP买家端原型简介: 包含了用户中心、会员成长、优惠券、积分、互动社区、运营推广、内容推荐、商品展示、订单流程、订单管理、售后及服务等完整的电商体系功能架构和业务流程。 本模板由…...

RTX3070的yolo训练模型迁移到NVIDIA JETSON XAVIER NX 上的踩坑经验,时机部署避雷点
NVIDIA JETSON XAVIER NX 的yolo环境部署 首先为了保证yolo的权重模型pt文件可以顺利迁移过去,要保证torch和cuda的版本一致 如何在NX上安装torch? 1.用 jtop工具 实时查看和控制板子状态 安装: sudo -H pip3 install jetson-stats使用: sudo jtop 在这里是为…...

带你学习如何编写一篇API详设文档以及给新人提点建议
文章目录 前言先认清一个问题详设文档如何写先看文档脉络详设文档分析需求背景方案概述API定义安全设计性能设计缓存与数据库 总结 前言 这篇文章带读者了解软件开发项目中一个需求的开发详设文档主要包括哪些内容,其中重点会给读者分析API设计的规范,相…...

【Python爬虫实战】正则:多字符匹配、开头与结尾定位、分组技术详解
🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、匹配多个字符 (一)匹配任意多个字符 ࿰…...