百分点高级研发工程师王高飞:如何破解智能数据平台的构建困局?
企业数据的爆发式增长,然而一站式的智能化 数据平台 发展现状并不理想,开发人员疲于各种新技术的学习和大量需求的实现,而忽视了智能化数据平台的建设。
因此,工欲善其事,必先利其器,这里的“器”就是基于领先的思维和意识,再加上先进的技术打造的。一个是思想和意识方面的东西,一个是技术方面的东西,它们相辅相成。当这些“智能化”的工具越来越多,形成一个完整的闭环,则智能化的数据平台也就诞生了。
百分点基于数据处理的核心语义ER、DQ和ETL的形式化描述,结合企业实际数据处理场景和通用数据处理的最佳实践对其标准化,通过先进的算法对用户基于数据处理核心语义的描述进行统一解释,达到屏蔽技术差异、降低开发难度、缩减试错成本和重用历史经验等目的。
本文开篇通过科学管理理论实验,阐述现实世界如何实现形式化、标准化、智能化和协同化,再类比计算机世界,对数据处理现状和过程进行分析,最后以数据处理的ETL过程进行剖析,说明计算机世界如何形式化、标准化、智能化和协同化。
由一个科学管理理论实验说起
首先,我通过一个小实验开篇,来展开后续的介绍。实验是存在于现实世界的,而计算机世界的许多概念都是由现实世界演化而来的。
搬铁块实验:
1898年,弗雷德里克·温斯洛·泰勒从伯利恒钢铁厂开始他的实验。这个工厂的原材料是由一组记日工搬运的,工人每天挣1.15美元,每天搬运的铁块重量有12~13吨,对工人的奖励和惩罚的方法就是找工人谈话或者开除。后来泰勒观察研究了75名工人,从中挑出了四个,又对这四个人进行了研究,调查了他们的背景、习惯和抱负,最后挑了一个叫施密特的人,这个人非常爱财并且很小气。泰勒要求这个人按照新的要求工作,每天给他3.85美元的报酬。
通过仔细地研究,使其转换各种工作因素,来观察他们对生产效率的影响。例如,有时工人弯腰搬运,有时他们又直腰搬运,后来他又观察了行走的速度,持握的位置和其他的变量。通过长时间的观察试验,泰勒把劳动时间和休息时间很好地搭配起来,工人每天的工作量可以提高到47吨,同时并不会感到太疲劳。他也采用了计件工资制,工人每天搬运量达到47吨后,工资也升到3.85美元。这样施密特开始工作后,第一天很早就搬完了47.5吨,拿到了3.85美元的工资。于是其他工人也渐渐按照这种方法来搬运了,劳动生产率提高了很多。
在这个小实验中,泰勒对车间内工人搬运原材料进行观察,对搬运动作进行分析,制定中搬运原材料的标准动作,供其他员工学习,从而大大提高了生产力。现代的生产车间,不仅对工人单个任务进行标准化以提高生产率,必要时会引入更加智能化的机器来替代工人进行工作,而且对不同工序的进行编排以提高整体效率。这在某种程度上表现了现代生产车间的标准化、智能化和协同化。
这也是今天要讨论建设智能数据平台的原因。
目前来说,无论是业务部门还是技术部门,在数据处理工作中都会遇到各种各样的难题。
业务人员的痛点:
1.数据模型难以理解
2.计算和指标混乱
3.缺乏自助开发能力
4.业务更新和技术实现速度差异太大
技术人员痛点:
1.编写脚本门槛高、效率低
2.开发试错成本过高
3.高级工程师“能者多劳”
4.历史经验缺乏重用
5.版本控制复杂
6.团队协作困难
对管理者来说,要实现哪些数据平台目标?
1.缩短项目建设周期,降低项目成本与风险
2.降低开发难度,提高开发效率,减少人才依赖
3.基于元数据语义对数据全生命周期进行管控
4.强制实施标准,提升BI建设质量
5.加快业务响应能力,降低技术人员工作量
6.降低需求变更成本
7.加强团队协作
8.提升血缘分析和审计追踪的能力
9.提升版本控制能力
如何破解困局?
我们认为,思维领先性、意识领先性和技术领先性是促进优秀数据平台诞生的决定因素。
当技术达到一定的高度后,产品的发展更靠思维和意识来驱动。比如MapReduce框架的产生过程,最初人们都在尝试用更先进的语言、更快速的机器和更灵活的算法实现来加速数据的处理过程。这些人都拥有非常出色的技术,但是如果没有有意识地去分析目前数据处理的问题,去想如何才能进行大任务拆分、分布式计算再进行结果整合的通用方法,MapReduce框架就不会产生。
再者,现在在传统数据库数据采集过程中,大家都会使用ETL工具进行。ETL工具虽然对数据导入过程进行抽象,但是大量的ETL类似实现也是非常大的工作量,并且标准化程度低,准确性差。如果基于ER元数据和用户自定义规则,使用“智能化”的“机器人程序员”批量产生相应的ETL过程,则能够产生事半功倍的效果。虽然数据采集的ETL任务简单,但是对于复杂的ETL过程,也可以进行分解,达到模式重用的效果。
ER、DQ和ETL语义是智能化数据平台核心要素的形式化描述,就像实验中的人(管理者和工人等)、设备(不同型号的铲子等)、原料(铁块等)、工艺标准和工序(搬运过程和交货过程等)等,这是智能化数据平台的基础。这些核心语义元素拥有形式化的描述后,则需要对之前的数据处理流程进行分解和分析,标准化各种核心语义元素。
对于用户来讲,开发尽可能地接近仅描述现实和需求,复杂的实现过程则由专用的处理引擎翻译用户对现实和需求的描述,生成相应的适用于不同数据处理引擎的脚本并执行。通过这种方式,屏蔽了各种脚本语言的差异,降低了用户开发的难度。
回顾数据平台发展阶段
随着各行业信息化建设的飞速发展,累积的数据量越来越大,数据处理的需求急剧增长,数据处理平台经历了三个阶段:
目前,百分点数据平台、阿里数加平台、京东数据平台等初步踏入高级阶段。基于ER(实体和关系模型)、DQ(数据质量)和ETL(抽取、转换和加载)语义,打破传统的数据平台构建方案,采用更加智能化、精细化、高效化和自动化的建设理念和方法论,融合先进的流程管理理念和成熟的数据处理技术,构建覆盖数据全生命周期的端到端的数据解决方案。该阶段的核心理念在于形式化、标准化、智能化和协同化。
形式化: 所有数据处理相关的概念必须能够用相应模型来表示,这是基于元数据驱动的基础。
标准化: 标准化不仅表现在流程的标准化上,也表现在组件的标准化上。标准化的目的是降低复杂性,提高复用性。
智能化: 对于重复的、繁琐的和易出错的任务,采用形式化模型和相应的个性化配置,再加上相应的驱动模块来完成,从而达到程序复用,降低人员和时间成本。智能化的数据平台则是由系统化的驱动模块来构建的。在此需要注意的是,智能化是一种理念、一种意识和一种思路。如果缺乏对智能化的足够认知,则容易出现“能者多劳”和“人浮于事”的现象。
协同化: 现代社会不是“单兵作战”的时代,而是讲究团队协作的时代。数据平台不仅要考虑横向的协作,而且在考虑纵向的协作。横向的协作表现在不同的数据生命周期过程(比如测试前移),而纵向的协作表现为同一数据生命周期过程内的人员等的协作。
如何将流程标准化?
数据处理标准流程图
数据探查
数据探查指对源数据特征和质量的调研和分析,便于用户对源数据有更客观的认识,提高数据清洗、ETL开发和测试的质量和效果,如数据分布特征、类型检验、非空、数据域模式、连续性和时序探测等。
数据建模
数据建模过程一般分为概念模型、逻辑模型和物理模型的建模过程。数据建模过程是多部门协作(业务部门、技术部门和需求部门等)的前提下,在一定方法论的指导下,由全局到局部、由概要到明细地对现实世界(业务概念和业务过程等)的描述,同时建模必须遵循一定的规范(如属性的全局一致性)。建模工具是为了更好地支持建模过程,更好地帮助用户去理解模型。好的模型对于ETL实现和上层应用都是比较友好的。
质量控制
质量控制包括数据清洗、ETL过程的质量控制和数据监控的质量控制。
数据清洗是对数据进行重新审查和校验的过程,目的在于删除重复信息、纠正存在的错误,并提供数据一致性,其包括数据质量的发现和修复。
ETL过程的质量控制指对ETL过程启动前和运行后分别对输出和输出的质量控制。
数据监控的质量控制指数据平台在例行性运行过程中对数据质量的反馈和干预。
ETL实现
ETL实现是通过ETL工具或者脚本根据业务需求和数据模型对企业数据进行加工,产生所需要的数据的过程。该过程耗时占整个项目的周期的比重很高。在这个过程中,用户需要考虑横向扩展、异常处理、重跑处理、资源控制、审计追踪、参数控制和调度集成等。
ETL测试
基于数据平台构建的数据处理系统需要进行单元测试和集成测试,对于系统测试则可以根据实际情况决定。ETL单元测试指对ETL最小单元进行测试,往往指单个ETL作业,其采用固定输入固定输出的方法进行测试。这些固定输入和固定输出可能是人为构造的,也可能是由系统辅助生成的。ETL集成测试指对多个ETL单元组装成模块或子系统进行测试,在不同的测试入口点进行测试。对于ETL集成测试来讲,一致性测试是最主要的手段。
调度设计
并行作业调度系统是数据处理的灵魂。调度设计指根据调度系统要求开发调度接口、配置作业参数和作业依赖,从而协调企业所有作业有序进行。然而并行作业调度系统的配置和测试非常繁琐,工作量非常大。传统配置方法是既懂业务又懂技术的人员,分析ETL的实现代码,手工梳理作业间关系,手工通过GUI配置作业和依赖。当作业量超过数百个时,配置工作量非常大,而且也极易出错。同时,作业的新增、变更和下线等对调度的影响也需要手工分析,需要反复与多部门确认,耗时费力,并且极易产生事故。
如何搭建标准数据平台?
数据平台架构示意图
按系统功能,数据平台可分为监控模块、调度模块、数据交换模块、队列/缓存模块、ETL模块、DQ模块、资产权限模块、报表模块和 数据挖掘 模块等。
监控模块
监控模块对系统硬件(交换机、路由器和主机等的电力、通信、磁盘、内存、CPU等)、系统软件(Web服务器、中间件服务器、数据库服务器和缓存服务器等的资源、连接数和负载等)和数据(数据的一致性、稳定性和可靠性等)进行实时监控,发现问题及时告警甚至按预设方案自动进行处理。
现阶段常用的监控软件包括Monit、Ganglia、Munin、Cacti、Nagios、Zabbix、Observium、Zenoss、Collectd和Argus等。
调度模块
调度模块对企业内跨平台和跨主机的软硬件资源进行统一调度。这些资源包括ETL主机、DQ主机、数据交换主机、报表主机、数据库主机、邮件服务器和打印机等。比如银行信用卡的月结账单,调度系统需要协调数据交换、ETL处理、账单生成、纸质账单打印和电子账单发送等任务。
现阶段常用的调度软件包括BMC Control-M、AutoSys、Apache Oozie、Asisinfo Schedule Server、成都塔斯克TaskCtl、Linkedin Azkaban、Moia Control和Job Server等。这些调度软件往往提供GUI和CLI的配置方式,但是在智能化配置方面支持极其有限。
数据交换模块
数据交换模块包括数据导入和数据导出。数据导入包括文件日志接入、数据库日志接入、关系型数据库接入和应用程序接入等。文件日志接入可采用Flume等,数据库日志接入则往往需要开发特定的插件来读取MySQL、Oracle和SQL Server等的数据库日志或变更表,关系型数据库和NoSQL数据库接入则使用Apache Sqoop、Taobao DataX或大众点评wormhole等,应用程序接入则通过应用程序对外接口进行接入。
ETL模块
现阶段常用的ETL软件包括Informatica PowerCenter、IBM DataStage andQualityStage、Oracle OWB、MicrosoftIntegration Service、Talend ETL和PentahoData Integration(Kettle)等,其主要表现为通过拖拽和配置的方式可视化、免编码地完成ETL工作。脚本包括标准SQL、SparkSQL、PL/SQL、HQL、AWK、Java、Python、Ruby、Pig等,其主要表现为通过特定的语法进行编码实现ETL工作。目前,对于传统ETL,大部分ETL软件都可以胜任,但是对于大数据下的ETL,ETL工具对其支持非常有限。Informatica为大数据下的ETL开发推出Informatica Big Data版本,将之前的Mapping翻译为HQL脚本从而在Hive引擎上执行。IBM的DataStage则通过相应BalancedOptimizer实现Mapping到Netezza、Oracle和DB2等专用数据库的脚本翻译,以利用不同的更为强大的数据处理引擎。Talend ETL则把Mapping翻译为Spark SQL,从而利用Spark引擎对数据进行处理。
DQ模块
现阶段常用的DQ软件包括Informatica Master Data Management、InformaticaData Quality、IBM QualityStage、TalendOpen Studio for Data Quality、Data Cleaner和Aggregate Profilier等。DQ模块主要是对数据质量进行控制,包括源数据的质量检查、数据清洗、数据融合和数据监控等,贯穿数据处理的整个生命周期。DQ模块非常重要,但是目前好些数据处理项目都没有专门的DQ模块,这些功能以脚本形式零散分布于不同的作业中。
资产权限模块
广义上讲,企业的各种数据库表、视图、ETL作业、报表、邮件等无形资产和企业的办公室、厂房、设备等一样,都属于企业的资产。资产权限模块就是统一对这些无形资产进行权限管控,保障信息安全和共享。该模块完整实现的工作量还是比较大的,多数企业借助于不同软件自带的权限管理能力,形成分散的资产权限模块。现阶段并没有完全开箱即用的资产权限模块。
报表模块
现阶段常用的报表软件包括IBM Cognos、Microsoft Report Service、Crystal Reports、Bussiness Ojbect、Tableau、MicroStrategy、FineReport、Pentaho和JasperReport等。这些报表软件多数都提供了列表、交叉表、图表、地图和仪表板的能力。比起手工编写页面相比,报表工具的学习成本和开发难度更低,开发周期和项目风险也得到了有效控制。
数据挖掘模块
数据挖掘是一个跨学科的计算机科学分支。它是用 人工智能 、机器学习、统计学和数据库的交叉方法在相对较大型的数据集中发现模式的计算过程。相对于传统ETL数据处理偏重于,数据挖掘更侧重于知识发现,其计算和规则更加复杂,属于非传统的数据处理。
现阶段常用的数据挖掘软件包括SAS、SPSS、Weka、RapidMiner、KNIME、KXEN Analytic Framework、Oracle Data Mining、Microsoft SQL ServerAnalysis Service、Python和R语言等。
如何构建智能化ETL系统?
智能化ETL系统能够降低对开发人员的技能要求,甚至可以将ETL开发部分或全部转移到业务人员手中。通过低成本的试错,用户能够加速开发,快速响应业务需求。
本文的智能化ETL系统指通过ETL语义对ETL过程进行描述,形成ETL Mapping,再通过不同的Mapping解析引擎生成与平台相对应的各类脚本甚至是各类脚本的组合。ETL Mapping的核心元素是Set、Operator和Link。Set元素指源表、目标表或临时结果集。Operator指ETL操作符,包括输入、输出和转换逻辑,其中的输入和输出指Set。Link指操作符与操作符之间列级别的链接。
首先,我们了解下ETL的数学本质。ETL从数据角度看,即一个或多个集合经过操作符变换形成一个或多个集合的过程。这些ETL的描述,我们称之为ETL语义。
下图为标准的ETL Mapping描述,多数ETL软件都有类似的描述。这是最常规的ETL Mapping描述。
下图为扩展的ETL Mapping描述,多数ETL软件并没有类似的描述。原则上讲,形式化描述是任意的,但是要考虑标准化、软硬件平台差异和实现难度等。
其次,我们了解下ETL Mapping解释器原理。ETL Mapping解释器设计需要考虑ER元数据、ETL元数据、ETL环境和ETL设计模式。通过对ETL设计模式的分解,形成原子的ETL操作符和复合的ETL操作符。用户使用这些原子的或复合的ETL操作符来表达ETL需求,这些描述则称为ETL元数据。
ETL Mapping解释器根据不同ETL环境配置的相应语法和句法规则,将ER元数据和ETL元数据转换为一组本地ETL引擎能够识别的脚本,从而完成ETL Mapping到特定代码的翻译和执行。在此过程中,如果涉及多环境或多语言协同处理,或因平台特点而不能直接翻译为单一处理过程,则需要通过临时数据集进行缓存。
基于数据字典(静态数据)和ETL元数据(动态数据),可产生以下2种ETL自动化模式。
I. 基于集合和操作符的通用ETL元数据表示法及执行引擎
该方式通用性强,但是需要编写适配不同环境不同模式的插件,工作量大。然而可以分步实现,同时易于集成数据质量、调度等过程。该模式与原子操作符相对应。
ll. 基于配置和模板的专用ETL元数据表示法及代码生成引擎
该方式专用性强,需要ETL人员和业务人员梳理制定ETL模式并编写模板。然后基于模板和配置数据实例化出大量的ETL流程。该模式与复合操作符相对应。
如果ETL Mapping解释器足够灵活,很容易添加新的操作符来注入新的数据处理逻辑,那么一定程度上,上述2种ETL自动化模式则实现了完美的统一。
最后,我们来了解如何实现ETL Mapping的形式化和标准化。
下图为形式化的操作符描述。
以Join操作符为例,其对应的Hive平台语法规则为:
Join
SELECT CONCAT(MAPPING(${PORTGROUP.INPUT[*].PORT[*].name}),',')
FROM ${PORTGROUP.INPUT[1].name}
JOIN ${PORTGROUP.INPUT[2].name}
ON ${OPERATOR.joinCondition}
ETL Mapping解释器基于DAG图遍历或模式识别并根据不同的符语法规则对ETL Mapping进行解释,形成完整的ETL代码。至此,ETL模块的智能化描述完毕。
本文期望用户基于ETL模块的智能化构建思路,对所有数据处理过程进行展开,形成自已的智能化数据处理平台。
结束语
本文通过数据处理基本语义元素ER、DQ和ETL的形式化、标准化和智能化实践,引导大家对智能化数据平台建设的思考,从而逐渐形成数据处理规范和标准,指引更多企业更好地处理自身数据,发掘更多沉淀于数据里的宝贵财富。
智能化数据平台建设落地虽然有理论指导,但是仍会遇到不少困难。这些困难包括对传统数据处理的理解、基本语义元素的形式化和标准化和语义解释器灵活性和开放性等方面。任何事物的发展总是螺旋迭代式的,智能化数据平台建设也是如此。只要把握好事物发展的方向,我相信大家都会在智能化数据平台建设的过程中获益匪浅的。
讲师介绍:王高飞,百分点高级研发工程师,郑州大学管理学学士,擅长数据仓库建设、实时和批量数据复制技术及大数据技术。曾就职于亚信国际,独立完成挪威电信在丹麦和匈牙利市场的ODS和数据仓库项目架构设计,深得客户认可。
责任编辑:陈近梅