【数据采集工具】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内容学习整理,如有错误,欢迎评论区交流指出。
不积跬步无以至千里!

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

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

相关文章

unity Gpu优化

不一样的视角&#xff0c;深度解读unity性能优化。unity性能优化&#xff0c;unity内存优化&#xff0c;cpu优化&#xff0c;gpu优化&#xff0c;资源优化&#xff0c;资源包、资源去重优化&#xff0c;ugui优化。 gpu优化静态批处理静态批处理原理规则静态合批的原理静态合批的…

2023年华为杯数学建模竞赛B题论文和代码

DFT类矩阵的整数分解逼近 离散傅里叶变换&#xff08;Discrete Fourier Transform&#xff0c;DFT&#xff09;傅里叶分析方法是信号分析的最基本方法&#xff0c;傅里叶变换是傅里叶分析的核心&#xff0c;通过它把信号从时间域变换到频率域&#xff0c;进而研究信号的频谱结构…

SSM四川工商学院学生宿舍管理系统---附源码54633

摘 要 从20年代开始&#xff0c;计算机疯狂的出现在人们的生活以及工作当中&#xff0c;成为人们生活、工作的好帮手&#xff0c;计算机深入到每家每户当中&#xff0c;网络办公&#xff0c;网络教学更是替换了传统手工记录管理的方式&#xff0c;使用计算机办公可以不必局限于…

MySQL-12.DQL-聚合函数

一.DQL-分组查询 二.聚合函数 -- DQL:分组查询 -- 聚合函数 -- 1.统计该企业员工数量 count select count(id) from tb_emp; select count(job) from tb_emp;select count(A) from tb_emp; select count(*) from tb_emp;-- 2.统计该企业最早入职的员工 min select min(entr…

SQL第18课挑战题

1. 创建一个名为customerswithorders的视图&#xff0c;其中包含customers表中的所有列&#xff0c;但仅仅是那些已下订单的列。提示&#xff1a;可以在orders表上使用join来仅仅过滤所需的顾客&#xff0c;然后使用select来确保用有正确的数据。 创建视图&#xff1a;

电影台词摘抄(十一)——Banana!

Scarlet&#xff1a;Do you know who this is? Kevin&#xff1a;Uh. La cucaracha? n.伊丽莎白(女子名) Scarlet&#xff1a;This is Queen Elizabeth, ruler of England.Oh, I love England, Their music, the …

Linux - 环境变量 | 命令行参数 | 进程基础

文章目录 一、了解冯诺依曼体系结构1、概念2、对数据层面3、实例二、操作系统1、概念2、设计OS的目的3、定位4、操作系统怎么管理&#xff1f; 三、进程1、概念2、怎么管理进程3、描述进程-PCB4、描述进程怎么运行&#xff08;粗略&#xff09;5、进程属性6、创建子进程7、创建…

bash之基本运算符

一.算术运算符 vim test.sh #!/bin/basha10 b20valexpr $a $b echo "a b : $val"valexpr $a - $b echo "a - b : $val"valexpr $a \* $b echo "a * b : $val"valexpr $b / $a echo "b / a : $val"valexpr $b % $a echo "b % a …

c++STL——map与set的使用及介绍

目录 前言&#xff1a; 1. 关联式容器 2. 键值对 3. 树形结构的关联式容器 3.1 set 3.1.1 set的介绍 3.1.2 set的使用 1. set的模板参数列表 2. set的构造 3. set的迭代器 4. set的容量 5. set修改操作 6. set的使用举例 3.2 map 3.2.1 map的介绍 3.2.2 map的…

Vue3浮动按钮(FloatButton)

效果如下图&#xff1a;在线预览 APIs FloatButton 参数说明类型默认值left按钮定位的左边距&#xff0c;单位 pxnumber | stringundefinedright按钮定位的右边距&#xff0c;单位 pxnumber | string24top按钮定位的上边距&#xff0c;单位 pxnumber | stringundefinedbottom…

spring 如何将mutipartFile转存到本地磁盘

两者的区别和联系 MutipartFile是spring的一部分&#xff0c;File则是java的标准类MutipartFile用于接收web传递的文件&#xff0c;File操作本地系统的文件 MutipartFile 转换File的三种方式 使用MutipartFile 自带的transferTo方法使用java自带的FileOutPutStream流使用java自…

使用Langchain-chatchat搭建RAG应用,并使用postman进行测试验证

Github地址&#xff1a;https://github.com/chatchat-space/Langchain-Chatchat 一、概述 LangChain-Chatchat (原 Langchain-ChatGLM)&#xff0c;一种利用 langchain 思想实现的基于本地知识库的问答应用&#xff0c;目标期望建立一套对中文场景与开源模型支持友好、可离线运…

React(一) 认识React、熟悉类组件、JSX书写规范、嵌入变量表达式、绑定属性

文章目录 一、初始React1. React的基本认识2. Hello案例2.1 三个依赖2.2 渲染页面2.3 hello案例完整代码 二、类组件1. 封装类组件2. 组件里的数据3. 组件里的函数 (重点)4. 案例练习(1) 展示电影列表 三、JSX语法1. 认识JSX2. JSX书写规范及注释3. JSX嵌入变量作为子元素4. JS…

android app执行shell命令视频课程补充android 10/11适配-千里马android

(https://blog.csdn.net/learnframework/article/details/120103471) https://blog.csdn.net/learnframework/article/details/120103471 hi&#xff0c;有学员在学习跨进程通信专题课程时候&#xff0c;在实战app执行一个shell命令的项目时候&#xff0c;对课程本身的android …

推荐算法的学习

文章目录 前言1、模型1.1 从本领域模型的发展历史中学习1.1.1 在历史中总结发展规律和趋势1.1.2 发现模型之间的共性&#xff0c;方便记忆 1.2 从其他领域的发展中学习1.2.1 注意力机制1.2.2 残差网络 1.3 实践该怎么办&#xff1f; 2、 特征2.1 数据源的选择与建立2.2 特征构造…

Element中el-table组件设置max-height右侧出现空白列的解决方法

之前就出现过这个情况&#xff0c;没理过&#xff0c;因为不影响啥除了不美观...但今天看着实在是难受&#xff0c;怎么都不顺眼(可能是我自己烦躁--) 试了很多网上的方法&#xff0c;都不得行&#xff0c;后面发现了这篇文章&#xff0c;解决了! 感谢&#xff01; Element中t…

PageHelper循环依赖问题

1. 问题 2. 原因 项目中SpringBoot的版本为2.7.18。 SpringBoot2.6.x后不推荐使用循环依赖&#xff0c;也就是说从2.6.x版本开始&#xff0c;如果项目里还存在循环依赖&#xff0c;SpringBoot将拒绝启动&#xff01; 3. 解决 去pageHelper github看&#xff0c;才看到新版本…

Pandas缺失值处理

目录 NaN 加载包含缺失的数据 查看缺失值 通过info函数查看缺失值 通过isnull函数查看缺失值 通过notnull函数查看缺失值 通过isnull().sum()统计空值 缺失值处理 准备数据 dropna删除缺失值 fillna平均值填充缺失值 fillna前后值填充缺失值 interpolate线性插值 …

C++中的vector二维数组(全面详解)

目录 二维数组概念&#xff1a; 二维数组格式&#xff1a; 二维数组的初始化&#xff1a; 在创建的时候就进行初始化&#xff1a; resize初始化&#xff1a; 构造v的时候只给行数&#xff0c;列数用resize开辟 构造v的时候不给行数不给列数&#xff0c;都用resize来开辟…

Java中使用protobuf

一、简介 Protocal Buffers(简称protobuf)是谷歌的一项技术&#xff0c;用于结构化的数据序列化、反序列化。 Protocol Buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法&#xff0c;它可用于&#xff08;数据&#xff09;通信协议、数据存储等。 Protocol B…