百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

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

mhr18 2024-09-18 20:25 27 浏览 0 评论

上篇文章 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 是一个很有效且灵活的工具,大家不妨使用它来从事数据方面的工作。

相关推荐

甲骨文签署多项大型云协议,其一未来可贡献超300亿美元年收入

IT之家7月1日消息,根据甲骨文Oracle当地时间6月30日向美国证券交易委员会(SEC)递交的FORM8-K文件,该企业在始于2025年6月1日的202...

甲骨文获TEMU巨额合同,后者大部分基础设施将迁移至Oracle云

IT之家6月23日消息,Oracle甲骨文创始人、董事长兼首席技术官LarryEllison(拉里埃里森)在本月早些时候的2025财年第四财季和全财年财报电话会议上表示,Oracle...

Spring Boot 自定义数据源设置,这些坑你踩过吗?

你在使用SpringBoot进行后端开发的过程中,是不是也遇到过这样的问题:项目上线后,数据库连接总是不稳定,偶尔还会出现数据读取缓慢的情况,严重影响了用户体验。经过排查,发现很大一部分原因竟然...

一个开箱即用的代码生成器(一个开箱即用的代码生成器是什么)

今天给大家推荐一个好用的代码生成器,名为renren-generator,该项目附带前端页面,可以很方便的选择我们所需要生成代码的表。首先我们通过git工具克隆下来代码(地址见文末),导入idea。...

低代码建模平台-数据挖掘平台(低代码平台的实现方式)

现在来看一下数据连接。·这里是管理数据连接的空间,点击这里可以新增一个数据连接。·输入连接名称,然后输入url,是通过gdbc的方式去连接的数据库,目前是支持mysql、oracle以及国产数据库达梦...

navicat 17.2.7连接oracle数据库提示加载oracle库失败

系统:macOS15.5navicat版本:navicatpremiumlite17.2.7连接oracle测试报错:加载oracle库失败【解决办法】:放达里面找到程序,显示简介里面勾选“使...

开源“Windows”ReactOS更新:支持全屏应用

IT之家6月17日消息,ReactOS团队昨日(6月16日)在X平台发布系列推文,公布了该系统的最新进展,包括升级Explorer组件,支持全屏应用,从Wine项目引入了...

SSL 推出采用全模拟内置混音技术的模拟调音台Oracle

英国调音台传奇品牌SolidStateLogic宣布推出Oracle——一款采用全模拟内置混音技术的调音台,在紧凑的AWS尺寸机箱内集成了大型调音台的功能。该调音台提供24输入和...

47道网络工程师常见面试题,看看有没有你不会的!

你们好,我的网工朋友。网络工程师面试的时候,都会被问到什么?这个问题其实很泛,一般来说,你肯定要先看明白岗位需求写的是什么。基本上都是围绕公司需要的业务去问的。但不可否认的是,那些最基础的概念,多少也...

汉得信息:发布EBS系统安装启用JWS的高效解决方案

e公司讯,从汉得信息获悉,近日,微软官方宣布InternetExplorer桌面应用程序将于2022年6月15日正式停用。目前大部分客户都是使用IE浏览器打开EBS的Form界面,IE停用后,只能使...

36.9K star ! 推荐一个酷炫低代码开发平台!功能太强!

前言最近在逛github,看看能不能搜罗到一些对自己有帮助的开源软件。不经意间看到一个高star的java开源项目:jeecg-boot。进入在线演示版一看,感叹实在是太牛了!此开源项目不管是给来学习...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

手把手教你在嵌入式设备中使用SQLite3

摘要:数据库是用来存储和管理数据的专用软件,使得管理数据更加安全,方便和高效。数据库对数据的管理的基本单位是表(table),在嵌入式linux中有时候它也需要用到数据库,听起来好难,其实就是几个函数...

JAVA语言基础(java语言基础知识)

一、计算机的基本概念什么是计算机?计算机(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行、自动高速处理海量数据的现代化智能电子设备。由硬件和软件组成、没有安装过任何软件的计算机称...

再见 Navicat!一款开源的 Web 数据库管理工具!

大家好,我是Java陈序员。在日常的开发工作中,常常需要与各种数据库打交道。而为了提高工作效率,常常会使用一些可视化工具进行操作数据库。今天,给大家介绍一款开源的数据库管理工具,无需下载安装软件,基...

取消回复欢迎 发表评论: