百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Mysql 与 hadoop 数据同步(迁移),你需要知道 Sqoop

bigegpt 2024-08-28 12:22 10 浏览

上篇文章 Mysql 到 Hbase 数据如何实时同步,强大的 Streamsets 告诉你 我们说到了如何使用 Streamsets 来进行 mysql 到 hbase 的数据实时同步(迁移)。使用 Streamsets 的优点是部署简单,配置灵活,无需编写代码。

认真阅读上篇文章的朋友会发现,Streamsets 能够实时跟踪数据的变化,将数据同步更新到 hbase 中。但是对于历史数据(并且数据不改动的记录)的同步,文章中并没有提及到。当然,并不是因为 Streamsets 不能从事这些事情,而是笔者暂时没有使用它来进行历史数据的迁移。因此,对于历史数据的迁移,笔者今天来介绍另外一个工具 - Sqoop。相对于 Streamsets,大家应该更加熟悉 Sqoop。

如果你工作中需要将关系型数据库(Mysql、Oracle等等)中的数据同步到 hadoop(HDFS、hive、hbase) 中,或者将 hadoop 中的数据同步到关系型数据库中,那这篇文章应该能帮助到你。

注:Streamsets 以及 Sqoop 都属于数据同步、迁移方面比较流行的解决方案,类似的工具还有很多,比如 Datax、kettle 等等,从事数据方面工作的朋友可以去多多了解,找到适合自己工作场景的方案。

认识一下

Sqoop 的命名,仔细一看是不是有点像 sql 和 hadoop 两个词语的拼接产物。其实从它的命名来看也就很明显:它是用来将关系型数据库和 Hadoop 中的数据进行相互转移的工具,并且这种转换是双向的。看下图就能一目了然:

从关系型数据库到 hadoop 我们称之为 import,从 hadoop 到关系型数据库我们称之为 export。文章后面大家就会看到 "import"、"export" 对应命令的两个模式。

安装

对于 Sqoop 的安装,这里就不做介绍了,网上有很多的教程,因为是一个工具,所以安装起来也是很方便简单。需要注意的是 Sqoop 有两个大的版本:Sqoop1、Sqoop2。

访问 Sqoop 官网 ,官网上的 1.4.x 的为 Sqoop1, 1.99.* 为 Sqoop2。

关于 Sqoop1 与 Sqoop2 的区别,通俗来讲就是:

  1. sqoop1 只是一个客户端工具,Sqoop2 加入了 Server 来集中化管理连接器
  2. Sqoop1 通过命令行来工作,工作方式单一,Sqoop2 则有更多的方式来工作,比如 REST api接口、Web 页
  3. Sqoop2 加入权限安全机制

对于笔者来说,Sqoop 就是一个同步工具,命令行足够满足工作需求,并且大部分数据同步都是在同一个局域网内部(也就没有数据安全之类问题),所以选择的是 Sqoop1(具体版本是 1.4.6)

框架原理

通过上图可以看出, Sqoop Client 通过 shell 命令来使用 sqoop, sqoop 中的 Task Translater 将命令转换成 hadoop 中的 mapreduce 任务进行具体的数据操作。可以这样理解,例如 Mysql 中某个表数据同步到 hadoop 这个场景,Sqoop 会将表记录分成多份,每份分到各自 mapper 中去进行落地 hadoop(保证同步效率)。大家可能发现,其实这里的 mapreduce 没有 reduce,只有 map。

实操

了解了 Sqoop 是什么,能做什么以及大概的框架原理,接下来我们直接使用 Sqoop 命令来感受一下使用 Sqoop 是如何简单及有效。本文案例中的关系型数据库使用的是 mysql,oracle 以及其他使用 jdbc 连接的关系型数据库操作类似,差别不大。

运行 sqoop help 可以看到 Sqoop 提供了哪些操作,如下图

这些操作其实都会一一对应到 sqoop bin 目录下的一个个可运行脚本文件,如果想了解细节,可以打开这些脚本进行查看

工作中一般常用的几个操作或者命令如下:

  1. list-databases : 查看有哪些数据库
  2. list-tables : 查看数据库中有哪些表
  3. import : 关系型数据库到 hadoop 数据同步
  4. export : hadoop 到关系型数据库数据同步
  5. version :查看 Sqoop 版本

列出数据库

sqoop list-databases --connect jdbc:mysql://192.168.1.123:3306/ --username root --password 12345678

列出表

sqoop list-databases --connect jdbc:mysql://192.168.1.123:3306/databasename --username root --password 12345678

mysql 到 hdfs

sqoop import
--connect jdbc:mysql://192.168.1.123:3306/databasename
--username root
--password 12345678
--table tablename
--target-dir /hadoopDir/
--fields-terminalted-by '\t'
-m 1
--check-column id
--last-value num
--incremental append

--connect : 数据库的 JDBC URL,后面的 databasename 想要连接的数据库名称

--table : 数据库表

--username : 数据库用户名

--password : 数据库密码

--target-dir : HDFS 目标目录

--fields-terminated-by :数据导入后每个字段之间的分隔符

-m :mapper 的并发数量

--check-column : 指定增量导入时的参考列,这里是 id (主键)

--last-value : 上一次导入的最后一个值

--incremental append :导入方式为增量

注意:工作中需要增量同步的场景下,我们就可以使用 --incremental append 以及 --last-value。比如这里我们使用 id 来作为参考列,如果上次同步到了 1000, 这次我们想只同步新的数据,就可以带上参数 --last-value 1000。

mysql 到 hive

使用 imort --create-hive-table

--create-hive-table 
-m 1 
--connect jdbc:mysql://192.168.1.123:3306/databasename
--username root 
--password 12345678 
--table tablename
--hive-import 
--hive-database databasename_hive 
--hive-overwrite 
--hive-table tablename_hive

mysql 到 hbase

hbase shell
create_namespace 'database_tmp'
create 'database_tmp:table_tmp','info'
sqoop import 
--connect jdbc:mysql://192.168.1.123:3306/databasename
--username 'root' 
--password '12345678' 
--table 'tablename' 
--hbase-table 'database_tmp:table_tmp' 
--hbase-row-key 'id' 
--column-family 'info'

首先进入 hbase shell,创建好 namespace 以及 数据库。databasetmp 位命名空间,tabletmp 为数据库。

hdfs 到 mysql

sqoop export
--connect jdbc:mysql://192.168.1.123:3306/databasename
--username root
--password '12345678' 
--table tablename
--m 1
--export-dir /hadoopDir/
--input-fields-terminated-by '\t'
--columns="column1,column2"

--columns : 制定导出哪些列

hive 到 mysql

了解 hive 的朋友都知道,hive 的真实数据其实就是 hdfs 磁盘上的数据,所以 hive 到 mysql 的同步操作与 hdfs 到 mysql 的操作类似

hbase 到 mysql

目前 Sqoop 没有提供直接将 hbase 数据同步到 mysql 的操作

总结: 在 sql to hadoop 和 hadoop to sql 这种数据同步场景,Sqoop 是一个很有效且灵活的工具,大家不妨使用它来从事数据方面的工作。

相关推荐

或者这些Joplin插件也可以帮助你的笔记应用再一次强大

写在前面距离上次分享《搭建私有全平台多端同步笔记,群晖NAS自建JoplinServer服务》已过去一段时间,大家是否开始使用起来了呢?如果你和我一样已经使用过Joplin有一段时间了,那或许你也会...

Three.JS教程4 threejs中的辅助类

一、辅助类简介Three.js提供了一些辅助类(Helpers)以帮助我们更容易地调试、可视化场景中的元素。ArrowHelepr:创建箭头辅助器;AxisHelper:创建坐标轴辅助器;BoxH...

第2章 还记得点、线、面吗(二)(第二章还能敲钟吗)

glbgltf模型(webvrmodel)-gltf模型下载定制,glb模型下载定制,三维项目电商网站在线三维展示,usdz格式,vr模型网,网页VR模型下载,三维模型下载,webgl网页模型下载我...

如何检查Linux系统硬件信息?从CPU到显卡,一网打尽!

你可能会问:“我为什么要关心硬件信息?”答案很简单:硬件是Linux系统的根基,了解它可以帮你解决很多实际问题。比如:性能调优:知道CPU核心数和内存大小,才能更好地调整程序运行参数。故障排查:系统卡...

SpriteJS:图形库造轮子的那些事儿

从2017年到2020年,我花了大约4年的时间,从零到一,实现了一个可切换WebGL和Canvas2D渲染的,跨平台支持浏览器、SSR、小程序,基于DOM结构和支持响应式的,高...

平时积累的FPGA知识点(6)(fpga经典应用100例)

平时在FPGA群聊等积累的FPGA知识点,第六期:1万兆网接口,发三十万包,会出现掉几包的情况,为什么?原因:没做时钟约束,万兆网接口的实现,本质上都是高速serdes,用IP的话,IP会自带约束。...

芯片逻辑调度框架设计 都需要那些那些软件工具

设计芯片逻辑调度框架通常需要使用以下软件工具:1.逻辑设计工具:例如Vivado、Quartus、SynopsysDesignCompiler等,用于设计和实现逻辑电路。2.仿真工具:例如Mo...

ZYNQ与DSP之间EMIF16通信(正点原子领航者zynq之fpga开发指南v3)

本文主要介绍说明XQ6657Z35-EVM高速数据处理评估板ZYNQ与DSP之间EMIF16通信的功能、使用步骤以及各个例程的运行效果。[基于TIKeyStone架构C6000系列TMS320C6...

好课推荐:从零开始大战FPGA(从零开始的冒险4399)

从零开始大战FPGA引子:本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“...

业界第一个真正意义上开源100 Gbps NIC Corundum介绍

来源:内容由「网络交换FPGA」编译自「FCCM2020」,谢谢。FCCM2020在5月4日开始线上举行,对外免费。我们有幸聆听了其中一个有关100G开源NIC的介绍,我们对该文章进行了翻译,并对其中...

高层次综合:解锁FPGA广阔应用的最后一块拼图

我们为什么需要高层次综合高层次综合(High-levelSynthesis)简称HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。所谓的高层次语言,包括C、C++...

Xilinx文档编号及其内容索引(部分)

Xilinx文档的数量非常多。即使全职从事FPGA相关工作,没有几年时间不可能对器件特性、应用、注意事项等等有较为全面的了解。本文记录了我自使用Xilinx系列FPGA以来或精读、或翻阅、或查询过的文...

Xilinx Vivado联合Modelsim软件仿真

引言:Xilinx公司Vivado开发软件自带仿真工具,可以实现一般性能的FPGA软件仿真测试,其测试执行效率以及性能都不如第三方专用仿真软件Modelsim强。本文我们介绍下如何进行Vivado20...

体育动画直播是怎么做出来的?从数据到虚拟赛场的科技魔法!

你是否见过这样的比赛直播?没有真实球员,却能看梅西带球突破?足球比赛变成动画版,但数据100%真实?电竞比赛用虚拟形象直播,选手操作实时同步?这就是体育动画直播——一种融合实时数据、游戏引擎和AI的...

Dialogue between CPC and political parties of neighboring countries held in Beijing

BEIJING,May26(Xinhua)--TheCommunistPartyofChina(CPC)inDialoguewithPoliticalPartiesof...