目录
概念和定义
Apache DolphinScheduler是一个 分布式、去中心化的可视化DAG工作流任务调度系统 ,专为企业级大数据处理场景设计。它采用 DAG (Directed Acyclic Graph) 结构组织任务,有效解决了复杂的数据任务依赖关系问题。DolphinScheduler的核心优势在于其 高可靠性和可扩展性 ,支持多租户和在线资源管理,能够稳定处理每日高达10万次的数据任务。
该系统广泛应用于 数据研发ETL流程 中,特别擅长处理复杂的任务依赖关系,同时提供全面的任务监控和管理功能,如重试、恢复、暂停和终止等操作。DolphinScheduler的这些特性使其成为大数据处理领域的重要工具,尤其适合需要频繁协调大量异构任务的企业环境。
核心特性
Apache DolphinScheduler作为一个强大的大数据任务调度系统,拥有多个关键特性,使其能够在复杂的企业环境中脱颖而出。这些特性不仅体现了系统的灵活性和适应性,还展示了其在大规模数据处理方面的卓越表现:
-
高可靠性
DolphinScheduler采用了 去中心化的多Master和多Worker服务对等架构 ,有效分散了单点压力,提高了整体稳定性。此外,系统内置的 原生HA任务队列 支持过载容错,进一步增强了系统的抗风险能力。这种设计使得DolphinScheduler能够应对突发的高并发场景,确保任务调度的连续性和可靠性。 -
简单易用
系统的 可视化DAG界面 让用户能够直观地通过拖拽方式定义复杂的工作流,大大降低了学习成本。同时,系统的 模块化设计 使开发者能够轻松定制和维护各个功能模块,提高了系统的可维护性和可扩展性。 -
丰富的使用场景
DolphinScheduler支持多种任务类型,包括Shell、MapReduce、Spark、SQL等十余种常见任务类型。这种多样性使得系统能够灵活应对各种复杂的数据处理需求。值得注意的是,系统还支持 跨语言任务的组合 ,允许在同一工作流中混合使用不同编程语言的任务,极大地提升了系统的适用性。 -
高扩展性
系统的 分布式架构 设计使其能够支持每天高达10万个数据任务的稳定运行。这种高吞吐量的能力使得DolphinScheduler特别适合处理大规模数据处理任务。同时,系统的 多租户支持 和 在线资源管理 功能进一步增强了其在企业级环境中的适应性,能够满足不同部门或项目的资源隔离和共享需求。 -
强大的任务管理能力
DolphinScheduler提供了丰富的任务管理功能,包括 暂停、恢复、终止 等操作。特别是系统的 失败重试机制 ,允许用户灵活配置任务失败后的自动重试次数和间隔,显著提高了任务的成功率和系统的整体效率。这种智能化的设计大大减少了人工干预的需求,同时也增强了系统的鲁棒性。
核心组件
Apache DolphinScheduler的核心架构设计采用了 分布式无中心理念 ,这种设计有效地提高了系统的稳定性和可扩展性。系统主要由以下几个关键组件构成:
-
MasterServer :作为任务调度的核心,负责DAG任务切分、任务提交和监控。它还监听其他MasterServer和WorkerServer的健康状态,确保系统的整体稳定性。
-
WorkerServer :负责实际的任务执行和日志服务。它通过不断从Task Queue中领取任务,并根据任务类型调用相应的执行器来完成任务。
-
ZooKeeper :作为集群管理和容错的关键组件,它不仅用于MasterServer和WorkerServer的注册与发现,还实现了事件监听和分布式锁功能。
-
API接口层 :处理前端UI层的请求,统一提供RESTful API向外部提供服务。它包括工作流的创建、定义、查询、修改等操作。
-
UI :提供丰富的可视化操作界面,用户可通过UI直观地创建、管理和监控任务。
这种架构设计使得DolphinScheduler能够有效处理复杂的任务依赖关系,同时保证了系统的高可靠性和可扩展性。通过各组件的协同工作,DolphinScheduler能够满足企业级大数据处理的各种需求。
工作流程
DolphinScheduler的任务调度和执行流程是整个系统的核心,体现了其高效、可靠的特性。这一流程主要包括以下几个关键步骤:
-
Command分发
当用户发起一个任务执行请求时,API Server将其封装为一个Command对象,并持久化到MySQL数据库的t_ds_command表中。随后,Master Server中的MasterSchedulerBootstrap程序会定期扫描该表,根据预先分配的slot选择属于自己的Command进行处理。
-
DAG构建与任务提交
对于每个待处理的Command,Master Server会创建一个ProcessInstance对象,并将其插入到t_ds_process_instance表中。同时,系统会生成一个包含必要上下文信息的可执行任务WorkflowExecuteRunnable,并缓存在本地的ProcessInstanceExecCacheManager中。最后,将ProcessInstance对应的WorkflowEventType.START_WORKFLOW事件发布到workflowEventQueue队列中。
-
任务调度与执行
WorkflowExecuteThread线程会持续轮询workflowEventQueue队列,获取新的任务事件。对于每个事件,系统会根据DAG结构进行任务拆分和排序,然后将任务提交给TaskDispatcher进行实际的调度。TaskDispatcher会检查TaskUpdateQueue是否已初始化,如果没有则先进行初始化,然后将任务封装为TaskPriority对象放入队列中。
-
任务执行
TaskPriorityQueueConsumer会不断轮询TaskUpdateQueue,从中取出TaskPriority对象,并通过Client调用WorkerServer的Handler进行任务处理。WorkerServer接收到任务后,会根据任务类型调用相应的Executor进行实际的任务执行。
在整个过程中,DolphinScheduler采用了高效的分布式架构和异步处理机制,确保了任务调度和执行的高性能和可靠性。系统通过ZooKeeper实现了Master和Worker的集群管理和容错,进一步增强了系统的稳定性和可扩展性。
环境准备
在开始部署DolphinScheduler之前,我们需要做好充分的环境准备工作。以下是系统所需的软硬件要求:
系统软件方面
-
支持的操作系统包括Red Hat Enterprise Linux 7.0及以上、CentOS 7.0及以上、Oracle Enterprise Linux 7.0及以上以及Ubuntu LTS 16.04及以上版本。
-
此外,还需要安装Java Development Kit (JDK) 1.8或更高版本,以及MySQL数据库和ZooKeeper服务。
硬件方面
-
推荐配置至少4核CPU、8GB内存和SAS硬盘,网络方面则需要千兆网卡。
-
对于集群部署,建议配置2至3个Master节点和多个Worker节点,以实现负载均衡和提高系统性能。
这些要求旨在确保DolphinScheduler能够平稳运行并充分发挥其性能优势。
部署方式
Apache DolphinScheduler提供了三种灵活的部署方式,以适应不同规模和需求的用户环境。这些部署方式包括单机模式、伪集群模式和集群模式,每种模式都有其特定的应用场景和优势。
单机模式
单机模式(Standalone)是最简单的部署方式,适合快速体验DolphinScheduler的基本功能。在这种模式下,所有服务都运行在一个名为StandaloneServer的单一进程中。它内置了注册中心Zookeeper和基于内存的数据库H2,因此只需配置好JDK环境,就可以一键启动DolphinScheduler。
伪集群模式
伪集群模式(Pseudo-Cluster)是一种折衷方案,在单台机器上模拟集群环境。这种模式下,master、worker、api server和logger server都在同一台机器上运行。虽然不是真正的分布式部署,但它能够更好地模拟集群行为,适合开发和测试阶段使用。
集群模式
集群模式(Cluster)是DolphinScheduler最强大和常用的部署方式。它能在多台机器上分布运行,充分利用计算资源,支持大规模任务调度。这种模式需要额外配置Zookeeper集群作为注册中心,以实现服务发现和容错功能。
无论选择哪种部署方式,DolphinScheduler都提供了完善的文档和支持,确保用户能够顺利部署并快速上手。这种多样化的部署选项使得DolphinScheduler能够适应从小型开发环境到大规模生产环境的各种需求,展现了其高度的灵活性和适应性。
基本配置
在完成DolphinScheduler的部署后,我们需要进行一些基本的配置调整以优化系统的性能和功能。以下是几个关键的配置项及其作用:
配置项 | 示例值 | 作用 |
---|---|---|
data.basedir.path | /opt/dolphinscheduler | 设置系统的基础目录路径 |
storage.type | HDFS | 指定资源存储类型 |
fs.defaultFS | hdfs://ns:8020 | 配置HDFS的默认名称节点地址 |
yarn.resourcemanager.ha.rm.ids | bigdata1,bigdata2 | 配置YARNResourceManager的高可用设置 |
这些配置项直接影响着DolphinScheduler的资源管理和任务执行效率。合理设置这些参数可以帮助系统更好地利用底层基础设施,提升整体性能。例如,通过设置storage.type
为HDFS,我们可以充分利用分布式文件系统的优势,提高大文件的处理速度和系统的可扩展性。
工作流定义
在Apache DolphinScheduler中,工作流定义是整个系统的核心功能之一。通过直观的DAG(有向无环图)界面,用户可以轻松创建和管理复杂的数据处理流程。这种可视化的操作方式大大降低了学习曲线,使得即使是非技术人员也能快速上手。
DolphinScheduler支持多种任务类型,包括但不限于:
-
Shell:执行shell命令
-
MapReduce:Hadoop MapReduce作业
-
Spark:Spark作业
-
SQL:数据库查询
-
Python:Python脚本执行
这些丰富多样的任务类型能够满足大多数数据处理场景的需求。
在定义工作流时,用户可以通过简单的拖拽操作来创建任务节点,并使用箭头连接它们以表示依赖关系。系统会自动检测循环依赖,防止出现无法执行的情况。这种直观的操作方式使得即使面对复杂的任务依赖关系,也能轻松构建出清晰明了的工作流结构。
除了基本的任务定义,DolphinScheduler还提供了高级功能来增强工作流的灵活性和可控性:
-
任务参数传递 :允许在任务间传递参数,实现更复杂的数据处理逻辑。
-
任务优先级设置 :通过设置任务的优先级,可以控制任务的执行顺序,确保关键任务得到优先执行。
-
任务重试机制 :支持配置任务失败后的自动重试次数和间隔,提高任务成功率。
-
超时设置 :可以为任务设置执行时限,超出时限可自动触发失败或警告。
这些功能共同构成了DolphinScheduler强大的工作流定义能力,使得用户能够精确控制和管理复杂的数据处理流程。通过这些特性,DolphinScheduler不仅能够满足基本的数据处理需求,还能应对各种复杂的业务场景,为企业级用户提供了一个全面而灵活的任务调度解决方案。
调度管理
在Apache DolphinScheduler中,调度管理是核心功能之一,提供了灵活多样的任务执行方式。系统支持两种主要的调度方式: 定时调度 和 手动调度 。这两种方式结合在一起,能够满足各种复杂的数据处理需求。
定时调度
定时调度使用 Cron表达式 来定义任务的执行频率。Cron表达式是一种标准的时间格式,允许用户精确指定任务的执行周期。例如,以下Cron表达式表示每天凌晨1点执行任务:
0 1 * * *
DolphinScheduler的一个独特之处在于它支持 Cron表达式的可视化生成 。这意味着用户不必记住复杂的Cron语法,而是可以通过友好的界面选择所需的时间间隔,系统会自动生成相应的Cron表达式。这种方法大大简化了定时任务的配置过程,降低了使用门槛。
手动调度
手动调度允许用户即时启动工作流或特定的任务实例。这对于调试和临时执行任务非常有用。用户可以通过DolphinScheduler的Web界面或API接口来触发手动调度。
除了基本的调度功能,DolphinScheduler还提供了丰富的调度命令,增强了任务管理的灵活性:
-
启动工作流 :立即执行整个工作流
-
从当前节点开始执行 :从选定节点开始执行后续任务
-
恢复被容错的工作流 :重新执行失败的任务
-
恢复暂停流程 :继续执行暂停的任务
-
从失败节点开始执行 :重新执行失败的任务及其后续任务
这些命令为用户提供了精细控制任务执行流程的能力,特别是在处理复杂的工作流时非常有用。
DolphinScheduler的调度管理功能还包括 任务优先级设置 。用户可以为工作流实例和任务实例设置优先级,系统会根据优先级决定任务的执行顺序。如果不设置优先级,默认采用先进先出的原则。这种机制使得关键任务能够得到优先执行,有助于优化资源利用率和提高整体工作效率。
监控告警
在DolphinScheduler中,监控告警功能是任务管理的核心组成部分。系统提供了 实时的任务监控和告警机制 ,允许用户及时发现和处理任务执行中的异常情况。为了实现有效的监控,DolphinScheduler集成了 邮件通知功能 ,用户可以配置接收任务状态更新的邮件。
通过DolphinScheduler的Web界面,管理员可以轻松设置 邮件服务器参数 ,包括SMTP服务器地址、端口、用户名和密码等。一旦配置完成,系统会在任务执行失败或其他预设条件触发时自动发送邮件通知。这种机制确保了任务执行状态的及时传达,提高了系统的响应能力和运维效率。通过这种方式,用户可以随时随地掌握任务执行情况,迅速采取行动解决问题,从而最大限度地减少潜在的数据处理中断风险。
任务类型扩展
在DolphinScheduler中,任务类型的扩展是一项重要功能,允许用户根据特定需求自定义任务执行逻辑。通过继承现有的任务执行器类,开发者可以轻松创建新的任务类型。系统设计采用了插件化架构,使得新任务类型的集成变得简单直观。
以Apache SeaTunnel为例,DolphinScheduler支持多种启动脚本,包括Flink和Spark引擎的不同版本。用户可以在任务参数中指定运行模型、部署方式等细节,实现灵活的任务配置。这种开放性的设计不仅增强了系统的适应性,还为用户提供了高度的定制化空间,满足了多样化的大数据处理需求。
资源管理
DolphinScheduler的资源管理功能是其核心特性之一,为用户提供了灵活的文件和UDF管理选项。系统支持多种存储类型,如HDFS、S3和OSS,用户可根据需求选择最适合的存储方式。通过配置common.properties文件,可以轻松设置存储类型和上传基础路径。这种设计不仅提高了系统的适应性,还为大规模数据处理提供了便利。特别值得一提的是,资源中心支持管理Hive SQL文件和自定义UDF函数JAR包,进一步增强了系统的灵活性和扩展性。
权限控制
在DolphinScheduler的安全管理框架中,权限控制系统扮演着至关重要的角色。该系统采用了 多租户架构 ,允许管理员为不同的团队或项目分配独立的资源和访问权限。这种设计不仅提高了系统的安全性,还增强了其在企业环境中的实用性。
权限管理的核心功能包括:
-
用户认证:确保只有授权用户才能访问系统
-
角色分配:基于角色的访问控制,实现精细化权限管理
-
资源访问控制:限制用户对特定资源的访问和操作权限
通过这些功能,DolphinScheduler能够有效保护敏感数据和关键任务流程,同时为不同级别的用户提供适当的操作权限,确保系统的安全性和灵活性。