数据仓库的元数据系统需要实时获取最新的Hive表结构,比如用户新建了一张表或新加一个字段,希望能马上在元数据系统里查询到。
实时获取数据,无非是Push或Pull两种模式。考虑几种可能的方案
- Push
- 审计消息:前提是审计日志可以记录所有的Hive,并实时分析出里面的DDL语句,把相应的变更记录到元数据里
- metastore binlog:这个方案实现有点复杂了,binlog的实时消费有较高开发成本
- Pull
- Hive jdbc全量同步:单表同步的执行时间不会快于100ms,全库同步时间比对超过10分钟,不能接受
- 扫描Metastore扫最近DDL表:每次只同步这些表,是一种近实时方案
最终,我们选择了扫描Metastore扫最近DDL表的方案,每半分钟同步一次,可以满足用户查询的实时性要求。为了防止单次同步出错,又在每天凌晨做一次全量同步,这类似于实时计算的Lamda架构。