OneClick 数据接入

数据中台 数据  收藏
0 / 72

作者 冰山一角 首发于 暗数据

从今天开始(更新频率一周一篇),我会叙述14年之后从事数据项目的思考,一方面是自己的一个总结,另一方面以飨读者。

全域数据思维

后续文章会汇总数据平台,数据仓库,数据产品(搜索,广告,推荐)等大范围连载自己实践和现在业界主流方案在工程产品等维度的方法。

其中数据仓库是整个环节中的腰部力量,也是近年来业界比较火的数据中台的概念的出发点。 借用数仓建设中的一张模型图。我们衍生发散到根部数据平台,头部数据产品。有了一个全域的数据观,可以指导我们更好的做数据价值变现。

数仓.png

标准化的数据接入层

所以本篇也就先从数据接入层开始讲起。数据接入就是需要把原来异构数据统一接入到hive中,方便后面数仓建模。常见的异构数据有日志数据文件,mysql,oracle,mongodb等。常见的数据同步工具有 sqoop,datax。数据同步的方式有全量快照,增量同步。所以在技术选型上会对比 sqoop,datax 的优缺点

本质是通过 dump 的方式,实现数据的全量同步

功能 DataX Sqoop
运行模式 单进程多线程 MR
MySQL 读写 单机压力大;读写粒度容易控制 mr 模式重,写出错处理麻烦
Hive 读写 单机压力大 很好
文件格式 orc 支持 orc 不支持,可添加
分布式 不支持,可以通过调度系统规避 支持
流控 有流控功能 需要定制
统计信息 已有一些统计,上报需定制 没有,分布式的数据收集不方便
数据校验 在 core 部分有校验功能 没有,分布式的数据收集不方便
监控 需要定制 需要定制
社区 开源活跃,一直有新特性 一直活跃,核心部分变动很少

我们在做技术选型的时候,充分参考了这两个组件的优缺点。最后选择了 datax,并实现了 hive writer、dts reader 等功能。在增量,全量同步上的选择上做了一个数据分析,并确定同步数据量5000万以上,同步时间花费在10分钟以上的采用增量模式。并确定业务数据库名字在数仓系统上都有一个别名与之唯一关联。在数据接入层分层 stage(数据缓冲层),ods(数据落地层)

有了这些标准流程,去实现流程工具化,工具最后产品化,在数据接入层的标准化程度上极大的解放的数据开发的效率。

例如将 mysql 增量同步到 hive 表中,主要是实现以下标准流程。

  1. hive stage层,ods层表结构根据mysql表结构确定(同时对字段类型做转换,对关键字处理)
  2. 数据的增量获取(通过对mysql binlog 订阅消费)
  3. stage 层缓冲的数据跟 ods 历史全量数据合并

第一点实现

通过 mysql information_schema.COLUMNS,information_schema.TABLES 获取对应表信息

select TABLE_SCHEMA ,TABLE_NAME ,COLUMN_NAME ,DATA_TYPE ,COLUMN_TYPE ,COLUMN_COMMENT 
from information_schema.COLUMNS 
where TABLE_SCHEMA = '{0}' and DATA_TYPE not in ('blob') 

第二点实现

通过 canal 模拟 mysql 从库,获取 binlog 数据,otter 将数据sink到rocket mq中

并新增部分关键字段

  • "execute_time", -- 事件落到 mq 中的时间
  • "event_type", -- 事件类型
  • "binlog_name", -- binlog 名字
  • "binlog_position" -- binlog 文件中偏移量

image.png

第三点实现

增量表与历史全量实现 full join 合并生成新的全量表(先 row_number 排序再 full outer join)

数据接入工具产品

image.png

收益

在数据开发的过程中形成标准化的流程,标准的流程工具化,高效的工具产品化推广。

  1. 这个功能极大的提高了数据接入的效率同时兼顾效率
  2. 也让数据开发者告别枯燥的接入工作

均节省单表数据接入时间18分钟(原来需要20分钟)。

dataown