目录
一、海豚调度器简介
二、分布式部署减少单点故障
1. 节点选择与配置
2. 数据一致性保障
3.节点软件一致性
4. 安全性与隔离性
三、补数功能
1. 配置补数参数
2. 设置补数模式
3. 运行补数任务
4. 监控和调试
5. 验证补数结果
四、失败重试
五、运行超时
六、资源隔离与分配
七、任务依赖管理
八、任务失败通知
1. 获取API Token
2. 编写自动化脚本来调用API
3. 测试和调试
一、海豚调度器简介
-
可视化工作流设计
- 海豚调度器提供了直观易用的可视化界面,允许用户通过拖拽、连接等操作轻松构建工作流。用户可以清晰地看到任务之间的依赖关系和流程逻辑,方便进行流程的规划和优化。
- 例如,在一个数据分析项目中,用户可以将数据采集、数据清洗、数据分析和结果展示等任务按照先后顺序连接起来,形成一个完整的工作流。
-
丰富的任务类型支持
- 支持多种类型的任务,包括但不限于 Shell 脚本任务、SQL 任务、Python 任务、Subprocess 任务等。这使得用户能够根据不同的业务需求选择合适的任务类型来执行具体的操作。
- 以电商网站的数据分析为例,可能需要使用 SQL 任务从数据库中提取销售数据,使用 Python 任务进行数据预处理和建模,最后使用 Shell 脚本任务将分析结果生成报告。
-
任务依赖管理
- 能够精确地定义任务之间的依赖关系,确保任务按照正确的顺序执行。当前置任务执行成功或失败时,可以灵活地设置后续任务的执行策略。
- 比如在数据仓库的 ETL 过程中,数据加载任务必须在数据转换任务成功完成后才能执行,海豚调度器可以很好地管理这种依赖关系,保证数据处理的准确性和完整性。
-
资源管理与分配
- 有效地管理和分配系统资源,包括 CPU、内存、网络带宽等。可以根据任务的优先级和资源需求,合理地为任务分配资源,提高系统的整体运行效率。
- 在一个大型数据处理项目中,对于高优先级的关键任务,可以分配更多的资源以确保其快速完成,而对于低优先级的任务则可以适当限制资源使用。
-
任务监控与告警
- 实时监控任务的执行状态,包括任务的开始时间、结束时间、执行进度等。当任务出现异常或超时等情况时,能够及时发送告警通知,以便相关人员及时处理。
- 假设一个数据同步任务长时间未完成,海豚调度器会发出告警,提醒运维人员检查网络连接或数据源是否存在问题。
-
分布式架构与高可用性
- 采用分布式架构,支持横向扩展,可以轻松应对大规模任务调度的需求。同时,具备高可用性,确保系统在部分节点故障的情况下仍能正常运行。
- 对于拥有海量数据和众多业务线的企业,海豚调度器的分布式架构能够保证任务调度的高效稳定,即使某个节点出现故障,也不会影响整个系统的正常工作。
海豚调度器是一款强大的任务调度工具,在生产环境中发挥着重要作用。它能够有效地管理和调度各种复杂的任务,提高系统的稳定性和效率。
二、分布式部署减少单点故障
在生产环境中,单点故障是一个需要严肃考虑的问题。为了避免因某一节点的故障导致整个系统瘫痪,分布式部署成为了一种有效的解决方案。对于海豚调度器而言,通过分布式部署,可以显著提高系统的可靠性和稳定性,从而降低单点故障的风险。
海豚调度器的分布式部署通常涉及多个独立的节点,这些节点在物理位置、硬件配置和网络环境上可能各不相同。每个节点都运行着海豚调度器的实例,它们之间通过网络进行通信和协作,共同完成任务的调度和分配。
在分布式部署中,一个重要的设计原则是冗余性。通过在不同的物理位置部署多个海豚调度器实例,可以确保即使某个节点发生故障,其他节点仍然可以继续工作,从而保证系统的整体稳定性。此外,分布式部署还可以提高系统的可扩展性,使得在面对大规模任务处理需求时,能够轻松扩展系统的处理能力。
在实施分布式部署时,需要注意以下几点:
1. 节点选择与配置
选择合适的节点进行部署是至关重要的。这些节点应该具有足够的计算资源、存储资源和网络资源,以确保海豚调度器实例的正常运行。此外,节点的地理位置和网络环境也需要考虑,以避免因网络延迟或中断导致的问题。
2. 数据一致性保障
在分布式系统中,数据一致性是一个核心问题。海豚调度器需要确保各个节点之间的数据保持一致,以避免出现任务分配混乱或数据丢失的情况。这通常需要存储时用hdfs等分布式存储格式。
3.节点软件一致性
例如需要用海豚调度器调用DataX,这时需要每个worker节点都安装DataX,并且DataX的版本和路径配置保持一致。这样海豚调度器调用任意一个worker所在服务器时,都能顺利执行。
4. 安全性与隔离性
在分布式环境中,安全性和隔离性也是需要考虑的重要因素。海豚调度器需要确保各个节点之间的通信是安全的,防止恶意攻击和数据泄露。同时,不同节点之间的任务和数据需要保持一定的隔离性,以避免相互影响。
三、补数功能
补数功能在数据处理中经常用到。当某些数据由于各种原因未能及时处理时,可以通过海豚调度器的补数功能进行补充处理。
比如说,在财务报表生成的过程中,由于网络故障导致某一天的数据没有被处理。这时,运维人员可以使用海豚调度器的补数功能,指定需要补充处理的日期范围,调度器会自动重新触发相关任务进行数据处理,确保报表的完整性和准确性。
1. 配置补数参数
在创建或编辑工作流时,可以通过设置全局参数或自定义参数来配置补数的具体日期,海豚调度器的内置函数如下:
变量名 |
声明方式 |
含义 |
---|---|---|
.date | ${.date} | 日常调度实例定时的定时时间前一天,格式为 yyyyMMdd |
.curdate | ${.curdate} | 日常调度实例定时的定时时间,格式为 yyyyMMdd |
${} | 日常调度实例定时的定时时间,格式为 yyyyMMddHHmmss |
例如,可以使用${}
作为全局参数,它代表调度实例的定时时间前一天的日期。
在对应shell脚本任务,通过${complement_date}方式来获取补数日期。
建议生产环境的任务都统一用全局参数传递来的日期,如需要不同格式,可以用时间函数进行计算和格式化。
-
#昨天
-
yesdate=$1
-
yesday_date=`date -d "$yesdate - 0 day" +%Y-%m-%d`
-
#今天
-
today=`date -d "$yesdate + 1 day" +%Y%m%d`
-
today_date=`date -d "$yesdate + 1 day" +%Y-%m-%d`
-
#上一个月(用昨天来获取)
-
mon_of_lastday=`date -d "$yesdate" +%Y%m01`
-
mon_date=`date -d "$yesdate" +%Y-%m-01`
-
mon_str=`date -d "$yesdate" +%Y-%m`
注意任务脚本的日期用上面传递过来的日期,不能又调用日期函数,例如下面sql如果像下面这样就会造成日期的混乱:
date_format (date_sub(current_date(), 1),'yyyy-MM-dd') AS data_date
2. 设置补数模式
海豚调度器支持两种补数模式:串行补数和并行补数。串行补数会按照指定的时间范围内的日期顺序依次执行补数任务,而并行补数则可以在指定的时间范围内同时执行多个补数任务。(如果要选择日期多,要考虑系统资源最大同时支持多少个并发)根据需要选择合适的补数模式,以优化数据处理效率。
3. 运行补数任务
配置完补数任务后,可以手动触发或设置定时任务来执行补数。在执行补数任务时,调度器会根据设置的参数和模式来计算并执行相应的任务实例。
4. 监控和调试
在补数任务执行期间,可以通过海豚调度器的Web界面监控任务的状态和查看日志。如果遇到问题,可以根据日志信息进行调试,确保补数任务正确执行。
5. 验证补数结果
补数任务完成后,需要验证补数的数据是否准确无误。这可能涉及到对数据库进行查询或使用其他数据验证工具来检查补数的结果。
四、失败重试
任务执行过程中难免会出现失败的情况,海豚调度器的失败重试机制能够提高任务的成功率。
例如,在数据抽取任务中,由于数据库连接暂时中断导致任务失败。调度器会按照预设的重试策略,自动重新尝试执行该任务,直到任务成功或者达到最大重试次数。
通过合理设置重试次数和重试间隔,可以在不增加过多系统负担的情况下,最大程度地提高任务的成功率。
对重要的任务,失败重试次数要大于等于2,对于不重要的任务,可以失败重试次数1次。对于偶然性执行失败,通常是资源紧张导致的,如果整个执行调度整体时间允许时,可以失败重试间隔设置长一些,通常建议要间隔5分钟以上。
五、运行超时
运行超时是保障系统稳定性和资源合理利用的重要机制。
比如在一个复杂的数据分析任务中,如果某个子任务预计执行时间为 1 小时,但实际运行超过 2 小时仍未完成,可能会影响整个流程的进度,甚至导致其他依赖任务的延误。海豚调度器的运行超时设置可以在这种情况下及时中断该任务,释放占用的资源,并触发相应的告警通知运维人员进行处理。
同时,运维人员可以根据历史数据和任务特点,合理设置运行超时时间。对于一些关键且耗时较长的任务,可以适当延长超时时间;而对于一些相对简单、执行时间通常较短的任务,则应严格控制超时时间,避免不必要的资源浪费。
通常来说,1个调度任务执行时间不能超过2个小时,如果超过这个时间,要考虑进行优化和分拆成几个小任务。
六、资源隔离与分配
在生产环境中,不同的任务可能对资源的需求差异很大。海豚调度器可以实现资源的隔离与分配,确保每个任务都能获得所需的资源,同时避免资源竞争导致的性能下降。
假设存在一个数据处理集群,同时运行着计算密集型任务和内存密集型任务。通过海豚调度器,可以为计算密集型任务分配更多的 CPU 资源,为内存密集型任务分配更多的内存资源,从而提高任务的执行效率。
此外,还可以设置资源的优先级,当资源紧张时,优先保障重要任务的资源需求。
七、任务依赖管理
复杂的业务流程往往包含多个相互依赖的任务。海豚调度器能够精确管理任务之间的依赖关系。
例如,在一个数据仓库的构建过程中,数据抽取任务必须先完成,然后才能进行数据清洗和转换任务。海豚调度器可以确保在数据抽取任务成功完成后,自动触发后续的清洗和转换任务,保证整个流程的顺畅进行。
而且,对于存在多个前置依赖任务的情况,调度器能够灵活处理复杂的依赖关系,确保所有前置条件满足后再启动相关任务。
八、任务失败通知
在生产环境中,为了确保任务执行的及时性和故障的快速响应,配置失败通知是非常必要的。可以设置失败邮件通知他钉钉通知,下面以设置失败邮件通知为例:
-
配置邮件服务器:
- 打开您的个人邮箱网页版并登录。
- 进入设置中心,开启POP3/SMTP服务。
- 记录服务器地址,通常在设置页面的最下方显示。
- 确保您能够获取到用于SMTP认证的授权密码,并妥善保存。
-
配置海豚调度器的邮件告警实例:
- 登录海豚调度器的Web界面。
- 进入安全中心的告警实例管理部分。
- 点击创建告警实例按钮,选择Email实例。
- 填写必要的字段,包括收件人邮箱、抄送人邮箱、SMTP服务器地址、端口、发件人邮箱地址、是否需要认证、邮箱名称、授权密码等。
- 根据您的邮件服务器选择STARTTLS、SSL或SSL证书信任选项。
- 设置内容展示类型,根据需要选择适当的格式。
-
创建告警组并关联告警实例:
- 在安全中心创建一个新的告警组。
- 将之前创建的邮件告警实例添加到告警组中。
- 设置通知策略为失败发
-
测试邮件通知功能:
- 确保所有配置正确无误后,您可以尝试触发一个告警事件,以测试邮件是否能够成功发送到指定的邮箱。
八、通过API进行自动化操作(重跑、补数等)
通过API进行自动化操作是提高效率和减少人工干预的有效手段。以下是使用API进行重跑、补数等操作的详细步骤。
1. 获取API Token
在进行API调用之前,首先需要获取一个API Token,用于身份验证。登录海豚调度器的Web界面,进入“安全中心”下的“令牌管理”部分,创建一个新的Token,并记录生成的字符串。
2. 编写自动化脚本来调用API
可以使用编程语言(如Python、Shell等)结合HTTP库(如requests)来编写自动化脚本,以便定期或根据条件自动执行上述API调用。脚本中应包含必要的逻辑来处理错误响应,并确保操作的幂等性。
3. 测试和调试
在正式部署自动化脚本之前,应该在安全的环境中进行充分的测试和调试,以确保API调用能够按预期工作,并且不会导致意外的副作用。
详细教程可以看:
无人值守大数据平台(CDH6.3.2+Flink+海豚调度器)如何实现大数据平台稳定及顺利跑出离线报表和实时报表(持续更新方案)
海豚调度器利用API来自动补数的源码分析和亲测可用实例
海豚调度器自动监测每日报表及自动重跑异常工作流(综合应用可用代码
九、动态参数传递
在实际应用中,不同的任务实例可能需要使用不同的参数。海豚调度器支持动态参数传递,可以根据实际情况灵活调整参数值。海豚调度器可以设置全局参数和任务的自定义参数。
例如一个工作流,设置全局参数complement_date为系统内置日期,整个工作流的shell脚本的日期都引用这个全局参数,就可以为整个工作流指定日期进行补数。
十、通过依赖关系解决上下游依赖
在当今复杂的数据处理和任务调度场景中,海豚调度器凭借其出色的依赖关系管理能力,成为了众多企业和开发者的得力助手。
首先,我们需要明确什么是上下游依赖关系。简单来说,在一个任务流程中,如果任务 A 的执行结果是任务 B 执行的前提条件,那么任务 A 就是任务 B 的上游任务,任务 B 则是任务 A 的下游任务。这种依赖关系在实际业务中广泛存在,比如数据的采集、清洗、转换和分析等环节。
海豚调度器能够精准地识别和管理这些依赖关系。以一个电商数据分析的场景为例,首先需要从多个数据源采集销售数据(任务 A),然后对这些数据进行清洗和预处理(任务 B),只有当任务 A 成功完成并且数据无误,任务 B 才会被触发执行。海豚调度器通过配置任务之间的依赖规则,确保了流程的正确性和稳定性。
再比如,在一个金融风险评估系统中,先计算各种金融指标(任务 C),然后基于这些指标进行风险模型的训练(任务 D)。如果任务 C 执行失败或者结果不符合预期,海豚调度器会及时发出警报,并阻止任务 D 的执行,避免错误的延续和资源的浪费。
海豚调度器还支持多种依赖关系的类型,如时间依赖、数据依赖、状态依赖等。时间依赖可以设定任务在特定的时间点或者时间段执行;数据依赖则根据数据的生成、更新或者特定的条件来触发后续任务;状态依赖则基于任务的完成状态,如成功、失败、暂停等来决定下游任务的动作。
此外,海豚调度器提供了直观的界面和丰富的监控功能,让用户能够清晰地了解任务之间的依赖关系和执行状态。通过实时的监控和预警,用户可以及时发现问题并采取相应的措施。