【Hadoop大数据技术】——Sqoop数据迁移(学习笔记)

news2025/1/15 13:06:03

📖 前言:在实际开发中,有时候需要将HDFS或Hive上的数据导出到传统关系型数据库中(如MySQL、Oracle等),或者将传统关系型数据库中的数据导入到HDFS或Hive上,如果通过人工手动进行数据迁移的话,就会显得非常麻烦。为此,可使用Apache提供的Sqoop工具进行数据迁移。
在这里插入图片描述


目录

  • 🕒 1. Sqoop概述
    • 🕘 1.1 Sqoop简介
    • 🕘 1.2 Sqoop原理
  • 🕒 2. Sqoop安装配置
  • 🕒 3. 课后习题

🕒 1. Sqoop概述

🕘 1.1 Sqoop简介

Sqoop是Apache的一款开源工具,Sqoop主要用于在Hadoop和关系数据库或大型机之间传输数据,可以使用Sqoop工具将数据从关系数据库管理系统导入(import)到Hadoop分布式文件系统中,或者将Hadoop中的数据转换导出(export)到关系数据库管理系统。

在这里插入图片描述

目前Sqoop主要分为Sqoop1和Sqoop2两个版本,其中版本号为1.4.x属于Sqoop1,版本号为1.9.x属于Sqoop2。这两个版本的定位方向不同,体系结构具有很大的差异,它们之间互不兼容。Sqoop1相对于Sqoop2来说结构简单,易于部署和使用。

🕘 1.2 Sqoop原理

Sqoop是关系型数据库与Hadoop间进行数据同步的工具,其底层利用MapReduce并行计算模型以批处理方式加快数据传输速度,并且具有较好的容错性功能,以实现数据的导入和导出。在数据同步的过程中,MapReduce通常只涉及MapTask的处理,并不会涉及ReduceTask的处理,这是因为数据同步时,只涉及数据的读取与加载,并不会涉及到数据合并的操作。

在这里插入图片描述

导入原理:在导入数据之前,Sqoop使用JDBC检查导入的数据表,检索出表中的所有列以及列的SQL数据类型,并将这些SQL类型映射为Java数据类型,在转换后的MapReduce应用中使用这些对应的Java类型来保存字段的值,Sqoop的代码生成器使用这些信息来创建对应表的类,用于保存从表中抽取的记录。

导出原理:在导出数据前,Sqoop会根据目标表的定义生成一个Java类,这个生成的类能够从文本中解析出记录数据,并能够向表中插入类型合适的值,然后启动一个MapReduce作业,从HDFS中读取源数据文件,使用生成的类解析出记录,并且执行选定的导出方法。

🕒 2. Sqoop安装配置

1、Sqoop的下载
在Ubuntu下打开官网:🔎 Sqoop官网 进行下载,建议下载稳定版本 🔎 sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

2、解压安装包sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz 至路径 /opt,命令如下:

sudo tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /opt

3、将解压的文件夹重命名为sqoop并添加sqoop的权限

sudo mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop
sudo chown -R hadoop:hadoop sqoop

4、修改配置文件
将/opt/sqoop/conf目录下的配置文件sqoop-env-template.sh复制一份,重命名为sqoop-env.sh,命令如下:

cd /opt/sqoop/conf
cp sqoop-env-template.sh sqoop-env.sh
sudo vim sqoop-env.sh

5、使用vim编辑器编辑sqoop-env.sh文件,找到Hadoop环境变量的配置说明,根据自己Hadoop和HBase路径,添加如下配置信息:

#Set Hadoop-specific environment variables here.
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/usr/local/hadoop
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/usr/local/hadoop
#set the path to where bin/hbase is available
export HBASE_HOME=
#Set the path to where bin/hive is available
export HIVE_HOME=/usr/local/hive
#Set the path for where zookeper config dir is
#export ZOOCFGDIR= # 如果自己配置了zookeeper,也需要在此配置zookeeper路径,没有就不用配置。

6、配置环境变量,使用vim编辑器打开.bashrc文件,在文件开头加入如下3行代码:

export SQOOP_HOME=/opt/sqoop
export CLASSPATH=$CLASSPASS:$SQOOP_HOME/lib
export PATH=$SQOOP_HOME/bin:$PATH

7、保存.bashrc文件并退出vim编辑器。然后,继续执行如下命令让.bashrc文件的配置立即生效:

source ~/.bashrc

8、添加mysql驱动程序。首先需要安装MySQL,前面章节已经完成该软件的安装,这里不再重复。然后需要将前面章节中已经下载的MySQL驱动程序mysql-connector-j-8.3.0.tar.gz解压缩后复制到$SQOOP_HOME/lib目录下。

sudo tar -zxvf mysql-connector-j-8.3.0.tar.gz
cp ./mysql-connector-j-8.3.0/mysql-connector-j-8.3.0.jar /opt/sqoop/lib

9、添加依赖包,使用Sqoop进行数据导入和数据导出的操作时,依赖于jar包commons-lang-2.6.jar和hive-common-3.1.3.jar,需要将改jar包上传到Sqoop安装目录的lib目录下。

🔎 commons-lang-2.6.jar

sudo tar -zxvf commons-lang-2.6-bin.tar.gz
cp ./commons-lang-2.6/commons-lang-2.6.jar /opt/sqoop/lib

cp /usr/local/hive/lib/hive-common-3.1.3.jar /opt/sqoop/lib

10、测试与MySQL的连接
首先保证MySQL服务已经启动,如果没有启动,请执行如下命令:

service mysql start

然后就可以测试Sqoop与MySql直接的连接是否成功,执行命令如下:

sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username root -P

在这里插入图片描述
如果能够看到MySql数据库中的数据库列表,就表示Sqoop安装成功。例如,从上图给出的信息中就可以看到在最后几行包含了如下数据库列表:
mysql
information_schema
performance_schema
sys
hive

🕒 3. 课后习题

一、填空题
1、从数据库导入HDFS时,指定以制表符作为字段分隔符参数是_____________。

二、判断题
1、Sqoop是关系型数据库与Hadoop之间的数据桥梁,这个桥梁的重要组件是Sqoop连接器。
2、Sqoop从Hive表导出MySQL表时,首先需要在MySQL中创建表结构。
3、–target-dir参数是指定HDFS目标目录地址,因此需要提前创建目标文件。

三、选择题
1、下列选项参数是Sqoop指令的是?(多选)
A、import
B、output
C、input
D、export
2、下列语句描述错误的是()
A、可以通过CLI方式、Java API方式调用Sqoop
B、Sqoop底层会将Sqoop命令转换为MapReduce任务,并通过Sqoop连接器进行数据的导入导出操作。
C、Sqoop是独立的数据迁移工具,可以在任何系统上执行。
D、如果在Hadoop分布式集群环境下,连接MySQL服务器参数不能是localhost或127.0.0.1。

四、编程题
1、利用Sqoop将test数据库中的user表中id>5的用户导入到HDFS中的/user目录(user表字段:id,name)。
2、利用Sqoop将test数据库中的emp表导入Hive表hive.emp_test表中。

解答:
一、1、--fields-terminated-by '\t'

二、1、√ 2、√ 3、×

三、1、AD 2、C

四、1、
在这里插入图片描述

sqoop import \
--connect jdbc:mysql://127.0.0.1:3306/test \
--username root \
--password 1111 \
--target-dir /user/sqoop \
--query 'SELECT id,name FROM user WHERE id>5 AND $CONDITIONS' \
--num-mappers 1 \
--bindir /opt/sqoop/lib

在这里插入图片描述

如果有如下报错,参考链接解决
在这里插入图片描述
🔎 使用sqoop将mysql数据上传至hdfs出现找不到类的问题

2、
在这里插入图片描述

sqoop import \
--connect jdbc:mysql://127.0.0.1:3306/test \
--username root \
--password 1111 \
--table emp \
--hive-table hive_emp_test \
--create-hive-table \
--hive-import \
--num-mappers 1 \
--bindir /opt/sqoop/lib

在这里插入图片描述


OK,以上就是本期知识点“Sqoop数据迁移”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~

❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

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

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

相关文章

微博聚类文本分析和可视化

本文使用python抓取微博数据并对微博文本分析和可视化,LDA(树图)、关系图、词云、时间趋势(折线图)、热度地图、词典情感分析(饼图和3D柱状图)、词向量神经网络情感分析、tfidf聚类、词向量聚类…

go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控

Linux中的tail命令 tail 命令是一个在 Unix/Linux 操作系统上用来显示文件末尾内容的命令。它可以显示文件的最后几行内容,默认情况下显示文件的最后 10 行。tail 命令 非常有用,特别是在我们查看日志文件或者监视文件变化时。 基本用法如下&#xff1a…

搭建sql-lab出现的php不兼容

下载不了的时候,直接打开该网址下载5.xphp版本,解压到C:\php_studyv8\phpstudy\phpstudy_pro\Extensions\php(可能路径都不一样,找到Extensions\php放到该目录下)

Excel模板导入、导出工具类

1.引入maven依赖&#xff0c;利用hutool的excel读取 Hutool-poi对excel读取、写入 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency> <depen…

期权小知识科普

期权的交易时间 上交所期权合约的交易时间为每个交易日9:15至9:25、9:30至11:30、13&#xff1a;00至15:00。 其中&#xff0c;9:15至9:25为开盘集合竞价时间&#xff0c;14:57-15:00为收盘集合竞价时间&#xff0c;其余时段为连续竞价时间&#xff0c;交易所规则另有规定的除…

后台管理系统加水印(react)

效果 代码图片 代码 window.waterMark function (config) {var defaultConfig {content: 我是水印,fontSize: 16px,opacity: 0.3,rotate: -15,color: #ADADAD,modalId: J_waterMarkModalByXHMAndDHL,};config Object.assign({}, defaultConfig, config);var existMarkModal…

Hadoop3:大数据的基本介绍

一、什么是大数据 1、大数据的4v特点 Volume&#xff08;大量&#xff09; Velocity&#xff08;高速&#xff09; Variety&#xff08;多样&#xff09; Value&#xff08;低价值密度&#xff09; 2、大数据部门间的工作岗位 第三部分&#xff0c;其实就是JavaWeb 二、…

李沐53_语言模型——自学笔记

语言模型 1.预测文本序列出现的概率 2.应用在做预训练模型 3.生成文本&#xff0c;给定前面几个词&#xff0c;不断生成后续文本 4.判断多个序列中哪个更常见 真实数据集的统计 《时光机器》数据集构建词表&#xff0c; 并打印前10个最常用的&#xff08;频率最高的&…

4.4 @ControllerAdvice全局数据处理

顾名思义&#xff0c;&#xff20;ControllerAdvice 就是&#xff20;Controller 增强版。&#xff20;ControllerAdvice 主要用来处理全 局数据 ,一般搭配&#xff20;ExceptionHandler、&#xff20;ModelAttribute 及&#xff20;InitBinder 使用。 1. 全局异常处理&#x…

密文字段模糊检索方案

代码地址: https://github.com/zuiyu-main/EncryptDemo https://mp.weixin.qq.com/s/cXOg1tiMtJz2eibDZmXHUQ 在个别特殊领域中&#xff0c;数据的安全问题是非常的重要的&#xff0c;所以需要数据库存储的数据是需要加密存储的。所以也就引申出来本文这个问题&#xff0c;加密…

【C语言__动态内存管理__复习篇6】

目录 前言 一、动态内存管理 二、动态内存函数 2.1 malloc 2.2 free 2.3 calloc 2.4 realloc 三、动态内存常见的6个使用错误 3.1 接收malloc/calloc返回的参数后未及时检查是否为NULL 3.2 越界访问动态内存空间 3.3 对非动态开辟的内存使用free释放 3.4 使用free只释放了…

STM32学习和实践笔记(17):STM32外部中断(EXTI)的整体介绍

1.外部中断介绍 1.1 EXTI简介 STM32F10x外部中断/事件控制器&#xff08;EXTI&#xff09;包含多达 20 个用于产生事件/中断请求的边沿检测器。&#xff08;事件与中断的区别&#xff0c;可参看STM32---中断与事件的区别_中断和事件的区别-CSDN博客&#xff09; 具体有哪些&a…

蓝桥杯2024年第十五届省赛真题-爬山

贪心优先队列的题&#xff0c;贪心会漏一个情况&#xff0c;不知道怎么处理&#xff0c;这里直接打表了 2 1 1 48 49 答案是30&#xff0c;贪心是31 专有名词&#xff1a;hack-有新的测试点过不了 #include<bits/stdc.h> using namespace std; #define endl \n #define …

AI容器化部署开发尝试 (一)(Pycharm连接docker,并部署django测试)

注意&#xff1a;从 Docker 19.03 开始&#xff0c;Docker 引入了对 NVIDIA GPU 的原生支持&#xff0c;因此若AI要调用GPU算力的话docker版本也是有要求的&#xff0c;后面博客测试。 当然本篇博客还没设计到GPU的调用&#xff0c;主要Pycharm加Anaconda的方案用习惯了&#…

【配电网故障定位】基于二进制矮猫鼬优化算法的配电网故障定位 33节点配电系统故障定位【Matlab代码#82】

文章目录 【获取资源请见文章第6节&#xff1a;资源获取】1. 配电网故障定位2. 二进制矮猫鼬优化算法3. 算例展示4. 部分代码展示5. 仿真结果展示6. 资源获取 【获取资源请见文章第6节&#xff1a;资源获取】 1. 配电网故障定位 配电系统故障定位&#xff0c;即在配电网络发生…

JavaScript算数运算符

源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> <b…

mars3d实现禁止地图移动,禁止地图左右平移,但是鼠标可以移动的效果。

new mars3d.layer.GeoJsonLayer({渲染后实现鼠标左键按住不释放拖动时&#xff0c;地图不跟着拖动效果 当前问题&#xff1a; 1.在map初始化&#xff0c;或者是加载效果的时候&#xff0c;整个地球的场景都是一样的。 如果鼠标左键按住不释放&#xff0c;在屏幕上拖动的时候…

软考136-上午题-【软件工程】-风险管理

一、风险管理 般认为软件风险包含两个特性&#xff1a;不确定性、损失。不确定性是指风险可能发生也可能不发生&#xff1b;损失是指如果风险发生&#xff0c;就会产生恶性后果。 在进行风险分析时&#xff0c;重要的是量化每个风险的不确定程度和损失程度。为了实现这一点&a…

Ceph学习 -11.块存储RBD接口

文章目录 RBD接口1.基础知识1.1 基础知识1.2 简单实践1.3 小结 2.镜像管理2.1 基础知识2.2 简单实践2.3 小结 3.镜像实践3.1 基础知识3.2 简单实践3.3 小结 4.容量管理4.1 基础知识4.2 简单实践4.3 小结 5.快照管理5.1 基础知识5.2 简单实践5.3 小结 6.快照分层6.1 基础知识6.2…

基于SSM的平面设计课程在线学习平台系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的平面设计课程在线学习平台系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;…