数据湖:数据库数据迁移工具Sqoop_数据库迁移工具-程序员宅基地

技术标签: 数据湖  sqoop  大数据  

         系列专题:数据湖系列文章


        Sqoop(SQL-to-Hadoop)是Apache旗下的一款开源工具,该项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,并在2013年,独立成为Apache的一个顶级开源项目。

1. 概述

        Apache Sqoop项目旨在协助RDBMS与Hadoop之间进行高效的大数据交流。用户可以在 Sqoop 的帮助下,轻松地把关系型数据库的数据导入到 Hadoop 与其相关的系统 (如HBase和Hive)中;同时也可以把数据从Hadoop系统里抽取并导出到关系型数据库里。

        Sqoop是一个在结构化数据和Hadoop之间进行批量数据迁移的工具,结构化数据可以是MySQL、Oracle等RDBMS。Sqoop底层用MapReduce程序实现抽取、转换、加载,MapReduce天生的特性保证了并行化和高容错率,而且相比Kettle等传统ETL工具,任务跑在Hadoop集群上,减少了ETL服务器资源的使用情况。

        在特定场景下,抽取过程会有很大的性能提升。如果要用Sqoop,必须正确安装并配置Hadoop,因依赖于本地的Hadoop环境启动MR程序;MySQL、Oracle等数据库的JDBC驱动也要放到Sqoop的lib目录下。

        其功能如下图所示

2. Sqoop1和Sqoop2

        目前Sqoop主要分为Sqoop1和Sqoop2两个版本,其中,版本号为1.4.x属于Sqoop1,而版本号为1.99.x的属于Sqoop2。这两个版本开发时的定位方向不同,体系结构具有很大的差异,因此它们之间互不兼容。

        架构方面:

  • Sqoop1:仅仅使用一个Sqoop客户端;
  • Sqoop2:引入了Sqoop Server,对Connector实现了集中的管理,其访问方式也变得多样化了,其可以通过REST API、JAVA API、WEB UI以及CLI控制台方式进行访问。

        安全性能方面:

  • Sqoop1:经常用脚本的方式将HDFS中的数据导入到MySQL中,或者反过来将MySQL数据导入到HDFS中,其中在脚本里边都要显示指定MySQL数据库的用户名和密码的,安全性做的不是太完善。
  • Sqoop2:如果是通过CLI方式访问的话,会有一个交互过程界面,输入的密码信息不被看到,同时Sqoop2引入基于角色的安全机制。

        优缺点:
Sqoop1

  • 优点:架构部署简单;
  • 缺点:命令行方式容易出错,格式紧耦合,无法支持所有数据类型,安全机制不够完善,例如密码暴漏,安装需要root权限,connector必须符合JDBC模型;

Sqoop2

  • 优点:多种交互方式,命令行,Web UI,REST API,Conncetor集中化管理,所有的链接安装在Sqoop Server上,完善权限管理机制,Connector规范化,仅仅负责数据的读写;
  • 缺点:架构稍复杂,配置部署更繁琐。

3. 工作原理

        Sqoop是传统关系数据库服务器与Hadoop间进行数据同步的工具,其底层利用MapReduce并行计算模型以批处理方式加快了数据传输速度,并且具有较好的容错性功能,工作流程如下图所示。

         从上图中可以看出,通过客户端CLI(命令行界面)方式或Java API方式调用Sqoop工具,Sqoop可以将指令转换为对应的MapReduce作业(通常只涉及Map任务,每个Map任务从数据库中读取一片数据,这样多个Map任务实现并发地复制,可以快速地将整个数据复制到HDFS上),然后将关系数据库和Hadoop中的数据进行相互转换,从而完成数据的迁移。

        可以说,Sqoop是关系数据库与Hadoop 之间的数据桥梁,这个桥梁的重要组件是Sgoop连接器,它用于实现与各种关系数据库的连接,从而实现数据的导人和导出操作。

        Sqoop连接器能够支持大多数常用的关系数据库,如MySQL、Oracle、DB2和SQL Server等,同时它还有一个通用的JDBC连接器,用于连接支持JDBC协议的数据库。

3.1 导入原理

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

3.2 导出原理

        在导出数据之前,Sqoop会根据数据库连接字符串来选择一个导出方法,对于大部分系统来说,Sqoop会选择JDBC。Sqoop会根据目标表的定义生成一个Java类,这个生成的类能够从文本中解析出记录数据,并能够向表中插人类型合适的值,然后启动一个MapReduce作业,从HDFS中读取源数据文件,使用生成的类解析出记录,并且执行选定的导出方法。

4. 参考文档

[01] https://blog.csdn.net/suyuan12365/article/details/122409036

[02]https://copyfuture.com/blogs-details/20210316135025527a

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/iamonlyme/article/details/126023505

智能推荐

python modify函数_『Python基础-13』函数 Function-程序员宅基地

文章浏览阅读2.2k次。这篇笔记记录的知识点:函数的基本概念自定义函数函数的几种参数编程的三种方式:1.OOP 面向对象编程,万物皆对象,以class为主,抽象化2.POP 面向过程编程,万事皆过程,def定义过程3.函数式编程,将某种功能封装起来,用的时候直接调用函数名,def定义函数,也叫function/方法/过程/子程序函数的基础概念:函数是一种设计工具,它能让程序员将复杂的系统分解成可管理的部件, 用于将相关功..._python modify函数

前端导出当前页面为PDF或者图片_前端怎样导出整个网页为pdf-程序员宅基地

文章浏览阅读412次。前端导出当前页面为PDF或者图片_前端怎样导出整个网页为pdf

linux grep 正则表达式-程序员宅基地

文章浏览阅读1.1w次,点赞5次,收藏50次。目录1、grep命令2、grep 与正则表达式3、关于匹配的实例4、grep实例1、grep命令功能:输入文件的每一行中查找字符串。基本用法:grep [-acinv] [--color=auto] [-A n] [-B n] '搜寻字符串' 文件名参数说明:-a:将二进制文档以文本方式处理-c:显示匹配次数-i:忽略大小写差异-n:在行首显示行号-A:After的意思,显示匹配字符串后n行的数据-B:before的意思,显示匹配字符串前n行的数据-v:显示_linux grep 正则表达式

电商数据分析17——电商平台评价系统的数据分析与管理_优化业绩评价平台-程序员宅基地

文章浏览阅读1.1k次,点赞22次,收藏18次。在数字经济时代,电商平台已成为消费者购物的首选。随之而来,评价系统作为连接消费者与产品的重要桥梁,对于购买决策和产品改进起着至关重要的作用。通过数据分析来优化评价管理,不仅可以提升产品信誉,还能显著提高销售业绩。本文将深入探讨评价系统的作用、数据分析在评价系统管理中的应用,以及通过实际案例来展示评价系统管理优化的策略。_优化业绩评价平台

在linux中挂载磁盘ext3和ext4之间的区别_linux 命令mount ext3 和 ext4 u盘有什么区别-程序员宅基地

文章浏览阅读1.7k次。转载:https://blog.csdn.net/zhaoyoulin2016/article/details/80221101Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4。 Ext4 是 Ext3 的改进版,修改了 Ext3中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已。Ext4可以提供更佳的性能和可靠性,还有更..._linux 命令mount ext3 和 ext4 u盘有什么区别

专业课知识问答-背诵版-程序员宅基地

文章浏览阅读671次,点赞8次,收藏8次。背背背,不理解怎么背?

随便推点

polar靶场通关笔记_polar swp-程序员宅基地

文章浏览阅读4.3k次,点赞9次,收藏30次。这里是关于自己打polar靶场的小笔记_polar swp

[SV]SystemVerilog数组约束方法总结_大量数据systemverilog中约束constraint 布局-程序员宅基地

文章浏览阅读1w次,点赞14次,收藏87次。SystemVerilog数组约束方法总结 前言:在验证工作中,数组是我们最常用的数据结构之一了,那么如何对数组元素做约束呢?本文将给出一些实战的例子。一、约束动态数组的大小最容易理解的数组约束函数是size(),他可以约束动态数组或者队列的元素个数。class dynamic_size_array(); rand logic [31:0] dyn_array[]; constrain..._大量数据systemverilog中约束constraint 布局

2021-12-19 老杨博客推荐\TCP像串口的多程编写的一个弱鸡版本类MQTT的TCP实现\字典值查键\微PYTHON与PYTHON的JSON区别\以及一个ESP32领导多个ESP8266组网模式_micropython esp32 esp8266 network 区别-程序员宅基地

文章浏览阅读1.3k次。都说程序员最拿手的好戏是复制粘贴,对于这件事我也是深以为然,遇到问题先看看别人,有么有写好的,没有写好的看看类似的,实在不行继续百度群里问问,最后再自己操刀上吧,microPython作为小众的控制器编程模式热度逐步提高,但是普遍水平不高,大部分都是二把刀,三把刀的样子很是娱乐性质,那我先推一推老杨的博客,他算是整的比较系统的了,虽然GIT里边没啥注释,代码也写的比较生硬,好在内容很杂总能翻找一些资料,我个人比较喜欢写博客类似写日志的记录一些内容。因为工作多年了,都是PLC WEB 嵌入式 还有政工写_micropython esp32 esp8266 network 区别

如何提高或者修改WiFi发射功率-程序员宅基地

文章浏览阅读2.6k次。比如MTK系列网卡驱动方案,驱动里边提供了一个.dat的配置文件,配置文件里边有TxPower的选项,(值为0—100,Set Transmit Power by percentage),网卡模块在出厂的时候已经将校准功率值写入EEPROM了,修改TxPower的值可适当微调功率,但默认值为100。如果要提高发射功率那只能修改EEPROM了。每个厂家都有自己的一套修改网卡模块功率值的办法,彻底修改..._mt6762修改wifi功率

Delphi实现对注册表的监视和扫描[转]-程序员宅基地

文章浏览阅读61次。声明:CSDN以外的任合团体和个人转载本文必须注明出处和作者。 Delphi自带的TRegistry类只能实现注册表的基本操作,如果我们要实时监视注册表的变化或者扫描注册表特定项下的所有子项,TRegistry类就无能为力了。我啃了半天SDK,终于实现了Delphi对注册表的监视与扫描,不敢独享,拿来献给广大的Delphi爱好者。 监视注册表相关项的改变要用到一个AP..._api监视注册表变动

C++动态规划经典案例解析之合并石子_c++石子合并优化-程序员宅基地

文章浏览阅读2.3k次,点赞4次,收藏14次。区间类型问题,指求一个数列中某一段区间的值,包括求和、最值等简单或复杂问题。此类问题也适用于动态规划思想。如前缀和就是极简单的区间问题。现给定区间信息[3,6],求区间内所有数字相加结果。即求如下图位置数字之和。区间至少包括2个属性,起始端和结束端,求和范围包含左端和右端数字。累加数组中0~6区间的值s1。累加数组中0~2区间的值s2。将s1中的值减去s2中的值。得到最终结果。如果对任意区间的求解要求较频繁,会存在大量的重复计算。如分别求区间[2,5]和[1,5]之和时,分析可知区间。_c++石子合并优化

推荐文章

热门文章

相关标签