模型表开发流程

目前系统中有三套数据库架构,模型表开发流程 - ftutor - ftutor ops
 最底层的就是常见的数据库:mysql、mongo,这些数据库是业务直接相关的,开发时一般对应于线上、线下两种环境,线上的环境是网站的真实环境,一般只有有限的一部分人才能够接触到线上的数据,而且对于这部分人的跟踪很谨慎,线下的对应开发自测,这部分是伪数据,参考意义不大;第二层架构对应的是hive数据仓库,它基于hadoop 架构,数据的容量很大,环境较稳定,由于hive的底层存储结构是hdfs,hdfs是分布式文件系统,非关系型数据库,它既可以存储关系型表也可以存储非关系型表,非常灵活,只要有需要,我们可以将线上mysql中所有的数据导入到hive中,mysql中数据一般是全量的,很难更细的追踪到表中数据的变化(除非每日进行数据备份,这也是不可靠的,一般互联网公司的网站是24小时都会有访问,数据在备份的过程中还是面临着数据的读写操作,这样可能会导致数据库的死锁,减缓网站的响应速度,并且容易产生数据潜在的不一致性),但是使用hive可以很轻松的对数据库中每个表每天进行灵活的备份,目前有四种类型的表:全量表、快照表、拉链表、增量表,顾名思义,全量表保持和线上数据库同步,快照表每天对线上数据库进行一次同步,也就是每天都会生成一张表,其实对应的是一个partition,增量表一般是为了处理数据量比较大的情况,比如日志表,每天都会记录当天新产生的数据,拉链表和全量表类似。但是hive有数据量大得有点,也存在执行速度缓慢的缺点,非实时性。故引入了第三层数据库架构--greenplum,它是基于postgresql,存储容量远大于mysql、mongo,但是远小于hive,执行速度稍慢mysql、mongo但是远快于hive,它的存在主要是为了报表服务,数据在这三层数据库架构中传输需要符合很多规范,而且存在前后依赖的关系,比如第一层数据结构只能够是第二层数据结构的输入而不能够直接成为第三层数据结构的输入,mysql、mongo数据库传送到hive上能轻易的通过公司提供的平台工具完成,hive ddl/dml和mysql ddl/dml存在大部分相似的地方,这块进行解析不是很难的,本质上是将mysql的建表语句翻译为hive的建表语句,而将hive 中的表导入到greenplum中也难度不大,问题的关键是如何建立独立于mysql 原始表之外的新表,此表即为模型表,模型表是通过将底层的原始表进行关联、数据清洗而获得有用的信息,故模型表的表结构、数据导入需要开发者自己自己去实现。这块才是更个流程的关键,也是bi/数据平台的核心价值所在。

1. 实现测试环境模型表创建

登陆跳板机后,连到模型开发的测试环境,此时就可以写hive建表语句了,ddl语句实现后,直接执行hive -f ddl.sql,就实现在测试环境中创建表了。创建表的时候,由于是考虑到供greenplum使用,最好不要用partition方式,使用全量数据可以节约greenplum数据库使用的空间,但是这个和直接查询线上MySQL没有本质的区别,此处存在一个两难:要想获得历史数据,必须牺牲空间和效率,否则可扩展性比较弱。如果ddl中能够复用hive中某个底层表的数据时,可以使用show create table命令来减少工作量,但是show create table并不能够得到表中字段或者表的comments,这块还是需要手动加入。

2. 实现测试环境模型表数据导入

测试环境的数据和真实线上hive环境是每天同步一次,如果在线上hive环境中创建的表并导入数据后,并不能够立马在测试环境中取到这个表中的数据,此时需要手动出发一个job去同步测试环境和线上hive环境的数据,

测试环境模型表数据导入需要注意:1、表中数据是否要压缩;2、reducer的数量是否需要限制等。

主要是通过insert overwrite来实现的。然后通过canaan命令实现数据的导入。

3. 测试环境通过后,还需要将ddl/dml语句push到代码仓库中。

此时需要制定push分支,一般非master分支而是其他分支,如git push origin master:abc,abc为分支名称,可以随意取名,然后在代码仓库首页创建一个merger request同时制定一个人来accept这个merge request,完成ddl/dml push到线上的代码环境。


4. 将ddl/dml 配置到数据平台中。

4.1 导入dml,此时数据平台能够自动分析dml的依赖表结构,为数据预跑打好基础,接着还需要对人物进行手动启动,才能完成数据导入。

4.2 导入ddl,完成数据表结构的同步,也就是为dml中的数据制定一个destination,因为hive中表的数据和表的定义是分开独立存放的,故才先有表数据,后有表的定义。


5.将dml/ddl导入到greenplum中,此步也是通过数据平台直接导入,不再敖述


评论

© ftutor / Powered by LOFTER