目录
概念和定义
核心特性
核心组件
工作流程
环境准备
系统软件方面
硬件方面
部署方式
单机模式
伪集群模式
集群模式
基本配置
工作流定义
调度管理
定时调度
手动调度
监控告警
任务类型扩展
资源管理
权限控制
概念和定义
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能够有效保护敏感数据和关键任务流程,同时为不同级别的用户提供适当的操作权限,确保系统的安全性和灵活性。