文/中原银行数据信息部赵鲲鹏

随着国内银行业数字化转型进程的加快和数据驱动战略在银行的实践,2019年,中原银行以分布式数据仓库和大数据技术为核心,构建了一套能够满足一站式数据整合、存储、集成、计算和开发的数据技术中间平台,有效支撑了行内业务决策和各类应用的大规模交付。近年来,全行数字化转型步入深水区,线上、移动、场景化业务占比越来越高,也带来了数据规模的爆发式增长和数据类型的多样性。
数据仓库作为中原银行的主要基础设施,是围绕数据仓库的数据集成平台而构建的,我们在银行承担了大量的过账源和明细数据。在过去的三年中,存储的数据总量增加了两倍多,基于数据仓库架构的应用增加到60多个。数据仓库的扩张已经成为常态,数据存储成本占全行IT预算的比重越来越大。
同时,基于RPA、人机交互、知识图谱等的人工智能技术。对半结构化和非结构化数据存储、特征提取和数据处理提出了新的要求,单一的数据仓库技术已经不能满足上述挑战。
工业湖库一体化建设方案
2020年下半年,我们开始探索解决方案,数据湖进入了我们的视线。通过比较,我们发现数据湖和数据仓库作为大数据架构下两种不同的技术演进路线,各有优势和局限性。具体体现在以下几个方面。
第一,在数据处理和存储能力上,数据湖支持结构化、半结构化和非结构化数据的存储和处理,而数据仓库基本只支持结构化数据。
第二,数据仓库在数据处理之前,要对数据进行整理,定义数据结构后才能入库。但是,data lake按原样存储数据,因此不需要预先构造数据。这也导致数据湖缺乏像数据仓库那样的数据管理能力,数据质量差。
第三,数据湖在灵活性上有天然的优势,开源的大数据引擎只需要遵循相对宽松的兼容协议就可以读写数据湖中的数据;但数据仓库只对特定引擎开放,并且经过深度定制和优化,换来了更高的存储和计算性能。
不难看出,数据湖和数据仓库虽然有互补的能力,但是很难直接合并到一个系统中。有没有更好的架构来统一两者的能力?Gartner在2011年提出了逻辑数据仓库的概念,并推测企业数据分析将转向更符合逻辑的架构,从而实现逻辑统一、物理分离的协同系统。
借助逻辑数据仓库的架构理念,各大云厂商相继推出了自己的“湖库一体化”技术解决方案,通过湖库协同工作的方式,将数据湖、数据仓库、数据服务连接成一个整体,其中数据可以按需自由移动,以逻辑统一的方式为用户提供服务。
关于融合数据湖建设的思考
数据显示,2021年中国数据库市场按行业分布,金融占比20.2%,政府占比18.4%,互联网占比14.8%,运营商占比8.9%。毫无疑问,以银行为代表的金融行业仍然是数据库销售占比最高的市场,也是对数据库技术依赖度最高、要求最严格的市场。
数据仓库作为大数据时代数据库技术的产品形态,安全、稳定、高效、易用,其完善、高精尖的数据管理能力完美满足了金融行业对海量数据分析的需求。
因此,在金融行业仍然高度依赖数据仓库的前提下,如何更好地匹配企业数据技术中间层建设的历史地位,同时将数据湖的低成本和灵活性与数据仓库的企业级能力有机结合,成为了我们数据技术中间层建设的重点。
通过对主流云厂商的“湖库合一”架构方案的深入研究和学习,我们逐渐明确了自己构建融合数据湖的思路:
第一,在数据仓库已经建设好的前提下,数据湖可以作为数据仓库的补充,位于数据仓库的后端,主要用来卸载数据仓库的一些重负载,比如历史数据的存储和查询;
第二,Data Lake在其他场景拓展数据探索和AI分析能力。原有数据仓库的外部服务不变,仍以集成层、市场层、应用层批处理、报表查询等应用场景为主;
再次,在逻辑层面,采用湖库任务集成开发、元数据统一管理、联邦查询等技术,将数据湖、数据仓库、数据服务连接成一个整体,满足用户的集成使用需求。
数据湖方案的总体架构
中原银行数据湖集成方案:涵盖分布式存储、大数据、数据仓库等主流技术方案。通过构建湖库和数据服务一体化方案,实现数据高效流转和按需统一管理,满足全行不同业务条线的个性化多维数据统计分析需求。
数据湖方案的具体技术架构
1.冷热分层智能管理
冷热数据的定义
根据不同的场景,用户对数据的需求不同,用户的高频引用数据、处理时间、高性能访问往往比较严格;但是,低频引用的数据并没有那么高。
根据用户使用数据的频率,存储期内的数据可以分为热数据和冷数据。顾名思义,热数据就是用户经常引用的数据,包括批处理运行和经常使用的数据分析。冷数据是指低频数据,一般是历史业务数据。这类数据量大,访问频率低,可以用成本更低的方式存储,而不是全部存储在一个数据仓库中。

冷热数据存储方案
具体来说,为了追求高性能的查询响应,主流厂商的数据仓库产品一般采用存储和计算一体化的架构设计,通过对本地存储的控制和调度来达到快速访问的目的。虽然存储和计算资源不能独立扩展,但本地热点数据的计算和查询性能得到了有效保证。
该湖在高扩展、低成本的基础上,实现了计算与存储的分离。虽然牺牲了查询效率,但是可以支持海量数据的存储,非常适合分担数据仓库中冷数据的存储压力。
采用基于湖库一体化的冷热数据分层存储方案,可以有效降低数据的单位存储成本。
冷热分层的挑战
在基于湖库一体化的冷热数据分层存储方案的实施过程中,我们遇到了一些问题和挑战。
用户对冷热数据有明确的业务定义,但数据仓库在建表时无法指定冷热数据分层的参数。如何定义冷热数据分层的参数,如何将冷热数据与冷热存储集群关联起来,是需要解决的首要问题。
冷热分层解决方案
一站式数据开发平台是中原银行为数据开发人员提供的标准化、自动化、敏捷化的全流程数据开发工作坊。在数据建模部分,我们为用户提供了标准的建表功能,可以根据用户输入的中文信息自动匹配词根,生成英文字段。同时,用户可以根据表的分类配置不同的数据存储策略。
平台可以根据用户在创建表格时指定的数据存储周期策略,将业务中的冷热数据与分级存储中的冷热数据存储集群进行精确关联,并采用智能调度策略,将冷数据从数据仓库自动迁移到数据湖,并将数据分布详细显示在数据资产平台端,方便用户查找。
当用户需要使用湖中的冷数据进行重批时,平台自动分析用户在数据补充模块中配置的表级依赖关系,将用户需要的冷数据返回数据仓库进行重批。缓存时间到期后,平台会自动再次迁移回数据湖。
2.异构数据的统一元数据管理
通过开放底层文件存储,lake为进入lake的数据带来了极大的灵活性。进入数据湖的数据可以是结构化的文本、半结构化的网页,甚至是完全非结构化的图片。
为了避免数据湖变成数据沼泽,我们定制了数据湖的上传接口:
●强制用户配置数据资产标签,包括数据用途、数据生命周期和隶属关系等。
●对于结构化和半结构化数据,平台可以基于特定规则,通过数据抓取功能自动识别并生成模式信息;
●提供Hive metaStore统一访问层,方便数据湖计算引擎使用。
湖库集成的元数据管理在一站式数据开发平台的数据建模部分实现:
●数据建模部分提供数据湖和数据仓库的标准表构建功能,用户使用标准表构建功能生成的元数据信息将统一注册到数据建模部分的元数据中心;
●对于实现冷热分层存储的表,元数据中心会根据用户配置的存储策略,将热表信息和湖库中的冷表信息进行精确关联,将其视为逻辑层面的表,并将该表在数据仓库和数据湖中的表结构和日期范围详细展示,方便用户查看。
3.全球数据的联合分析
当一个数据按照冷热分层的策略分别存储在数据仓库和数据湖中时,如何实现跨湖仓库的高效数据分析和高性能的数据湖查询成为另一个需要解决的问题。
因此,通过对比分析主流开源OLAP引擎,我们最终选择Openlookeng作为全局数据联邦查询引擎。
一方面,Openlookeng在底层计算框架上继承了Presto的优势,包括存储与计算分离、全内存并行处理、索引能力、分布式流水线等。,并能实现高效的数据分析。另一方面,Openlookeng在高可用性、缓存加速、动态目录加载、可扩展连接器等方面进行了加强,有效满足了企业级场景应用的需求。
通过对接BI工具,用户可以方便地使用标准SQL直接分析湖库的数据,避免不必要的ETL。在使用过程中,结合具体的应用场景,我们还对OpenLooKeng的部分功能进行了优化和二次开发。
湖泊仓库的查询性能优化
在实际的仓库联邦查询场景中,OpenLooKeng的查询性能没有达到预期,主要是因为OpenLooKeng的连接器没有实现GaussDB数据源的运算符下推功能,导致所有来自数据源的数据直接加载到OpenLooKeng计算引擎,导致数据传输延迟严重。
通过参考OpenLooKeng源代码中其他数据源的运算符下推方案,实现了GaussDB的运算符下推和动态过滤功能,并通过SPI机制以插件包的形式注册在OpenLooKeng服务中。
同时,为了解决存储与计算分离场景下数据读取的局部性问题,我们引入了开源的数据编排技术组件Alluxio。通过OpenLooKeng的worker节点和Alluxio的worker节点混合部署,根据用户访问数据湖中数据的频率进行统计分析,将湖中频繁访问的数据提前预加载到Alluxio中,实现本地数据拉取的功能,在有效降低网络传输io的前提下,提高湖库分析sql的执行效率。
兼容GaussDB函数和中文语法
GaussDB是业界主要的数据仓库,数据工程师已经掌握了它的语法规则。Openlookeng推出后,虽然两者都支持ANSI SQL2003语法,但对于GaussDB中用户常用的函数和中文字段,Openlookeng存在兼容性差异。
为此,在Openlookeng引擎端,我们以plugin的形式增加了新的函数插件包,扩展了to_date、instr、to_char的使用场景。对于decode、nvl等多参数函数,通过优化源代码中的动态字节码生成函数方案,扩展了不同参数的生成策略,满足了参数类型和返回值类型不确定的使用场景。
针对Openlookeng不支持中文字段的问题,我们在源代码中重构antlr4定义的语法规则,在Sqlbase.g4文件中扩展标识符,定义中文匹配规则,支持中文词法匹配。
4.湖仓一站式数据开发与管理
在数据开发方面,自主开发了支持湖库集成架构的数据开发调度平台,在执行引擎实现了基于多租户的敏捷任务管理。无需人工干预,平台根据任务类型自动将任务分配到数据仓库和数据湖中执行。同时,依托智能SQL解析服务,可以扫描湖库任务的SQL代码,根据相应的规则进行匹配,检测质量隐患。
目前,中原银行自主研发的数据任务调度引擎支持万级任务的复杂调度和全局依赖管理,支持丰富的调度参数,充分满足用户在开发过程中的各种需求。
在数据集成和交换方面:平台配置简单灵活,无需编码,源端和宿端支持丰富的外部数据源,包括es、Hbase、StarRocks、Oracle、GaussDB等。针对同一个数据源表平台,我们采用多卸载多加载的策略,避免了资源的重复占用。通过建立动态的资源分配机制,可以实现对资源的细粒度控制。同时,该平台采用Spark作为底层分布式执行引擎,支持多源异构数据高效入湖,将湖泊、仓库和专门搭建的数据服务有机连接成一个整体。
在数据分析方面,我们构建了一站式数据分析平台,集固定报表、交互分析、客户洞察、大视屏、数据资产地图、数据创新社区于一体,为业务人员提供搜索、文档、标注等功能的一站式解决方案。该平台集成了数据湖查询服务,为用户提供高效便捷的数据湖查询、跨湖和仓库联邦分析能力。用户可以很容易地使用标准SQL直接分析数据湖中的数据。
数据湖方案的应用效果
数据湖方案从2021年初开始建设,到最后落地,历时一年左右。目前,该整体方案已经在行业中得到应用,并取得了一定的效果。

节约成本:融合数据湖方案支持多类型数据管理、PB级海量数据存储、数据湖分析计算服务。通过采用湖库合一的智能分级数据存储策略,可有效降低数据在银行的单位存储成本20%以上。同时还连接了行内模型管理平台和反欺诈平台,支持各平台对图像数据的存储和使用需求。
效率提升:通过Openlookeng提供的lake warehouse协同分析能力,在保持现有仓库业务模式和数据分析师使用习惯的前提下,可以有效避免不必要的ETL,数据重定位减少50%以上。同时,基于操作符下推、元数据缓存、数据缓存等技术,可以支持数据湖查询的秒级响应。
管理:通过构建湖库和数据服务一体化方案,实现高效自由的数据流转和统一管理,支持湖库任务协同开发和调度,为全行60多个项目组提供稳定高效的数据开发服务。截至目前,已承担数据集成交换任务2万余项,批量运行任务3万余项,每月完成sql代码质量审计20万余项。


