传统数据库的数据怎么实时导入到HDFS中

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

注意:这里的传统数据库一般是指传统的关系型数据库,比如Oracle、MySQL、SQL Server、DB2等

将传统数据库实时导入到HDFS的方法一般是两种:

1.准实时的发起增量SQL查询,然后将查询到的增量数据导入到HDFS中
2.实时的监控数据库的增量的日志数据,然后将增量的日志数据实时导入到HDFS中

以下分别看下上面两种方式的流程以及优缺点

准实时的发起增量SQL查询的方式

要从传统数据库将数据导入到HDFS中,那么传统数据库就是数据源(Source),HDFS就是数据的目的地(Sink),看到这里是不是会想起Flume呢。因为我们知道Flume其实是由Source、Channel、Sink三个组件组成的,所以其实是可以使用Flume来实现这个功能的。

但是在Flume的官网并没有发现有传统数据库的Source,但是,Flume支持自定义Source,所以可以自己自定义一个传统数据库的Flume Source。

其实,这个自定义的Source别人已经帮我们实现了,就是:flume-ng-sql-source。这个开源项目中包含了一个SQLSource就是自定义的Flume的Source,这个SQLSource主要的功能就是向传统数据库发起增量的SQL查询,然后将查询出来的增量数据发往到Flume的Channel中,进而可以使用HDFSSink将数据导入到HDFS中。

这种方式的流程其实很简单:
在这里插入图片描述
这种方式优缺点:
优点:配置简单(只需要配置Flume的配置即可),不用编程
缺点
需要在传统数据库中执行查询操作,具有入侵性,会影响源数据库的性能
通过轮询的方式实现增量,只能做到准实时,而且轮询时间越短,对数据库的影响越大
只能识别新增数据,检测不到删除或者更新的数据
要求源数据库必须有用于表示增量的字段

总结
这种方式的缺点多于优点,如果对实时的要求不高,并且对源数据库的影响不关心的话,可以采用这种方式

Spark Streaming也是可以读传统数据库的,而且也可以写HDFS,所以也可以使用Spark Streaming替代掉Flume,如下:
在这里插入图片描述

实时的监控数据库的增量的日志数据

日志数据

首先我们需要知道这个日志数据是什么?当我们向一个传统关系数据库发起insert、update以及delete请求的时候,数据库都会在本地磁盘中记下每次操作的日志,一般称之为redo log,日志内容包括数据更新的内容等信息,这些日志可以用于数据备份或者恢复

Oracle日志详解
MySQL日志详解

数据库的数据更新后都会实时的更新日志数据,那么我们就可以实时的拿到实时更新的日志数据,然后将实时的日志数据同步到HDFS中了

实时抓取日志数据

对于实时抓取Oracle的日志数据,我们可以使用Oracle提供的工具:Oracle GoldenGate
对于实时抓取MySQL的日志数据,我们可以使用阿里提供的工具:Canal

实时同步日志数据到HDFS的流程

Oracle:
在这里插入图片描述
MySQL:
在这里插入图片描述
总结:
优点
不影响源数据库
可以识别新增数据,也可以检测到删除或者更新的数据
不要求源数据库必须有用于表示增量的字段
缺点
需要维护的技术组件就多了,相对来说复杂了
需要写代码,当数据同步到HDFS后,可能还需要解析处理日志数据

猜你喜欢

转载自blog.csdn.net/weixin_42411818/article/details/100579959