Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/MOBIN-F/Binlog2Hive
MySQL增量数据实时同步到HDFS/Hive
https://github.com/MOBIN-F/Binlog2Hive
Last synced: 14 days ago
JSON representation
MySQL增量数据实时同步到HDFS/Hive
- Host: GitHub
- URL: https://github.com/MOBIN-F/Binlog2Hive
- Owner: MOBIN-F
- Created: 2018-07-24T05:21:45.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2018-07-24T09:15:31.000Z (over 6 years ago)
- Last Synced: 2024-08-01T18:30:33.576Z (3 months ago)
- Language: Java
- Homepage:
- Size: 21.5 KB
- Stars: 11
- Watchers: 2
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## 项目背景
>RDS的数据实时同步到HDFS下,并映射到Hive## 原理
>通过解析RDS的binlog将RDS的增量数据同步到HDFS下,并映射加载到Hive外部分区表由于RDS表中的第二个字段都为datetime字段,所以刚才以该字段作为Hive的分区字段
### 配置文件介绍
* doc/creat table.sql:Hive表的建表语句,除了静态表外,其他全部为天级别外部分区表
* binglog2Hive_conf.properties:里面为所有全部需要同步到HDFS的表
* mysql.properties:Mysql druid连接池配置### 程序说明
binlog解析框架:https://github.com/shyiko/mysql-binlog-connector-java核心类为BinlogClient
1. 程序主要序列化以下几个事件
* TABLE_MAP:包括表名,数据库名
* WRITE_ROWS:包含增量的业务记录2.
* 程序启动时会先从t_position表中获取上次的同步状态,根据上次的同步状态来确定binlog的读取位置
* BinaryLogClient首先对TABLE_MAP事件进行序列化,再结合binlog2Hive_conf.propertiesd配置过滤出我们需要同步的表再对WRITE_ROW事件进行序列化
* 解析WRITE_ROWS时,将存储到ConcurrentHashMap> mapA中
* 解析的记录超过一定阀值option.countInterval后再统一写HDFS文件
* 写HDFS文件时,遍历mapA,根据表名分类,整理成存储到
ConcurrentHashMap> mapB,最后再统一遍历mapB将数据写入到HDFS,写到哪个文件中是根据mapB的key来确定的
* 文件操作类在FSUtils中,写文件时以下三种情况
1. 如果目录不存在就创建文件并将Hive表的分区映射到这个路径下,
2. 文件已存在且文件大小小于250MB就以追加的方式写文件
3. 文件大小超250MB就重新写成另一个新文件,以HDFS_BLOCK_SIZE为标准
* 文件写入成功后将当前的同步状态(binlogfilename,nextposition)更新到t_position表中**项目已经去掉敏感业务信息**