数据工程是一种构建数据系统的软件工程方法,旨在实现数据的收集和使用。这些数据通常用于后续分析和数据科学,其中往往涉及机器学习。要使数据可用,需要大量的计算、存储和数据处理。数据工程师设计并维护基础设施、管道和工具,使组织能够将原始数据转化为可操作的见解。
该领域源于处理海量数据、高数据速度和多样数据类型的需求,通常被称为大数据。它结合了软件工程、数据库管理和分布式系统的原理,以构建可靠、可扩展且经济高效的数据平台。
历史
数据工程的根源可追溯至20世纪70年代和80年代的信息工程方法论(IEM),该方法论侧重于数据库设计及数据分析软件。澳大利亚人Clive Finkelstein通常被称为IEM的“之父”,他在1976年至1980年间撰写了有影响力的文章,并与詹姆斯·马丁合著了一份Savant Institute报告。查尔斯·M·里克特后来帮助改进了IEM,并在1983年至1987年间设计了用户数据软件产品。
在21世纪初,数据和数据工具通常由信息技术团队管理,业务部门之间的重叠有限。21世纪10年代初,互联网和大数据的兴起带来了巨大转变。Facebook和Airbnb等公司开始使用“数据工程师”这一术语来描述专注于数据基础设施的新角色。谷歌、Facebook、亚马逊、苹果、微软和Netflix等大型企业纷纷放弃传统的ETL和存储技术,拥抱云计算以及更广泛、更集成的跨组织数据处理方法。
核心组成部分
计算
高性能计算对于数据处理和分析至关重要。数据流编程是一种广泛应用的方法,其中计算被表示为有向图的形式,即计算的操作和数据流动。流行的实现包括Apache Spark和TensorFlow,后者专门用于深度学习。更新的系统如差分数据流或及时数据流使用增量计算来提高效率。
存储
数据存储的选择取决于数据将如何使用。数据工程师优化存储和处理,以通过压缩、分区和归档降低成本。
- 数据库:对于需要在线事务处理的结构化数据,具有ACID保证和SQL查询的关系型数据库很常见。这允许数据的一致性和可靠性。NoSQL数据库在2010年代因其水平扩展能力而流行,但通过放弃ACID保证来换取可扩展性。然而,NewSQL数据库旨在提供两者的结合。
- 数据仓库:对于需要在线分析处理的结构化数据,数据仓库支持大规模分析、数据挖掘和人工智能应用,数据通常从数据库流向仓库,可通过SQL或商业智能工具访问。
- 数据湖:集中式仓库,用于存储、处理和保护大量结构化、半结构化和非结构化数据,可在本地或云端运行。
- 文件:不太结构化的数据可能以文件形式存储在文件系统、块存储和对象存储中,其中初始存储使用元数据和类似UUID的关键字。
管理
工作流管理的基本原理包括操作系统,用于指定、创建和监控数据任务,通常表示为有向无环图,这些任务被调度和定期执行。
生命周期
业务规划
业务目标在战略、战术和运营层面的计划中得以体现。数据工程通过提供透明的数据系统来支持这些计划,这些系统允许反馈和早期纠正沟通不畅。
系统设计
设计数据系统涉及数据平台的架构和应用生命周期管理策略的选择,包括数据模型的映射到物理存储。
数据建模
数据建模,基于业务需求定义数据及其结构的抽象模型,这是为后续分析准备数据的关键。
角色
数据工程师
数据工程师是软件工程师,他们创建大数据提取转换加载管道,以管理组织内数据的流动。然而,数据工程师负责构建和维护,后盾专于数据收集、转换和可支持的存储的基础设施。数据工程师使用Apache Spark、TensorFlow等框架,以及诸如Amazon Web Services、Microsoft Azure和Google Cloud等云平台。
数据工程与机器学习和人工智能密切相关,因为它为训练和部署算法提供了数据基础。它还与数据科学和商业智能相关,这些对于数据分析和决策非常有用。
工具和技术
数据工程师使用各种工具进行数据存储、计算和执行,包括实时和批处理处理。流行的计算框架包括Apache Spark和YAML Flow。存储可以是在线事务处理数据库中存储,或者数据仓库或数据湖中。工作流管理工具如Apache Airflow管理复杂的管道。
挑战和最佳实践
数据工程面临数据质量、数据处理、数据完整性日益增长等问题。在构建和运行时需要调用数据时确实如此,支持数据治理和最佳实践。实现的核心包括质量管理、核心验证、安全性和数据存储整体成本,以及人员异构型。因此,随着数据量的不断增长,数据工程在未来仍是一个动态领域,并应对新领域和开发方法时不断适应。