2021-05-17

数据集成之百炼成仙

​01

数据人的理想

 

想像一下 IT 与业务完美结合的情形:准确的信息在整个企业内畅通无阻,各种决策和举措得以及时制订和实施;IT 基础架构十分灵活并可重复利用,确保企业不仅能够响应不断变化的业务要求和竞争压力,还能够预测到这些变化,提前采取措施。在理想状况下,IT 还为业务提供实时、可衡量的价值,支持以下关键目标:

增加收入企业对客户具有全面的了解。对客户进行 360 度的整体观察,从而促进销售、营销以及客户服务。通过准确地预测客户需求,还提升了交叉销售率和客户保留率。

简化业务运营:业务运营高效平稳,非核心业务功能外包。无论业务流程涉及哪些系统或机构,IT 都可以迅速提供可靠、及时的信息对这些业务流程提供支持。此外,各个流程的数据是同步的,确保了业务运营的一致性和对整个企业的可视性。

确保符合现行规范:机构只需将真实运营情况的唯一版本报告给监管人员和审计人员,这将减少合规负担。信息来源和更改由系统自动记录以提供审计线索,从而确保了信息的质量和准确性。

 

在理想状况下,IT 部门灵活机敏,能够迅速响应不断变化的业务需求。他们提供与业务战略目标相吻合的解决方案,形成可衡量的业务影响,并使IT基础架构合理化。随着效率的提高,IT 人员与企业的各个机构通力合作,降低整体成本,使解决方案事半功倍。

02

无情的现实

 

但是在现实中,业务战略计划经常会涉及到一个或多个较大的 IT 项目,例如形成单一的客户视图、同步多个系统数据来支持端到端的业务流程,或者整合多个应用软件来降低成本。

IT 部门努力根据业务需求执行任务,但却受到现有IT系统和基础架构的不稳定性和复杂性的限制。很难使企业能够达到理想化的状态。

经常在企业内遇到这样的对话

这样的问题的主要原因是什么?

很明显是碎片数据。

数据通常驻留在整个企业的各个异构的数据系统中。例如,客户数据可能分散在几十个,有时可能是上百个不同的应用程序、数据库和遗留系统中。随着不同业务部门独立完成部门项目的情况不断增加,企业中可能出现大量数据系统,而企业或业务间的合并也会引入许多系统。无论哪种方式,各种规模的企业都要同数据使用的增长和扩散进行抗争。

 

这些数据系统中数据的内容、质量、结构和定义也像这些仓库本身一样变化莫测。用户无法确定业务运营所需的数据是否完整且准确。如果不能在整个企业范围内形成对相关数据的统一描述和一致理解,不同的团队或系统就可能根据自己的数据版本对同样的问题给予不同的答案。

 

此外,随着业务复杂程度不断加大、项目周期缩短以及数据量的增加,碎片数据的问题变得更加棘手。

03

为理想而奋斗

 

所以数据人为了理想中的目标,同时也为了帮助企业更上一层楼,开始了统一数据平台的搭建的旅程,最开始使用传统数据来构建数据仓库,当然也会有使用 MPP 数据库构建数据仓库,进而使用大数据平台来搭建数据仓库、数据中台或数据湖,到现在搭建数据湖屋(Data Lakehouse)。不变的是数据分析的需求,变的是数据量、数据种类和数据存储计算平台。为了使企业数据发挥作用从而实现业务目标,就需要解决碎片数据问题。为确保业务决策和运营基于可信赖、及时且全面的信息,几乎每项计划都要求IT部门访问、集成和提交数据。

 

但是,单是访问数据就不是一件简单的任务。数据在整个企业内随处可见,并在各种系统中以多种不同的格式存在。它们驻留的地点可以是大型机、数据库、电子表格、企业资源计划 (ERP) 应用软件、消息队列以及纯文本文件等。

此时,IT 部门需要对数据进行清理、聚合和验证。那么,企业如何实现碎片化数据的整合?答案是数据集成。

通过数据集成,企业可访问所有分散的数据,可对核心信息资产进行准确一致的描述,并轻松利用企业中的这些资产推进业务决策和运营过程。

与关注事务管理和流程集成的应用软件集成不同,数据集成致力于解决碎片数据产生的复杂问题。这些问题包括数据质量较差、数据结构和含义不一致以及数据管理不当。

04

数据集成的概念

 

以前数据集成被称为 ETL。E、T、L 分别为抽取(extract),转换 (transform)和加载 (load) 首字母。用于完成从数据源头到数据平台的迁移工作

1. E (extract),即数据抽取,帮助企业从数据源中抽取数据。一般有以下几种方式:

  1. 全量抽取:全量抽取类似于数据迁移或数据复制,它将数据源中的数据原封不动的从数据库中抽取出来。

  2. 增量抽取:增量抽取只抽取自上次抽取以来新增或修改的数据。如何捕获变化的数据是增量抽取的关键。目前增量数据抽取中常用的捕获变化数据的方法有:

      a)触发器方式

      b)时间戳方式

      c)全表删除插入方式

      d) 全表比对方式

      e)日志方式实时增量数据

      f)消息队列实时数据

      g) API实时数据

2. T (transform),即数据转换,从数据源中抽取的数据不一定完全满足数据平台的要求,例如数据格式的不一致、数据输入错误、数据不完整、非结构化数据转成结构化等等,因此有必要对抽取出的数据进行数据转换和加工。常见的数据转换有:

  1. 空值处理:捕获字段空值,进行加载或替换为其他含义数据,并根据字段空值实现分流加载到不同目标库。

  2. 规范化数据格式:实现字段格式约束定义,对于数据源中时间、数值、字符等数据。

  3. 拆分数据:依据业务需求对字段可进行分解。

  4. 验证数据正确性:依据业务需求对字段进行数据验证。

  5. 数据替换:对于因业务因素,实现无效数据、缺失数据的替换。

  6. 建立ETL过程的主外键约束:对无依赖性的非法数据,替换或导出到错误数据文件中,保证主键唯一记录的加载。

3.L (load),即数据加载,将转换和加工后的数据装载到数据平台中通常是ETL 过程的最后步骤。装载数据的最佳方法取决于所执行操作的类型以及需要装入多少数据。

除了ETL,数据集成还需要考虑如下两点:

异常处理与回溯,如果由于各种异常情况的发生而导致数据ETL过程出错时,通过回溯操作可使数据平台中的数据恢复到数据正确最近的时点,从而进行恢复性加载。保证数据的可恢复性和数据处理的灵活性。

异常处理首先要制定标准。而规范的异常处理流程,在流程内部要针对各种不同出错的原因进行针对性处理,出错的原因和处理的方法需要在ETL运行的过程中不断的总结和整理。

统一的任务调度、自动化的流程控制与日志跟踪机制,无论是任务本身,还是过程中的数据质量检查以及出错处理和数据回溯,都需要统一在一个自动化的流程控制中,所有的任务根据其定义进行统一的调度,同时,每一个处理过程都进行日志记录,以便将来的追溯与跟踪。

当然,数据集成发展到现在,不仅能帮助客户解决批量数据集成的问题,也能帮助客户解决实时数据集成的问题。如增量抽取中提到的,可通过解析数据库日志文件, 捕获关系型数据库的实时变化数据,实现实时数据交互,提供数据抽取的实效性。帮助企业按需求设定哪些表、哪些字段要进行实时处理。这种方式称之为增量数据捕获(Change Data Capture,简称CDC),然后可以将数据实时接入到消费方,如Kafka,消息队列等。

在大数据平台上,还会有流式数据处理这样一个概念,流数据是一组顺序、大量、快速、连续到达的数据序列,一般情况下。数据流可被视为一个随时间延续而无限增长的动态数据集合。目前大数据处理比较流行的架构是流批一体的Lambda 架构, 其中流批指的是流式数据和批量数据。它的核心思想是将不可变的数据以追加的方式并行写到批和流处理系统内,随后将相同的计算逻辑分别在流和批系统中实现,并且在查询阶段合并流和批的计算视图并展示给用户。不少计算引擎已经开始往流批统一的方向去发展,例如 Spark 和 Flink,从而简化lambda 架构中的计算部分。

还有一种是Kappa架构,Kappa 架构由 Jay Kreps 提出,不同于 Lambda 同时计算流计算和批计算并合并视图,Kappa 只会通过流计算一条的数据链路计算并产生视图。它不是Lambda 的替代架构,而是其简化版本,Kappa 放弃了对批处理的支持,更擅长业务本身为 append-only 数据写入场景的分析需求。

 

 

05

如何实施数据集成

 

 

数据集成实施和其它项目实施没有太大的区别,首先需要梳理客户需求,了解数据源和目标情况,设计数据集成映射文档,然后通过设计文档进行相应的开发,随后对开发的任务进行测试,如果测试没有问题了,那就可以把他们部署到生产环境。当有新的数据集成需求时,再重复这样的一个过程。

当然在实施过程中,需要考虑以下这些方面:

  • “架构合理可行”,以最切实际而合理的架构搭建系统,并实现系统应具备的各类功能;

  • “性能保证与需求满足”,在系统设计与实施中应充分考虑到系统运行的性能压力以及数据集成各技术需求的满足。

  • “接口清晰而规范”,与其它各子系统的接口应明确、稳定、保证接口双方的松耦合,同时便于故障的定位和及时处理。

  • “易于管理和可扩展”,数据集成过程是数据平台建设的重要步骤之一,整个过程应该易于操作、管理和控制,同时系统在数据量增加的情况下应具有良好的扩展性。

06

常用的数据集成手段简介

 

数据集成可以通过成熟的产品实现,也可以通过代码实现,目前绝对是百花齐放,百家争鸣的情形。在这里介绍几种有代表性的手段:

  • 使用代码来实现数据集成,如存储过程、python 脚本、Java 等

  • 使用成熟的商业化的数据集成工具实现数据集成,如使用 Informatica 产品

  • 使用开源的数据集成工具实现数据集成,如使用 HOP 产品

通过代码来实现数据集成

在当下大数据盛行的时代,以批量数据集成为例,很多企业会选用 Hive 作为数据存储平台,通过 sqoop+HQL/Sparksql 实现数据集成,通过 azkaban 或者 airflow 实现调度。

Sqoop示例命令:

sqoop import --username xxx_3 --password xxx_4  --connect xxx_5   --fields-terminated-by '\001' --null-string '\\N' --null-non-string '\\N' --delete-target-dir --target-dir  xxx_6 --hive-drop-import-delims --query "xxx_7 and \$CONDITIONS" --split-by  xxx_8 -m xxx_9

Sparksql 示例命令:

 

Azkaban 调度示例

使用 sqoop+HQL/Sparksql+Azkaban/airflow 实现数据集成的好处是成本低、开发简便,效率高。

通过成熟的商业化的数据集成工具实现数据集成

很多企业也会选用成熟的商业化的数据集成工具,Informatica 旗下有一款非常有名的数据集成工具 PowerCenter,可以帮助客户实现结构化数据的批量和实时的数据集成以及非结构化文本的数据集成。

PowerCenter 就其核心技术来说,可分为以下几点:

  • 可扩展和分布式的产品体系,以元数据为核心驱动(Metadata Driven)。

  • 开放性,PowerCenter 元数据可构建在 DB2、Oracle、Sybase、MS SQL SERVER 等主流关系型数据库上,并提供 PowerCenter 元数据描述,真正的做到高开放性。

  • 国际化支持,可处理任何字符集

  • 遵守 CWM 的元数据标准,可完全真正开放的做到元数据交换。

  • 合理的体系结构划分,可适应分布式的部署。

  • 高性能的管道技术,使数据在转换过程,达到完全内存操作。

  • 并行作业控制,可最大化的利用系统资源,达到高并行性的效果。

  • 服务器集群,真正的Server级并行、负载均衡。

  • 对实时数据源的支持,例如 IBM MQ、Tibco、WebMethod、JMS、WebService、SAP R/3(IDOC)。

  • 先进的会话管理,工作流机制。支持 Workflow 机制,通过多种工作流调度方法,可以将ETL Session,外部命令,Email,以及数据库脚本等任务有机的结合在一起,从而定制复杂的工作流。

所以它的优点也很鲜明:

  • Informatica PowerCenter 分布式的体系结构,可适合企业快速部署生产环境。

  • 作业设计分为逻辑设计、知识库管理、物理作业的执行。从设计的角度,将开发分成三层结构,符合现代主流的技术特性。

  • 开放的元数据知识库,存在主流的关系型数据库中,且元数据遵守 CWM 元数据标准,可为企业元数据交换,提供国际先进的标准。

  • 因元数据是单独由知识库进行管理,且作业可跨平台。在系统移植时,可部分存储的数据库,其科学的可移植性极大方便了企业的部署要求。

  • 强大的工作流调度,可按时间、事件、参数、指示文件等进行触发,从逻辑设计上,满足企业多任务流程设计。

  • 高性能的 ETL 服务引擎,完全的内存线程,并集成了数据库的性能特点,是企业 ETL 高性能的保障

  • 图形化的开发,极大提高了开发效率,缩短项目周期。

PowerCenter 开发界面示例

 

通过开源的数据集成工具实现数据集成

开源的数据集成产品也有很多,kettle是国人当下选择比较多的一个开源产品。

主要特点包括:

  • 纯Java编写,真正实现跨平台操作;

  • 非常强大而且易于使用的设计界面,便于快速应用,简化设计;

  • 支持多种数据源访问功能,包括数据库、定制封装的应用、WEB 服务、平面文件、XML 文件、存储过程、CSV 文件和动态XML消息等。

  • 支持Hadoop、HBase、MongoDB、Cassandra等 NoSQL 数据库。

  • 全面的数据库访问支持,系统适应性强,目前可支持的数据库类型达到45种,并可进行类型扩展;

  • 转换简单,可扩展性强,预留了数据转换接口,通过利用这些接口,可以开发特定的转换插件;

  • 可用Java进行集成开发,提供了基于Java的脚本编写功能,可以灵活地自定义ETL 过程

  • 全面优化,高效稳定,针对不同的数据库系统自身的特点,在数据抽取、转换、容错等方面进行了优化,运行效率更高,系统更为健壮;

  • 支持十余种数据库的批量加载;

  • 支持集群运行转换,远端运行转换;

  • 日志详细,有效跟踪,日志设置了不同的级别,从最小级别到调试级别,每个级别输出的日志信息不同。

Kettle界面示例

 

其实HOP和kettle很类似,是kettle之父Matt Casters的又一力作,他现在专注于HOP的发展。HOP是新一代的开源数据集成平台,目前是Apache的孵化项目,易于使用、快速和灵活。与代码相比,HOP可视化开发的方式使开发人员的工作效率更高。数据集成任务可以在HOP Gui上设计,并在HOP本地引擎(本地或远程)上运行,或在Spark、Flink、Google Dataflow或AWS EMR上通过Apache Beam运行。后续会陆续推出HOP的一些技术文章。

它的特点为:

  • 元数据驱动

HOP完全是元数据驱动的。HOP中的每个对象类型都描述了如何读取、操作或写入数据, 元数据也在内部驱动HOP。HOP使用一个具有鲁棒性的引擎的内核架构。插件通过自己的元数据向引擎添加功能。换句话说,HOP很容易就能实现功能的扩展。

  • 一次设计,随处运行

HOP通过workflows和pipelines定义了数据处理的过程。一旦设计好,pipelines就可以在任何支持的运行引擎上执行。HOP支持在HOP服务器运行数据集成任务,更支持通过Apache Beam将任务运行在Apache Spark、Apache Flink、Google Dataflow或AWS EMR上,非常适配当下流批一体的架构。

  • 可视化开发

HOP的workflows和pipelines是通过直观的拖放界面可视化地开发。可视化开发允许数据开发人员和数据工程师关注需要实现的业务逻辑,关注需要做什么,而不是如何做。

  • 内置生命周期管理

管理、测试和部署数据集成任务可能是一项艰巨的任务。

开发人员和工程师可以通过HOP Gui管理整个项目生命周期: 在开发、测试、UAT和生产之间进行切换,管理git版本等。

HOP界面示例 

 

最后是传统的广告时间,览众科技对通过代码、商业化、开源产品实现数据集成都非常有经验,可以帮助企业打造数据集成平台,发挥数据的价值。览众科技更提供了网银机器人、企业数据智能图谱和数据服务平台,帮助客户从复杂繁琐的工作中解放出来,更好的理解数据,将数据资产变现。如果大家有兴趣,请移步公众号数字化智能运营平台,了解详情。

参考资料:

《白皮书:企业数据集成实现企业数据的最大商业价值.pdf》

https://baike.baidu.com/item/%E6%B5%81%E6%95%B0%E6%8D%AE

https://www.sohu.com/a/324935717_505779

https://azkaban.github.io/

https://hop.incubator.apache.org/

 

往期回顾

一碗“芝士(知识)”馅的元宵

数据管理重要的“砖”-元数据

技术干货一个程序猿Hive脚本解析艰辛历程

技术人员的福音-资蛛侠数据服务新版本发布啦

览众携手华为,一场不可错过的技术盛宴

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值