> Photo by Tomas Martinez on Unsplash
本文基于我之前的文章"一文了解大数据管道",我试图快速概述大数据世界的所有方面。
本文的目标是重点介绍大数据 ETL 管道的"T",该管道审查处理大量数据的主要框架。主要焦点将是 Hadoop 生态系统。
但首先,让我们回顾一下这个阶段是什么。请记住,此时您已输入了已准备好处理的原始数据。
此阶段的目标是使用单个架构清理、规范化、处理和保存数据。最终结果是具有定义良好的架构的受信任数据集。处理框架(如 Spark)用于在计算机群集中并行处理数据。
通常,您需要执行某种处理,例如:
· 验证:通过将错误数据存储在单独的存储中来验证数据并隔离坏数据。在达到特定阈值时,根据您的数据质量要求发送警报。
· 替换和清理:清理数据并将其存储在另一种格式中,以进行进一步处理,例如,用 Avro 替换效率低下的 JSON。
· 数值的规范化和标准化
· 重命名字段
请记住,目标是创建一个受信任的数据集,该数据集以后可用于下游系统。这是数据工程师的一个关键作用。这可以通过流或批处理方式完成。
在批处理的情况下,管道处理可分为三个阶段:
如果原始数据未干净或格式不正确,则需要进行预处理。此阶段包括一些基本验证,但目标是为下一阶段高效处理数据做好准备。在此阶段,您应该尝试拼合数据,并保存为二进制格式,如 Avro。这将加快进一步处理。其理念是,下一阶段将执行行级操作,嵌套查询成本高昂,因此现在拼合数据将提高下一阶段的性能。
在此阶段,数据将验证、清理、规范化并转换为存储在 Hive 或其他数据存储中的通用架构。目标是创建数据所有者理解的受信任的公共数据集。通常,创建数据规范,数据工程师的作用是应用转换来匹配规范,包括验证规则、转换、值标准化、重命名字段等。
最终结果是可以轻松查询的 Parquet 或其他列格式的数据集。选择正确的分区并优化数据以执行内部查询至关重要。
在此阶段,您可能需要部分预计算某些聚合,以提高查询性能。
此步骤是可选的,但通常是必需的。遗憾的是,在使用数据湖时,单个架构不会为所有用例服务;这是数据仓库和数据湖之间的一个区别。查询 HDFS 的效率不像数据库或数据仓库那样高,因此需要进一步的优化。
在此阶段,您可能需要取消规范化数据以使用不同的分区存储数据,以便不同利益干系人可以更高效地查询数据。其理念是创建针对不同下游系统(数据集市)优化的不同视图。
在此阶段,如果不使用 OLAP 引擎,也可以计算聚合。受信任的阶段不知道谁将查询数据,此阶段优化了使用者的数据。如果客户端具有高度交互性,您可能希望在此阶段引入快速存储层,如用于快速查询的关系数据库。或者,您也可以使用 OLAP 引擎。
对于流式处理,逻辑是相同的,但它将在定义的 DAG 中以流方式运行。Spark 允许您使用历史数据加入流,但它有一些限制。OLAP 引擎更适合实时与历史数据合并。
可用于处理的一些工具包括:
这是最广为人知的批处理框架。作为 Hadoop 生态系统的一部分,它是一个托管群集,提供令人难以置信的并行性、监视和出色的 UI。它还支持流处理(结构流)。基本上 Spark 在内存中运行 MapReduce 作业,使常规 MapReduce 性能增加 100 倍。它与 Hive 集成以支持 SQL,可用于创建 Hive 表、视图或查询数据。它有很多集成,支持许多格式,有一个巨大的社区。它由所有云提供商支持。它可以作为 Hadoop 群集的一部分在 YARN 上运行,也可以在 Kubernetes 和其他平台上运行。它有许多用于特定用例的库,如 SQL 或机器学习。
第一个统一批处理和流处理但主要关注流式处理的引擎。它可以用作像 Kafka 这样的微服务的骨干。它可以作为 Hadoop 群集的一部分在 YARN 上运行,但自成立以来,它也针对其他平台(如 Kubernetes 或 Mesos)进行了优化。它速度极快,提供实时流式处理,因此比 Spark 更好的选择,用于低延迟流处理,尤其是对于有状态流。它还具有 SQL、机器学习等库。它比 Spark 更快,是数据流更好的选项。
Apache Storm 是一个免费且开源的分布式实时计算系统。它专注于流式处理,它是 Hadoop 生态系统的托管解决方案部分。它是可扩展的,容错,保证您的数据将得到处理,并且易于设置和操作。
另一个伟大的有状态流处理引擎。Samza 允许您构建有状态的应用程序,这些应用程序可实时处理来自多个来源(包括 Apache Kafka)的数据。在 YARN 顶部运行的 Hadoop 生态系统的托管解决方案部分。
Apache Beam 它不是一个引擎本身,而是一个统一编程模型的规范,它汇集了所有其他引擎。它提供了一个可用于不同语言的编程模型,因此开发人员在处理大数据管道时不必学习新语言。然后,它将不同的后端插入可以在云或本地运行的处理步骤。Beam 支持前面提到的所有引擎,您可以轻松地在它们之间切换并在任何平台上运行它们:云、YARN、Mesos、Kubernetes。如果您要启动一个新项目,我真的建议从 Beam 开始,以确保您的数据管道是未来的证明。
处理引擎是目前在大数据词中使用的最著名的工具。作为一名大数据工程师,您将经常使用这些引擎。了解这些引擎的分布式性质并知道如何优化它们、保护它们并监视它们,这一点至关重要。
请记住,还有 OLAP 引擎提供单一解决方案来查询大量数据,而无需编写复杂的转换,而是以特定格式加载数据,使查询更具性能。
对于一个新项目,我真正建议研究Apache Beam,因为它提供了一个抽象的顶部所有其他引擎允许您更改处理引擎,而无需更改代码。
对于流处理,特别是有状态的流处理,请考虑 Flink 或 Samza。对于批处理,请使用火花。
我希望你喜欢这篇文章。请随时发表评论或分享此帖子。关注我的未来职位。
(本文翻译自Daan的文章《Processing Engines for Big Data》,参考:https://itnext.io/processing-engines-for-big-data-5827bfad6b02)