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

注意:这里的传统数据库一般是指传统的关系型数据库,比如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中。
这种方式的流程其实很简单:
传统数据库的数据怎么实时导入到HDFS中
文章图片

这种方式优缺点:
优点:配置简单(只需要配置Flume的配置即可),不用编程
缺点:
需要在传统数据库中执行查询操作,具有入侵性,会影响源数据库的性能
通过轮询的方式实现增量,只能做到准实时,而且轮询时间越短,对数据库的影响越大
只能识别新增数据,检测不到删除或者更新的数据
要求源数据库必须有用于表示增量的字段
总结
这种方式的缺点多于优点,如果对实时的要求不高,并且对源数据库的影响不关心的话,可以采用这种方式
Spark Streaming也是可以读传统数据库的,而且也可以写HDFS,所以也可以使用Spark Streaming替代掉Flume,如下:
传统数据库的数据怎么实时导入到HDFS中
文章图片

实时的监控数据库的增量的日志数据 日志数据 首先我们需要知道这个日志数据是什么?当我们向一个传统关系数据库发起insert、update以及delete请求的时候,数据库都会在本地磁盘中记下每次操作的日志,一般称之为redo log,日志内容包括数据更新的内容等信息,这些日志可以用于数据备份或者恢复
Oracle日志详解
MySQL日志详解
数据库的数据更新后都会实时的更新日志数据,那么我们就可以实时的拿到实时更新的日志数据,然后将实时的日志数据同步到HDFS中了
实时抓取日志数据 对于实时抓取Oracle的日志数据,我们可以使用Oracle提供的工具:Oracle GoldenGate
对于实时抓取MySQL的日志数据,我们可以使用阿里提供的工具:Canal
实时同步日志数据到HDFS的流程 【传统数据库的数据怎么实时导入到HDFS中】Oracle:
传统数据库的数据怎么实时导入到HDFS中
文章图片

MySQL:
传统数据库的数据怎么实时导入到HDFS中
文章图片

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

    推荐阅读