赞
踩
大家好,我是蔡顺峰,是白鲸开源的高级数据工程师,同时也是Apache DolphinScheduler社区的committer和PMC member。今天我要分享的主题是《Worker Task执行原理》。
整个分享会分为三个章节:
Apache DolphinScheduler是一个分布式、易扩展的可视化工作流调度开源系统,适用于企业级场景。
它提供了以下主要功能,通过可视化操作,提供了工作流和任务全生命周期的数据处理解决方案。
下面介绍一下整体的设计背景,以下是官网提供的设计架构图。
从架构图中我们可以看到,Apache DolphinScheduler由几个主要组件构成:
Master和Worker的交互过程如下:
任务提交:Master完成DAG切分后,将任务提交到数据库,并根据不同的分发策略选择合适的Worker分组进行任务分发。
任务接收:Worker接收到任务后,查看自身情况决定是否接收任务。接收成功或失败都会有反馈。
任务执行:Worker处理任务,并将状态更新为running,回馈给Master。Master更新任务的状态和启动时间等信息到数据库。
任务完成:任务执行完毕后,Worker发送finish事件通知Master,Master返回ACK确认。如果没有ACK,Worker会不断重试,确保任务事件不丢失。
Worker接收任务时会进行以下操作:
Worker会判断自身是否过载,如果过载会拒收任务。Master接收到任务分发失败的返回后,会根据分发策略继续选择其他Worker进行任务分发。
Worker任务的具体执行过程包括以下几个步骤:
接下来我们详细讲解任务的具体执行过程。
在任务执行开始之前,首先会初始化一个上下文(context)。此时会设置任务的开始时间(start time)。为了保证任务的准确性,需要确保Master和Worker之间的时间同步,避免时间漂移。随后,将任务状态设置为running,并回馈给Master,告知任务开始运行。
由于大部分任务运行在Linux操作系统上,因此需要进行租户和文件的处理:
处理完租户后,Worker会创建具体的执行目录。执行目录的根目录是可配置的,并需要进行相应的授权。默认情况下,目录的权限设置为755。
任务在执行过程中可能需要使用各种资源文件,例如从AWS S3或HDFS集群中拉取文件。系统会将这些文件下载到Worker的临时目录中,供后续任务使用。
在Apache DolphinScheduler中,支持对参数变量进行替换。主要包括以下两类:
通过上述步骤,任务的执行环境和所需资源都已准备就绪,接下来便可正式开始任务的执行。
在Apache DolphinScheduler中,我们支持多种类型的任务,每种任务类型适用于不同的场景和需求。下面我们详细介绍几大类任务类型及其具体组件。
这些组件常用于执行脚本文件,适用于各种脚本语言和协议:
其商业版还支持通过执行JAR包来运行Java应用程序。
这些组件用于实现任务的逻辑控制和流程管理:
这些组件主要用于大数据处理和分析:
这些组件用于在容器环境中运行任务:
用于确保数据质量:
这些组件用于与数据科学和机器学习环境进行交互:
这些组件用于机器学习任务的管理和执行:
整体来看,Apache DolphinScheduler支持三四十个组件,涵盖了从脚本执行、大数据处理到机器学习等多个领域。如果有兴趣了解更多,请访问官网
查看详细文档。
在Apache DolphinScheduler中,任务类型被抽象成多种不同的处理模式,以适应各种不同的运行环境和需求。
下面我们详细介绍任务类型的抽象和执行过程。
Worker是一个JVM服务,部署在某个服务器上。对于一些脚本组件(如Shell、Python)和本地运行的任务(如Spark Local),它们会起一个单独的进程运行。
此时,Worker与这些任务的交互通过进程ID(PID)进行。
不同的数据源可能需要不同的适配处理。针对SQL和存储过程任务,我们做了面向不同数据源的抽象。
例如,MySQL、PostgreSQL、AWS Redshift等。通过这种抽象,可以灵活地适配和扩展不同的数据库类型。
远程任务指的是在远程集群上运行的任务,如AWS EMR、SeaTunnel集群、Kubernetes集群等。Worker不会在本地执行这些任务,而是向远程集群提交任务,并监听其状态和消息。这种模式适用于云环境的扩展。
不同插件会走不同的处理模式,因此日志收集也有所不同:
系统会扫描任务日志,查找需要动态替换的参数变量。例如,DAG中的任务A可能会生成一些输出参数,这些参数需要传递给下游的任务B。
在此过程中,系统会读取日志并替换参数变量。
持有这些任务ID,可以进行更多的数据查询和远程任务操作。例如,在工作流停止时,可以通过任务ID调用对应的取消接口,停止正在运行的任务。
当任务执行完毕后,需要进行一系列结束动作:
任务完成后,系统会检查是否需要发送告警。例如,对于SQL任务,如果查询结果需要发送告警,系统会通过RPC与告警服务(alert)交互发送告警信息。
Worker会将任务的完成事件(finish事件)回馈给Master。Master更新任务状态到数据库,并进行DAG状态流转。Worker会将任务开始时创建的上下文从内存中移除。清理任务执行过程中生成的文件路径。如果处于调试模式(开发模式),这些文件不会被清理,保留以便调试失败任务。
通过上述步骤,任务实例的整个执行流程就完成了。
如果您对Apache DolphinScheduler感兴趣,并希望为开源社区做贡献,欢迎参考我们的贡献指南。社区非常欢迎大家积极贡献,包括但不限于:
对于新手贡献者,可以在社区的GitHub issue中搜索标签为good first issue
的问题。这些问题通常比较简单,适合初次贡献的用户。
白鲸开源是一家开源原生的 DataOPS 商业公司,由多个Apache基金会成员创立。公司主要参与贡献了两个Apache开源项目,一个是Apache DolphinScheduler,另一个是Apache SeaTunnel。基于这两个项目,我们打造了一个商业产品——WhaleStudio。
WhaleStudio是一个分布式云原生并且带有强大可视化界面的 DataOPS 系统,增强了商业客户所需的企业级特性。它结合了调度和数据同步的可视化,能够无缝衔接,并低代码实现企业大数据操作系统和高速公路。
调度和数据同步可视化结合
集成工具支持
丰富的数据源对接
完善的权限控制
审计系统和新创环境适配
工作流和任务实例操作优化
下图展示了我们DataOPS系统中的实时任务实例界面。可以看到界面提供了详细的数据和面板,帮助用户更好地管理和监控任务。
通过今天的分享,我们了解了Apache DolphinScheduler的项目介绍、整体设计背景以及Worker任务的具体执行过程。
希望这些内容能够帮助大家更好地理解和使用Apache DolphinScheduler。如果大家有任何问题,欢迎随时与我交流。谢谢大家!
本文由 白鲸开源科技 提供发布支持!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。