Mysql数据实时导入Hive
背景
目前,我公司大数据团队,使用的数据仓库是Hive。
客户端开发团队,使用的数据库是Mysql,客户端上的各种数据都存储在了Mysql中。
每天凌晨,大数据团队会批量把Mysql从库的全部数据导入Hive。
此方案存在的问题是:
- 每天全量导入数据耗时较长,且对集群消耗较大。
- Hive中数据每天更新一次,时效性较低。
- 在批量导入过程中,不能对Hive进行任何操作。
需要解决的问题是:
弃用全量导数据的方式,采用增量导数据。
Hive中数据要近实时更新,包括Mysql表中的增删改数据。
导数据过程中,可以对Hive进行各种操作,且保证数据的一致性。
已有的解决方案及不足:
使用Sqoop,依据Mysql表每条记录中的修改时间戳字段,进行增量导入。
上述解决方案的优势是,简单,易操作,不需要使用新的组件。
Oracle等公司有针对数据库之间数据同步的成套解决方案,包括Mysql到Hive的增量数据导入。
方案1的不足是:
- 需要Mysql表中有修改时间戳字段。
- 增量导入,不能做到近实时性。
方案2的不足是: - 需要购买Oracle公司的整套解决方案,费用昂贵。
- 解决方案不是开源的,维护起来比较困难。
解决方案
Mysql的Binlog日志,记录了Mysql表的增删改查日志。
使用阿里开源的Canal工具,可以实时获取和解析Mysql的Binlog日志。