优采集平台(农行大数据、数据库和云计算等领域的应用实践与技术创新)

优采云 发布时间: 2021-11-07 15:10

  优采集平台(农行大数据、数据库和云计算等领域的应用实践与技术创新)

  关于作者

  农行研发中心“舒风云”团队,一支朝气蓬勃、成长迅速的技术团队,始终致力于农行大数据、数据库、云计算等领域的应用实践和技术创新,探索数据赋能,勇往直前。攀登数据云的顶端。, 不断为企业数字化转型和金融科技发展贡献力量。

  指导

  随着科技的发展,我们的零售业务系统正在经历分布式和微服务化转型。数据库也从单一部署的 DB2 数据库拆分为多个基于 Oracle 数据库的分布式系统。每个系统都与 ADG 技术相匹配。主备库数据实时同步,业务数据采用分库分表的方式存储。同时基于Hadoop集群的Sqoop组件用于数据采集,从Oracle获取全量和增量业务数据,形成一套完整的数据采集流程,实现数据< @采集 无缝对接数据预处理。

  一、建设背景

  随着我们零售业务的转型升级,各个业务系统逐渐分离成独立的模块。每个应用系统独立部署,拥有独立的数据库。为保证高可用,每个业务系统使用一个数据库集群来存储业务数据,采用分库分表的方式拆分逻辑表。

  如下图1所示,是原单系统获取增量业务数据的流程图。数据库采用主备模式,主库的数据镜像每天同步到备库。因此,备库是一个稳定的数据环境,可以保证数据的一致性。为数据交换中心的每张表设置增量抽取规则(通常是SQL语句Where子句后的条件),然后通过专用的数据抽取模块获取单个数据库中每张表的增量数据。登陆是对数据文件进行压缩,然后提供给各种下游需要消费数据的应用系统。

  

  图1 单数据源架构增量数据采集流程

  如下图2所示,当前的单系统逐步分离后,各个独立系统采用Oracle数据库,利用ADG技术实时同步主备库中的数据。与原有的单数据源架构相比,该架构有以下难点:

  

  图2 分布式数据源架构增量数据采集流程

  二、工具选择

  我行做结构调整之前,单库使用JDBC连接SQL语句采集数据,但由于部分数据库表数据量大,性能成为数据瓶颈采集因此,针对以上需求场景,选择了以下五种常用的导出工具进行性能测试。性能对比如下表所示:

  

  通过对比测试,发现通过Hadoop生态系统的Sqoop组件效率最高,并且该组件针对Oracle和Mysql数据库进行了优化,并且支持fast模式(详见第四部分)。同时,Sqoop导出的数据直接存储在HDFS上,省去了从本地磁盘上传到HDFS的环节,方便后处理数据的加载。

  对于Sqoop的fast mode,我们也比较了是否使用数据压缩以及不同的并发。可以看出,压缩方式可以减少网络开销,大大提高采集的效率。具体条件如下表所示:

  

  三、技术架构

  Sqoop数据采集模块,部署在Hadoop分布式计算环境中,负责对各个子系统的Oracle备库进行拆分后的数据采集,对采集的数据文件进行压缩和上传@> to HDFS 为下游数据应用系统提供源系统数据。

  

  四、关键技术说明

  1、Sqoop 直接模式

  SqoopV1.4.6 提供了一种快速导入 Hadoop for Oracle 数据库的方法。参考如下:

  

  快速模式可以利用Oracle数据库的特性来满足高效的数据导出性能。底层调用Oracle数据库的系统函数计算一张表在底层数据块中的位置,直接并行读取该表对应的数据块。取决于表的索引,所以不支持提取条件和字段过滤。具体执行代码如下:

  

  2、数据一致性保证

  因为Sqoop采集的数据库可能不是静态环境,在data采集的执行过程中仍然会有表的数据更新,有些场景需要保证数据执行过程中数据的一致性提取过程,可以由Sqoop提供 为了保证一致性,方案底层采用了Oracle数据库的闪回查询技术,需要结合表的大小和Oracle数据库的参数调优(undo_retention)等),否则会导致ORA-01555快照过旧的错误。详情如下图所示:

  

  3、Sqoop 权限设置

  Sqoop直接模式需要在数据库中设置相关权限。以Oracle数据库为例:

  (1)新建Oracle ADG库Sqoop专用用户(假设为B),密码不能收录@、$和单双引号;

  (2)Oracle 为用户提取额外的权限:

  (3)授予专用用户表执行权限。由于数据库表是产品用户(假设为A)创建的,所以DBA需要授予用户B查询属于A的表的权限,即:

  将 A.Tab_A 上的选择授予 B 或将任何表上的选择授予 B。

  另外,如果有数据一致性要求,需要给用户B的A所属表的闪回查询权限,即:

  将 A. Tab_A 上的闪回授予 B 或将任何表的闪回授予 B。

  4、自定义字符串分隔符方案

  Sqoop默认只能设置单个字符作为列分隔符,行分隔符默认为换行符,所以当数据内容收录分隔符时,很容易导致下游获取的数据不可用。它可以通过以下方式增强:

  (1)修改表自动生成的代码,重新编译打包

  Sqoop的import命令执行时,会根据每个表A的情况自动生成A.java文件,然后编译打包到Hadoop的数据节点执行抽取任务。这个过程也可以分步进行,即先通过codegen命令生成A.java文件,然后修改这部分代码片段,加强行列分隔符功能,再编译打包java文件导入一个.jar文件,然后通过指定jar包执行import命令,如下:

  修改行和列分隔符。自定义列分隔符,需要修改toString()函数中的第二行(下图中第851行,将fieldDelim改为执行后的String),自定义行分隔符,修改函数的第1220个函数。行,添加指定的行分隔符。

  

  

  (2)import 命令通过指定jar和class来执行

  

  5、增量数据采集

  由于Sqoop直接模式的全量数据获取效率高(具体原理见前面的描述),提供了另一种获取表的精确增量数据的方案,即每天获取表的全量数据,然后通过主键关联,进行全字段比较,得到表的技术增量数据,这种方法可以达到100%的准确率。尤其是当数据源的数据表未设置更新日期字段、存在物理删除、多表关联、数据管理频繁等情况时,可采用本方案获取信息,无需对原有系统做任何修改。100% 准确的增量数据。

  下图是从原来的单一DB2数据源,切换到Oracle数据源后,选择了多张大表进行前后对比,平均提取性能提升了50%以上。

  

  6、其他预处理能力

  由于Sqoop的功能比较单一,数据采集分片后存放在HDFS中,方便基于Hadoop技术栈扩展数据预处理能力。我行具体场景包括:子库和表的数据整合、敏感字段内容过滤、编码字段解码、数据分割等。

  五、总结

  实践证明,基于Hadoop的生态系统中关系型数据库Oracle的采集效率,Sqoop直接模式值得肯定。通过JDBC解决了以往数据连接方式采集的性能瓶颈,实现了采集数据与预处理功能的平滑对接,提高了下游消费数据的时效性,为数据的构建打下基础行业平台。

  银行大数据平台数据采集瓶颈难破,选择Sqoop!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线