2026/2/13 2:21:38
网站建设
项目流程
网站开发协助方案,兰州网站seo哪家公司好,电子商务网站建设方案范文,外流网站建设原文#xff1a;towardsdatascience.com/how-data-engineering-evolved-since-2014-9cc85f37fea6 在这次讨论中#xff0c;我的目标是探讨数据编排和数据建模的演变趋势#xff0c;突出工具的进步及其对数据工程师的核心益处。虽然 Airflow 自 2014 年以来一直是主导者…原文towardsdatascience.com/how-data-engineering-evolved-since-2014-9cc85f37fea6在这次讨论中我的目标是探讨数据编排和数据建模的演变趋势突出工具的进步及其对数据工程师的核心益处。虽然 Airflow 自 2014 年以来一直是主导者但数据工程领域已经发生了显著变化现在它解决了更复杂的用例和需求包括支持多种编程语言、集成和增强的可扩展性。我将检查当代和可能不太常规的工具这些工具简化了我的数据工程流程使我能够轻松创建、管理和编排强大、耐用和可扩展的数据管道。在过去十年中我们见证了各种 ETL提取、转换和编排框架的“寒武纪大爆发”。许多都是开源的基于 Python这并不奇怪。最受欢迎的Airflow, 2014Luigi, 2014Prefect, 2018Temporal, 2019Flyte, 2020Dagster, 2020Mage, 2021Orchestra, 2023Apache Airflow, 2014Apache Airflow 是由 Airbnb 于 2014 年创建的于 2016 年开源并于 2018 年加入 Apache 软件基金会。这是一个可以编程创建、调度和监控工作流的平台。他们是第一个引入 DAG 概念的人。工程师使用 Python 定义 DAG有向无环图来组织和可视化任务。现在几乎每个编排工具都使用了这个概念。例如“Prefect DAG”看起来几乎一模一样。界面简单可以轻松监控数据管道https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/eea6661465a7df25fd096adf0a7cdab8.png作者提供的图片DAGs 易于理解并且是用 Python 编写的dag(default_argsdefault_args,tags[etl])defetl_pipeline():task()defextract():returnjson.loads(data_string)task(multiple_outputsTrue)deftransform(order_data_dict:dict):return{total_count:len(order_data_dict)}task()defload(total_order_value:float):print(fTotal order value is:{total_count})extractedextract()transformedtransform(extracted)load(transformed[total_count])在我之前的一篇文章中我写了一个更高级的 Airflow 示例如何成为一名数据工程师优点简单且强大的 UIDAGs、重试、任务持续时间和失败的详细视图——在所有这些年之后一切看起来都如此熟悉。社区支持经过这么多年开源项目拥有庞大的追随者群体。它非常受欢迎并为各种数据源和目的地提供了大量的插件。结合定期更新它成为许多数据开发者的明显选择。PythonPython 等于定制和脚本化。在这里一切看起来都如此灵活。在我多年前的一篇文章中我成功定制了 ML 连接器而且做起来非常容易 [1]。使用 Google AI 平台和自定义环境容器训练您的 ML 模型Jinja 和参数这个特性对许多 DBT 用户来说应该很熟悉它允许我们以创建模板化模型在 DBT 中的类似方式创建动态管道。Luigi2014另一个用于我们的 ETL 管道的编排器。由 Spotify 开发用于处理大量数据处理工作负载Luigi 具有命令行界面和出色的可视化能力。然而即使是简单的 ETL 管道也需要一些 Python 编程技能。尽管如此Luigi 在许多情况下表现良好。优势HDFS 支持Luigi 为团队提供了一个方便的工具箱包括任务模板包括 HDFS 和本地文件的文件系统抽象。这有助于保持操作原子性和数据管道的一致性使一切运行顺畅。易于使用拥有强大的追随者和贡献者社区。项目得到维护。优秀的用户界面Web 界面允许搜索、过滤和优先处理 DAGs这使得处理管道依赖关系变得容易。强大的基础设施Luidgi 支持使用多个工具、A/B 测试、推荐和外部报告的复杂管道。根据我的经验它非常适合严格和直接的管道尽管实现复杂的分支逻辑可能具有挑战性。即使是 Spotify 本身也在 2019 年从它转向。他们说维护起来不容易并且需要多语言支持[2]。为什么我们切换了我们的数据编排服务 - Spotify 工程他们转向了 Flyte更多内容见下文。Prefect2018成立于 2018 年Prefect 旨在克服工程师在使用其他编排工具如 Airflow时面临的挑战。Prefect 采用了一个比 Airflow 更简单的系统。您可以使用Python 装饰器轻松地将代码转换为“Prefect DAG”而不是使用 DAG 结构。它提供了一个混合执行模型允许任务在本地或任何云平台上执行。Prefect 将自己定位为“数据流自动化的新标准”。优势开源灵活性和多种部署选项。轻量级只需一个命令我们就可以设置编排的开发环境。动态映射允许根据另一个任务的输出动态执行任务。Python 优先凭借 Python 优先的经验Prefect 提供了更干净的抽象类似于 Airflow。监控使用 Prefect 的 Cloud UI 监控关键操作指标并运行失败。它看起来直观且美观。警报和通知Discord、电子邮件、Slack 以及更多渠道用于我们的管道警报。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/3ec19f57d7cad2cc9afa52247fe00041.png作者图片开源版本提供了我们在 Airflow 中通常使用的一切包括诸如调度、本地密钥、重试、并发管理、扩展功能以及出色的日志记录等功能。使用Prefect Cloud我们得到一些额外的功能例如自动化、Webhooks、事件源和针对托管环境可能需要的 Workspace 和组织。关键组件将是我们要构建的任务和流程。我们可以用 Prefect 的task装饰器来描述管道中的每一步——流程的基本单元。对于每个任务我们可以通过参数提供设置。可以是任何东西——标签、描述、重试、缓存设置等。以下是一个示例task。taskdefextract_data(source,pipe):...returnresulttaskdefload_data_to_dwh(data,database:bigquery):...returntable_nametaskdefrun_data_checks(dataset,row_conditions:qa_dataset):...在下面的示例中我们使用flow装饰器创建一个流程。该流程将按顺序执行所有任务生成输入和输出并将它们从一个任务传递到另一个任务。flowdefetl_workflow():s3_dataextract_data(google_spreadsheet,pipe_object_with_settings)datasetload_data_to_dwh(s3_data,database)run_data_checks(table_name,rules)if__name____main__:etl_workflow()Prefect 使用工作池来有效地管理工作分配并在所需环境中测试、开发、生产优先处理任务以实现最佳性能和自动化测试。我们可以在本地或云中创建工作者代理。Prefect 可以使用pip安装pip install-Uprefect2.17.1# or get the latest version from prefectpip install-U githttps://github.com/PrefectHQ/prefect这里是一个简单的脚本来从 NASA API 提取数据# ./asteroids.pyimportrequests API_KEYfsMlsu69Y7KdMNB4P2m9sqIpw5TGuF9IuYkhURzWASTEROIDS_API_URLhttps://api.nasa.gov/neo/rest/v1/feeddefget_asteroids_data():print(Fetching data from NASA Asteroids API...)sessionrequests.Session()urlASTEROIDS_API_URL apiKeyAPI_KEY requestParams{api_key:apiKey,start_date:2023-04-20,end_date:2023-04-21}responserequests.get(url,paramsrequestParams)print(response.status_code)near_earth_objects(response.json())[near_earth_objects]returnnear_earth_objectsif__name____main__:get_asteroids_data()我们可以将其转换为以下流程# my_nasa_pipeline.pyimportrequests# an HTTP client library and dependency of Prefectfromprefectimportflow,task API_KEYfsMlsu69Y7KdMNB4P2m9sqIpw5TGuF9IuYkhURzWASTEROIDS_API_URLhttps://api.nasa.gov/neo/rest/v1/feedtask(retries2)defget_asteroids_data(api_key:str,url:str):Get asteroids close to Earth for specific datess - will retry twice after failingprint(Fetching data from NASA Asteroids API...)sessionrequests.Session()urlASTEROIDS_API_URL apiKeyAPI_KEY requestParams{api_key:apiKey,start_date:2023-04-20,end_date:2023-04-21}responsesession.get(url,paramsrequestParams)print(response.status_code)near_earth_objects(response.json())[near_earth_objects]returnnear_earth_objectstaskdefsave_to_s3(data):Save data to S3 storage# Do some ETL hereresultprint(data)returnresultflow(log_printsTrue)defasteroids_info(date:str2023-04-21): Given a date, saves data to S3 storage asteroids_dataget_asteroids_data(API_KEY,ASTEROIDS_API_URL)print(fClose to Eart asteroids:{asteroids_data})s3_locationsave_to_s3(asteroids_data)print(fSaved to:{s3_location})if__name____main__:asteroids_info(2023-04-21)运行流程python my_nasa_pipeline.pyhttps://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/3699e987960ede79ef4cc5e812c7f49d.png作者图片创建 Prefect 服务器现在我们想要创建一个部署来安排我们的流程运行# create_deployment.pyfromprefectimportflowif__name____main__:flow.from_source(# sourcehttps://github.com/your_repo/prefect_nasa.git,source./,entrypointmy_nasa_pipeline.py:asteroids_info,).deploy(namemy-first-deployment,work_pool_nametest-pool,cron0 1 * * *,)在你的命令行中运行python create_deployment.py# Run the workflow manually# prefect deployment run repo-info/my-first-deploymenthttps://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5500a21d38c212e24dffb83722aacac8.png作者图片为了运行我们的计划工作流程我们想要创建一个工作池prefect work-pool create test-pool prefect worker start--pooltest-poolprefect server starthttps://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/12c8e67d5c7c72d3ae8037eed045e751.png作者图片https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9278b2493385c6c37e30edb7038f42ea.png作者图片或者我们可以使用此命令并使用提示来创建部署prefect deploy./my_nasa_pipeline.py:asteroids_info-n my-first-deploymenthttps://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f82043c0563d964828ac5966f0629c41.png作者图片Prefect 集成Prefect 通过其强大的集成集变得更加强大完整的列表可以在这里找到 [3]。例如我们可以使用 Prefect 与 DBT 结合这使得我们的数据建模更加强大。在你的命令行中运行pip install-U prefect-dbt# register blocks to start using tghem in Prefectprefect block register-m prefect_dbt现在我们可以使用 Prefect 与dbt-core结合fromprefectimportflowfromprefect_dbt.cli.commandsimportDbtCoreOperationflowdeftrigger_dbt_flow()-str:resultDbtCoreOperation(commands[pwd,dbt debug,dbt run],project_dirPROJECT-DIRECTORY-PLACEHOLDER,profiles_dirPROFILES-DIRECTORY-PLACEHOLDER).run()returnresultif__name____main__:trigger_dbt_flow()在我的一个故事中我写了如何配置 DBT 以便从任何环境中方便地执行数据库数据转换数据工程师指南时间2019Temporal 支持通过 API 触发工作流程并允许多个并发工作流程执行。优点容错和重试对于任何失败的任务具有自动重试的能力。管理可能持续几天甚至几个月的长时间运行工作流程的能力。可扩展性适应高吞吐量工作负载的能力。增强监控对工作流程执行和历史数据的洞察。支持时间查询和事件驱动的工作流程。多样性支持多种编程语言。Temporal 可以编排复杂的数据处理工作流程在保持整个过程中数据一致性和可靠性的同时有效地管理失败。它管理分布式系统状态的能力使 Temporal 能够提高资源分配。Temporal 可以适应持续运行的工作流程使各种实体的生命周期建模成为可能。Temporal 工作流程本质上是动态的能够执行多步核心业务逻辑。它们可以向外部进程发送或等待信号从而促进对人类的提醒或启动干预过程。Flyte2020Flyte 是一个基于 Kubernetes 构建的开源编排工具用于管理机器学习和 AI 工作流程。由于数据对业务至关重要运行大规模计算作业是必要的但在操作上具有挑战性。扩展、监控和管理集群可能会给产品团队带来负担减缓创新。这些工作流程还具有复杂的数据依赖关系没有平台抽象协作将变得困难。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ed3d6b5d188022f9c9b5ef91c7c619d6.png作者图片Flyte 旨在通过简化这些任务来提高机器学习和数据处理的发展速度。它确保了可靠的、可扩展的计算让团队能够专注于业务逻辑。此外它促进了团队间的共享和重用一次解决问题并增强协作因为数据和机器学习角色正在合并。优势端到端数据溯源这允许你在每个执行阶段监控你的数据和 ML 工作流程的健康状况。轻松分析数据流以确定任何错误的来源。参数和缓存考虑到机器学习的设计它允许动态管道和缓存预计算工件的使用。例如在超参数优化期间你可以轻松地为每次运行应用不同的参数。如果一个任务在之前的执行中已经被计算Flyte 将有效地使用缓存的输出节省时间和资源。多租户和无服务器Flyte 消除了管理基础设施的需求让你能够专注于业务挑战而不是机器。作为一个多租户服务它为你的工作提供了一个隔离的存储库允许你独立部署和扩展。你的代码带有版本号与其依赖项一起容器化并且每次执行都是可重现的。可扩展Flyte 任务可能非常复杂。它可能是一个简单的 ETL 作业或是对远程 Hive 集群或分布式 Spark 执行的调用。最佳解决方案可能托管在其他地方因此任务的可扩展性允许你将外部解决方案集成到 Flyte 和你的基础设施中。异构和多语言支持数据管道可能很复杂。每一步都可以用不同的语言编写并使用各种框架。一步可能使用 Spark 来准备数据而下一步则训练深度学习模型。Dagster2020Dagster 是一个开源的数据编排器它促进了数据管道的开发、管理和监控。它支持作业监控、调试、数据资产检查和回填执行。本质上Dagster 充当构建数据管道的框架在您的数据生态系统中作为抽象层。异构一切优势异构Dagster 提供了一个全面的接口使用户能够在一个地方构建、测试、部署、运行和优化他们的数据管道。这种统一的方法简化了数据工程师的工作流程使他们更容易管理数据处理的整个生命周期。改进的抽象它通过软件定义资产SDAs采用声明式编程这增强了抽象并简化了管道设计。用户从共享、可重用和可配置的组件中受益这些组件促进了高效的数据处理。此外Dagster 还包括声明式调度功能使用户能够实施新鲜度策略确保数据是最新的。测试能力为确保数据的完整性Dagster 通过定义输入和输出可接受值的类型来整合质量检查。它还支持代码和数据的资产版本控制以及增强性能的缓存机制。优秀的监控功能Dagster 配备了内置的可观察性仪表板提供对管道性能和健康状况的实时监控。其内置的可测试性功能允许用户无缝验证其管道的功能。强大的集成Dagster 与您数据生态系统中各种工具提供强大的集成包括 Airflow、dbt、Databricks、Snowflake、Fivetran、Great Expectations、Spark 和 Pandas。Mage2021看起来 Mage 是针对速度和可扩展性而创建的专门针对 Kubernetes 等容器化环境。2021 年创建的 Mage 旨在满足微服务架构中对实时数据处理日益增长的需求。使用 Mage我们可以使用多种编程语言如 R、Python 和 SQL结合强大的模板功能。Mage 无疑在编排空间引入了一些新事物。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/a87824d42aa9d6ba5be1af99750ba383.pngMage 的 DBT 支持。图片由作者提供。优势DRY 组件和 DBT 支持采用模块化设计构建例如我们可以轻松集成不同的仓库、包和组件。轻松构建、运行和管理您的 dbt 模型。对于数据网格平台非常有用。成本效益声称通过明显的成本效益优化资源分配和消耗。原生 Kubernetes为现代数据平台架构提供简易部署。实时数据管道与实时数据完美配合。对于许多公司来说摄取和转换流数据是一个真正的痛点。内置集成支持数十个源和目标例如 Amazon S3、BigQuery、Redshift、PowerBI、Tableau、Salesforce、Snowflake 等。魔法师的用户界面还提供了在部署前预览您创建的管道的能力。此功能允许用户可视化和检查其管道的结构和功能确保在上线前一切设置正确。通过提供此预览选项Mage 帮助用户识别任何可能需要的问题或调整从而最终导致更顺畅的部署过程并提高整体工作流程效率。Mage 的关键概念与 Prefect 几乎相同项目、块、管道、数据产品、回填、触发器和运行。允许我预览代码输出的交互式笔记本 UI 是我最喜欢的功能之一。Orchestra2024由 Hugo Lu 于 2023 年创建。Orchestra 是新一代编排解决方案专注于无服务器架构以在一个平台上统一所有内容。优势无服务器模块化架构您不再需要 Kubernetes 集群。快速交付在几分钟内构建企业级编排。加强监控不要浪费时间寻找错误。最先进的集成数百种开箱即用的集成。结论这项研究强调在数据管道编排中强调异构性、支持多种编程语言、有效使用元数据和采用数据网格架构是构建现代、健壮和可扩展数据平台的关键趋势。例如Apache Airflow 提供了各种预构建的数据连接器这些连接器可以促进跨各种云供应商包括 AWS、GCP 和 Azure的无缝 ETL 任务。然而它缺少诸如任务内检查点和缓存等特性并且没有针对机器学习管道进行优化。预计在未来几年中支持多种编程语言将成为一个重要趋势。例如Temporal 兼容各种语言和运行时而 Airflow 主要强调 Python。数据网格时代的协作是数据空间成功的关键。您的组织可能有专门负责数据管理、分类模型和预测模型的独立团队所有这些团队都可以协作使用同一个平台——例如 Mage 或 Flyte。这允许他们在同一个工作空间内操作而不会相互干扰。尽管工具的演变确实令人着迷但数据工程的基本原则保持不变数据工程师的 Python我们可以见证数据提取和转换的各种 ETL 框架的“寒武纪大爆发”。许多都是开源的并且基于 Python这并不令人惊讶。现代数据工程推荐阅读[1]www.datacamp.com/tutorial/ml-workflow-orchestration-with-prefect[2]docs.prefect.io/latest/concepts/work-pools/[3]docs.prefect.io/latest/integrations/prefect-dbt/[4]docs.prefect.io/latest/integrations/prefect-dbt/[5]engineering.atspotify.com/2022/03/why-we-switched-our-data-orchestration-service/[6]thenewstack.io/flyte-an-open-source-orchestrator-for-ml-ai-workflows/?utm_referrerhttps%3A%2F%2Fwww.google.com%2F[7]atlan.com/dagster-data-orchestration/