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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【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;…

网易博客旧文----Xtreme ToolkitPro 的CommandBarsDesigner编辑生成的界面如何使用

Xtreme ToolkitPro 的CommandBarsDesigner编辑生成的界面如何使用 2013-03-04 17:22:42| 分类&#xff1a; MFC | 标签&#xff1a; |举报 |字号大中小 订阅 著名的界面开发商Codejock Software开发的MFC界面控件和BCGsoft公司开发的BCGControlBarPro界面有得一拼。 codejock…

SpringBoot整合Freemarker(一)

Freemarker和jsp一样是一个视图的引擎模板&#xff0c;其实所有的模板引擎的工作原理都是类似的&#xff0c;如下图&#xff1a; 接下来就具体讲解一下Freemarker的用法&#xff0c;参考手册&#xff1a;模板 数据模型 输出 - FreeMarker 中文官方参考手册 SpringBoot默认就…

Agentic RAG(基于智能体的检索增强生成)是检索增强生成(Retrieval-Augmented Generation,RAG)技术的一种高级形式

Agentic RAG&#xff08;基于智能体的检索增强生成&#xff09;是检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;RAG&#xff09;技术的一种高级形式&#xff0c;它通过引入人工智能代理&#xff08;Agent&#xff09;的概念&#xff0c;为语言模型赋予了…

本地项目上传Github+Gitee上传特定分支到Linux服务器(自用)

一、本地项目上传Github 上传整个项目到一个全新的repositories 或者 上传一个文件到一个特定的分支 步骤 1: 在本地创建 Git 仓库 在项目的根目录下运行以下命令&#xff0c;初始化本地 Git 仓库&#xff1a; git init步骤 2: 添加文件到 Git 仓库 使用以下命令将所有文件…

vite server正则表达式

vite server支持正则表达式&#xff0c;这样可以在测试时将一些请求模拟转发到本地后端服务的端口。且不会出现跨域的问题。 例如下面的配置&#xff0c;解决了3个问题&#xff1a; 1&#xff09;API请求URI地址转发到本地后端服务 2&#xff09;文件资源路径转发到本地后端服…

微前端架构及其解决方案对比

微前端架构及其解决方案对比 微前端架构是一种通过将大型前端应用拆分为多个独立的、可单独部署的小型应用的设计模式。随着这种模式的流行&#xff0c;诞生了多种微前端实现方案&#xff0c;每个方案都有其独特的特点和适用场景。以下是常见的微前端解决方案及其优缺点对比&a…

Socket 网络编程与 C# 中的应用实例

一、引言 在当今数字化时代&#xff0c;网络编程成为构建各种分布式应用和实现设备间通信的关键技术。Socket 网络编程作为一种底层且强大的网络通信方式&#xff0c;为开发者提供了直接操控网络连接和数据传输的手段。从即时通讯应用到网络游戏服务器&#xff0c;从文件传输工…

智能EDA小白从0开始 —— DAY24 Pulsic

Pulsic公司简介及其革命性EDA工具Animate Preview深度解析 一、公司概览与背景 Pulsic&#xff0c;一家深耕于电子设计自动化&#xff08;EDA&#xff09;领域的精密设计自动化公司&#xff0c;自2001年1月在英国布里斯托尔成立以来&#xff0c;便致力于解决先进节点设计所面…

一些简单的汇编指令

硬件架构和汇编指令 一、硬件架构 ARM芯片属于精简指令集计算机(RISC:Reduced Instruction Set Computing)&#xff0c; 它所用的指令比较简单&#xff0c;有如下特点: ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 ③ 使用RISC指令的CPU复杂度小一点&#xff0…

中国科学院大学与美团发布首个交互式驾驶世界模型数据集DrivingDojo:推进交互式与知识丰富的驾驶世界模型

中国科学院大学与美团发布首个交互式驾驶世界模型数据集DrivingDojo&#xff1a;推进交互式与知识丰富的驾驶世界模型 Abstract 驾驶世界模型因其对复杂物理动态的建模能力而受到越来越多的关注。然而&#xff0c;由于现有驾驶数据集中的视频多样性有限&#xff0c;其卓越的建…

简述RESTFul风格的API接口

目录 传统的风格API REST风格 谓词规范 URL命令规范 避免多级URL 幂等 CURD的接口设计 REST响应 响应成功返回的状态码 重定向 错误代码 客户端 服务器 RESTful的返回格式 返回格式 从上一篇文章我们已经初步知道了怎么在VS中创建一个webapi项目。这篇文章来探讨一…

外包干了2个月,技术明显退步

回望过去&#xff0c;我是一名普通的本科生&#xff0c;于2019年通过校招有幸加入了南京某知名软件公司。那时的我&#xff0c;满怀着对未来的憧憬和热情&#xff0c;投入到了功能测试的岗位中。日复一日&#xff0c;年复一年&#xff0c;转眼间&#xff0c;我已经在这个岗位上…

Git协作场景

1、日常需求开发 在日常开发中&#xff0c;研发人员通常需要从 develop 分支创建 feature 分支进行功能开发&#xff0c;并在开发完成后将其合并回 develop。常规的操作流程如下&#xff1a; 创建 feature 分支&#xff1a; 研发人员从 develop 分支创建一个新的 feature 分支…

优化SpringBoot接口:异步处理提升系统吞吐量策略

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c…

牵手App红娘来助力,打造线上交友“好管家”

线上交友以其便捷性、广泛性和互动性等特点&#xff0c;正逐渐成为单身男女寻找恋爱伴侣的重要渠道。相较于传统相亲模式&#xff0c;线上交友不仅打破了时间和空间的限制&#xff0c;更以其丰富的互动功能和个性化的匹配算法&#xff0c;为用户提供了前所未有的交友体验。在这…

Python数据分析-航空公司客户满意度分析

一、研究背景 随着航空业的快速发展&#xff0c;航空公司之间的竞争愈发激烈。航空公司不再仅仅依靠价格、航班时间等基本要素来吸引客户&#xff0c;而更多地关注如何提升客户体验与满意度。乘客的飞行体验和满意度不仅影响了他们的忠诚度&#xff0c;也对航空公司在市场中的…

IJKPlayer源码分析-整体结构

根据我们的之前的老方法&#xff0c;采用结构化的方式来对IJKPlayer源码做个分析&#xff0c;首先&#xff0c;我们从整体的角度先把IJKPlayer的整体架构和流程讲下&#xff0c;让大家先有个整体的印象。 本地JNI入口 在Android环境下&#xff0c;JVM层载入一个本地so库流程大致…

在数据库产品中如何设计基于列和行的访问控制功能

在数据库产品中设计基于列和行的访问控制功能&#xff08;Column-Level and Row-Level Access Control, CLAC 和 RLAC&#xff09;是一种细粒度的权限管理方式&#xff0c;能够进一步提升数据安全性和灵活性。通过这种控制&#xff0c;数据库可以限制特定用户或角色只能访问某些…

【C++11】包装器:深入解析与实现技巧

C 包装器&#xff1a;深入解析与实现技巧 个人主页 C专栏 目录 引言包装器的定义与用途C 包装器的常见应用场景实现包装器的技巧使用 RAII 实现资源管理案例分析&#xff1a;智能指针模板包装器的应用包装器与设计模式性能优化更多应用案例总结 引言 C 是一门灵活且强大的语…