什么是数据工程,它适合您吗?
目录
大数据。云数据。AI 训练数据和个人识别数据。数据无处不在,并且每天都在增长。软件工程已经发展到包括数据工程,这是一个直接关注数据的传输、转换和存储的子学科,这才有意义。
也许您已经看到过大数据职位发布,并对处理 PB 级数据的前景很感兴趣。也许您对生成对抗网络如何从底层数据创建逼真的图像感到好奇。也许您甚至从未听说过数据工程,但对开发人员如何处理当今大多数应用程序所需的大量数据感兴趣。
无论您属于哪个类别,这篇介绍性文章都适合您。您将对该领域有一个广泛的了解,包括数据工程是什么以及它需要什么样的工作。
在本文中,您将了解:
- 数据工程领域的现状如何
- 数据工程如何在行业中使用
- 数据工程师的各种客户是谁
- 什么是数据工程领域的一部分,什么不是
- 如何决定是否要将数据工程作为一门学科
首先,您将回答有关该领域最紧迫的问题之一:无论如何,数据工程师都做什么?
数据工程师做什么的?
数据工程是一门非常广泛的学科,有多个标题。在许多组织中,它甚至可能没有特定的头衔。因此,最好首先确定数据工程的目标,然后讨论什么样的工作会带来预期的结果。
数据工程的最终目标是提供有组织、一致的数据流,以实现数据驱动的工作,例如:
- 训练机器学习模型
- 进行探索性数据分析
- 使用外部数据填充应用程序中的字段
这种数据流可以通过多种方式实现,所需的特定工具集、技术和技能将因团队、组织和预期结果而异。然而,一个常见的模式是数据管道。这是一个由独立程序组成的系统,这些程序对传入或收集的数据执行各种操作。
数据管道通常分布在多个服务器上:
此图是一个简化的示例数据管道,可让您对可能遇到的架构有一个非常基本的了解。您会在更下方看到更复杂的表示。
数据可以来自任何来源:
- 物联网设备
- 车辆遥测
- 房地产数据馈送
- Web 应用程序上的正常用户活动
- 您能想到的任何其他收集或测量工具
根据这些来源的性质,传入的数据将以实时流或以某种规律的节奏分批进行处理。
数据所经过的管道是数据工程师的职责。数据工程团队负责设计、构建、维护、扩展,通常还负责支持数据管道的基础设施。他们还可能负责传入的数据,或者更常见的是负责数据模型以及数据的最终存储方式。
如果您将数据管道视为一种应用程序,那么数据工程开始看起来像任何其他软件工程学科。
许多团队也在朝着构建数据平台的方向发展。在许多组织中,仅仅有一个管道将传入数据保存到某个地方的 SQL 数据库是不够的。大型组织有多个团队,需要对不同类型的数据进行不同级别的访问。
例如,人工智能 (AI)团队可能需要标记和拆分已清理数据的方法。商业智能 (BI)团队可能需要轻松访问聚合数据并构建数据可视化。数据科学团队可能需要数据库级别的访问权限才能正确探索数据。
如果您熟悉 Web 开发,那么您可能会发现这种结构类似于模型-视图-控制器 (MVC) 设计模式。使用 MVC,数据工程师负责模型,AI 或 BI 团队处理视图,所有组在控制器上进行协作。构建满足所有这些需求的数据平台正成为拥有依赖数据访问的不同团队的组织的主要优先事项。
既然您已经了解了数据工程师的一些工作以及他们与所服务的客户之间的联系,那么了解更多关于这些客户以及数据工程师对他们的职责会很有帮助。
数据工程师的职责是什么?
依赖数据工程师的客户就像数据工程团队本身的技能和产出一样多样化。无论您从事哪个领域,您的客户始终会决定您解决什么问题以及您如何解决这些问题。
在本节中,您将通过数据需求的视角了解数据工程团队的一些常见客户:
- 数据科学和人工智能团队
- 商业智能或分析团队
- 产品团队
在这些团队中的任何一个能够有效工作之前,必须满足某些需求。特别是,数据必须是:
- 可靠地路由到更广泛的系统中
- 标准化为合理的数据模型
- 清理以填补重要空白
- 所有与成员相关的人都可以访问
这些要求在Monica Rogarty的优秀文章The AI Hierarchy of Needs 中有更详细的说明。作为数据工程师,您有责任满足客户的数据需求。但是,您将使用多种方法来适应他们各自的工作流程。
数据流
要对系统中的数据进行任何处理,首先必须确保它能够可靠地流入和流过系统。输入几乎可以是您可以想象的任何类型的数据,包括:
- JSON或 XML 数据的实时流
- 每小时更新一批视频
- 每月抽血数据
- 每周批量标记图像
- 来自部署传感器的遥测
数据工程师通常负责使用这些数据,设计一个系统,该系统可以将这些数据作为来自一个或多个来源的输入,对其进行转换,然后将其存储给客户。这些系统通常称为ETL管道,代表提取、转换和加载。
数据流责任主要属于提取步骤。但数据工程师的责任并不止于将数据拉入管道。他们必须确保管道足够健壮,以应对意外或格式错误的数据、源离线和致命错误。正常运行时间非常重要,尤其是在您使用实时数据或时间敏感数据时。
无论您的客户是谁,您维护数据流的责任都非常一致。但是,有些客户可能比其他客户要求更高,尤其是当客户是依赖于实时更新数据的应用程序时。
数据规范化和建模
流入系统的数据很棒。然而,在某些时候,数据需要符合某种架构标准。规范化数据涉及使用户更容易访问数据的任务。这包括但不限于以下步骤:
- 删除重复项(重复数据删除)
- 修复冲突数据
- 使数据符合指定的数据模型
这些过程可能发生在不同的阶段。例如,假设您在一个拥有数据科学家和 BI 团队的大型组织中工作,他们都依赖于您的数据。您可以将非结构化数据存储在数据湖中,供您的数据科学客户用于探索性数据分析。您还可以将规范化的数据存储在关系数据库中,或者存储在更专门构建的数据仓库中,以供 BI 团队在其报告中使用。
您可能有更多或更少的客户团队,或者可能有一个使用您数据的应用程序。下图显示了上一个管道示例的修改版本,突出显示了某些团队可能访问数据的不同阶段:
在此图中,您会看到一个假设的数据管道以及您经常会发现不同客户团队在工作的阶段。
如果您的客户是产品团队,那么架构良好的数据模型至关重要。一个深思熟虑的数据模型可能是一个缓慢的、几乎没有响应的应用程序和一个运行时好像它已经知道用户想要访问什么数据的区别。这些类型的决策通常是产品和数据工程团队协作的结果。
数据规范化和建模通常是 ETL转换步骤的一部分,但它们不是该类别中唯一的步骤。另一个常见的转型步骤是数据清理。
数据清洗
数据清理与数据规范化密切相关。有些人甚至认为数据规范化是数据清理的一个子集。但是,虽然数据规范化主要侧重于使不同的数据符合某些数据模型,但数据清理包括许多使数据更加统一和完整的操作,包括:
- 将相同的数据转换为单一类型(例如,强制整数字段中的字符串为整数)
- 确保日期格式相同
- 如果可能,填写缺失的字段
- 将字段的值限制在指定范围内
- 删除损坏或不可用的数据
数据清洗可以适应上图中的重复数据删除和统一数据模型步骤。但实际上,这些步骤中的每一个都非常大,并且可以包含任意数量的阶段和单独的过程。
您为清理数据而采取的具体操作将高度依赖于输入、数据模型和所需的结果。然而,干净数据的重要性是不变的:
- 数据科学家需要它来执行准确的分析。
- 机器学习工程师需要它来构建准确且可推广的模型。
- 商业智能团队需要它为业务提供准确的报告和预测。
- 产品团队需要它来确保他们的产品不会崩溃或向用户提供错误信息。
数据清理责任落在许多不同的肩上,取决于整个组织及其优先级。作为数据工程师,您应该努力尽可能地自动化清理,并对传入和存储的数据进行定期抽查。您的客户团队和领导层可以深入了解什么构成了符合其目的的干净数据。
数据可访问性
数据可访问性不像数据规范化和清理那样受到关注,但它可以说是以客户为中心的数据工程团队更重要的职责之一。
数据可访问性是指客户访问和理解数据的难易程度。根据客户的不同,这是一种非常不同的定义:
- 数据科学团队可能只需要可通过某种查询语言访问的数据。
- 分析团队可能更喜欢按某些指标分组的数据,可通过基本查询或报告界面访问。
- 产品团队通常希望通过不经常更改的快速和直接查询访问数据,并着眼于产品性能和可靠性。
由于较大的组织为这些团队和其他人提供相同的数据,因此许多组织已经开始为不同的团队开发自己的内部平台。一个很好的成熟例子是叫车服务优步,它分享了其令人印象深刻的大数据平台的许多细节。
事实上,许多数据工程师发现自己正在成为平台工程师,这表明数据工程技能对数据驱动型业务的持续重要性。因为数据可访问性与数据的存储方式密切相关,所以它是 ETL加载步骤的主要组成部分,它指的是如何存储数据以供以后使用。
现在您已经遇到了一些常见的数据工程客户并了解了他们的需求,现在是时候更仔细地了解您可以开发哪些技能来帮助满足这些需求。
什么是常见的数据工程技能?
数据工程技能在很大程度上与软件工程所需的技能相同。然而,数据工程师往往更关注一些领域。在本节中,您将了解几个重要的技能组合:
- 一般编程概念
- 数据库
- 分布式系统和云工程
这些中的每一个都将在使您成为全面的数据工程师方面发挥关键作用。
一般编程技巧
数据工程是软件工程的一门专业,因此软件工程的基础知识位于此列表的顶部是有道理的。与其他软件工程专业一样,数据工程师应该了解DRY(不要重复自己)、面向对象编程、数据结构和算法等设计概念。
与其他专业一样,也有一些受欢迎的语言。在撰写本文时,您在数据工程职位描述中最常看到的是 Python、Scala 和Java。是什么让这些语言如此受欢迎?
Python 的流行有几个原因。最大的问题之一是它的无处不在。从许多方面来看,Python 是世界上最流行的三大编程语言之一。例如,它在 2020 年 11 月的TIOBE 社区指数中排名第二,在 Stack Overflow 的2020 年开发者调查中排名第三。
它也被机器学习和人工智能团队广泛使用。紧密合作的团队通常需要能够使用同一种语言进行交流,而 Python 仍然是该领域的通用语言。
Python 流行的另一个更有针对性的原因是它在Apache Airflow等编排工具和Apache Spark等流行工具的可用库中的使用。如果一个组织使用这些工具,那么了解他们使用的语言是必不可少的。
Scala也很受欢迎,与 Python 一样,部分原因是使用它的工具很受欢迎,尤其是 Apache Spark。Scala 是一种运行在 Java 虚拟机 (JVM) 上的函数式语言,使其能够与 Java 无缝结合使用。
Java在数据工程中并不那么流行,但您仍然会在很多职位描述中看到它。这部分是因为它在企业软件堆栈中无处不在,部分是因为它与 Scala 的互操作性。随着 Scala 被用于 Apache Spark,一些团队也使用 Java 是有道理的。
除了一般的编程技能,熟悉数据库技术也是必不可少的。
数据库技术
如果您要移动数据,那么您将大量使用数据库。从广义上讲,您可以将数据库技术分为两类:SQL 和 NoSQL。
SQL 数据库是关系数据库管理系统(RDBMS),它对关系进行建模并使用结构化查询语言或 SQL 进行交互。这些通常用于对由关系定义的数据进行建模,例如客户订单数据。
注意:如果您想了解有关 SQL 以及如何在 Python 中与 SQL 数据库交互的更多信息,请查看Python SQL 库简介。
NoSQL 通常意味着“其他一切”。这些是通常存储非关系数据的数据库,例如:
- 像Redis或 AWS 的DynamoDB这样的键值存储
- MongoDB或Elasticsearch等文档存储
- 图数据库,如Neo4j
- 其他不太常见的数据存储
虽然您不需要了解所有数据库技术的来龙去脉,但您应该了解这些不同系统的优缺点,并能够快速学习其中的一两个。
数据工程师工作的系统越来越多地位于云上,数据管道通常分布在多个服务器或集群上,无论是否在私有云上。因此,未来的数据工程师应该了解分布式系统和云工程。
分布式系统和云工程
ETL 管道等数据工程技术的主要优点之一是它们适合于分布式系统的实现。一个常见的模式是让独立的管道段在由消息队列(如RabbitMQ或Apache Kafka )编排的单独服务器上运行。
了解如何设计这些系统、它们的好处和风险是什么以及何时应该使用它们是必不可少的。
这些系统需要许多服务器,而地理上分散的团队通常需要访问它们包含的数据。Amazon Web Services、Google Cloud 和 Microsoft Azure 等私有云提供商是构建和部署分布式系统的非常流行的工具。
对云提供商的主要产品以及一些更流行的分布式消息传递工具的基本了解将帮助您找到第一份数据工程工作。您可以期望在工作中更深入地学习这些工具。
到目前为止,您已经了解了很多关于数据工程是什么。但是因为该学科没有标准的定义,并且因为有很多相关的学科,所以您也应该了解数据工程不是什么。
什么不是数据工程?
许多领域都与数据工程密切相关,您的客户通常是这些领域的成员。了解您的客户很重要,因此您应该了解这些领域以及它们与数据工程的区别。
以下是一些与数据工程密切相关的领域:
- 数据科学
- 商业智能
- 机器学习工程
在本节中,您将从数据科学开始,仔细研究这些领域。
数据科学
如果数据工程取决于您如何移动和组织大量数据,那么数据科学则取决于您如何处理这些数据。
数据科学家通常会查询、探索并尝试从数据集中获取见解。他们可能会编写一次性脚本以用于特定数据集,而数据工程师倾向于使用软件工程最佳实践创建可重用的程序。
数据科学家使用统计工具,例如k 均值聚类和回归以及机器学习技术。他们经常使用 R 或 Python 并尝试从数据中获得洞察力和预测,以指导企业各个层面的决策。
注意:您想探索数据科学吗?查看以下任一学习路径:
数据科学家通常具有科学或统计背景,他们的工作风格反映了这一点。他们致力于回答特定研究问题的项目,而数据工程团队则专注于构建可扩展、可重用和快速的内部产品。
数据科学家回答研究问题的一个很好的例子可以在生物技术和健康技术公司中找到,在这些公司中,数据科学家探索有关药物相互作用、副作用、疾病结果等的数据。
商业智能
商业智能类似于数据科学,但有一些重要区别。数据科学专注于预测和做出未来预测,而商业智能则专注于提供业务当前状态的视图。
这两个组都由数据工程团队提供服务,甚至可能在同一个数据池中工作。但是,商业智能与分析业务绩效和从数据生成报告有关。然后,这些报告可帮助管理层在业务层面做出决策。
与数据科学家一样,商业智能团队依赖数据工程师来构建工具,使他们能够分析和报告与其关注领域相关的数据。
机器学习工程
机器学习工程师是您经常接触的另一个群体。你可能会和他们做类似的工作,或者你甚至可能被嵌入到一个机器学习工程师团队中。
和数据工程师一样,机器学习工程师更专注于构建可重用的软件,而且很多人都有计算机科学背景。然而,他们不太专注于构建应用程序,而更专注于构建机器学习模型或设计用于模型的新算法。
注意:如果您对机器学习领域感兴趣,请查看Machine Learning With Python学习路径。
产品团队经常在面向客户的产品中使用机器学习工程师构建的模型。您作为数据工程师提供的数据将用于训练他们的模型,使您的工作成为与您合作的任何机器学习团队的能力的基础。
例如,机器学习工程师可能会为您公司的产品开发一种新的推荐算法,而数据工程师会提供用于训练和测试该算法的数据。
需要了解的一件重要事情是,您在此处查看的领域通常并不明确。具有数据科学、BI 或机器学习背景的人可能会在组织中从事数据工程工作,而作为数据工程师,您可能会被要求协助这些团队的工作。
你可能有一天会发现自己重新构建了一个数据模型,另一个构建了一个数据标记工具,然后优化了一个内部深度学习框架。优秀的数据工程师灵活、好奇,并愿意尝试新事物。
结论
这完成了您对数据工程领域的介绍,这是对具有计算机科学和技术背景或兴趣的人最需要的学科之一!
在本教程中,您学习了:
- 什么数据工程师做
- 数据工程师的客户是谁
- 数据工程常见的技能有哪些
- 什么数据工程不是
现在,您可以决定是否要深入了解这个令人兴奋的领域。数据工程听起来很吸引你吗?你有兴趣更深入地探索它吗?让我们在评论中知道!
- 点赞
- 收藏
- 关注作者
评论(0)