深入解析Apache DolphinScheduler容错机制

news/2024/10/22 10:48:59

简述

Apache Dolphinscheduler Master和Worker都是支持多节点部署,无中心化的设计。

  • Master主要负责是流程DAG的切分,最终通过RPC将任务分发到Worker节点上以及Worker上任务状态的处理
  • Worker主要负责是真正任务的执行,最后将任务状态汇报给Master,Master进行状态处理

那问题来了:

  1. Master掉了怎么办?它是负责流程实例的管理的。这样Worker就没有办法给它汇报任务状态,当然它也不能做状态处理了?
  2. Worker掉了又怎么办?要知道Worker是真正任务执行的载体,它如果掉了。Master要怎么处理?

来来来,一张图说清楚它们。

容错

file

总结

其实说白了就是如果Master掉了,其他Master分布式锁来对Master进行容错。也就是流程实例由之前的down掉的Master切换到要接管的Master上,这个时候是需要给Worker下发新Master的host的,让Worker可以重新给新Master上报信息

而Worker掉了就是任务的重试,但是任务重试之前是有前提的,那就是要kill掉正在运行YARN上的任务,当前DS做不到。为什么?因为对于在非客户端分离模式下,是需要ProcessBuilder的waitFor一直等待客户端进程退出的。而applicationId的解析是在客户端进程退出(也就是waitFor退出)之后做的。

那意思就是说只能等待程序运行完毕,我才能获取到applicationId。

org.apache.dolphinscheduler.server.master.service.WorkerFailoverService#killYarnTask

private void killYarnTask(TaskInstance taskInstance, ProcessInstance processInstance) {try {if (!masterConfig.isKillApplicationWhenTaskFailover()) {return;}if (StringUtils.isEmpty(taskInstance.getHost()) || StringUtils.isEmpty(taskInstance.getLogPath())) {return;}TaskExecutionContext taskExecutionContext = TaskExecutionContextBuilder.get().buildWorkflowInstanceHost(masterConfig.getMasterAddress()).buildTaskInstanceRelatedInfo(taskInstance).buildProcessInstanceRelatedInfo(processInstance).buildProcessDefinitionRelatedInfo(processInstance.getProcessDefinition()).create();// only kill yarn/k8s job if exists , the local thread has exitedlog.info("TaskInstance failover begin kill the task related yarn or k8s job");ILogService iLogService =SingletonJdkDynamicRpcClientProxyFactory.getProxyClient(taskInstance.getHost(), ILogService.class);GetAppIdResponse getAppIdResponse =iLogService.getAppId(new GetAppIdRequest(taskInstance.getId(), taskInstance.getLogPath()));ProcessUtils.killApplication(getAppIdResponse.getAppIds(), taskExecutionContext);} catch (Exception ex) {log.error("Kill yarn task error", ex);}
}

怎么办?回顾 1.3.3 版本,是LoggerServer和Master是分离模式的,所以只要Master节点有yarn客户端,是可以通过master对yarn上的applicationId进行干掉的。而现在怎么办?

两种解决思路 :

  1. Master上kill,使用yarn rest api
curl -X PUT -d '{"state":"KILLED"}' \-H "Content-Type: application/json" \http://xx.xx.xx.xx:8088/ws/v1/cluster/apps/application_1694766249884_1098/state?user.name=hdfs

注意 : 需要加用户。

  1. Worker上kill
    这个是需要标识该任务是容错任务,然后在任务重试运行的时候,调度到指定的Worker上。需要先kill当前运行的applicationId,然后再任务重试。其实这里有一个优化点就是,是Worker掉了,但是任务还在,所以需要判断的是yarn上的状态,如果异常,再kill也不迟,而不是上来就kill。如果是RUNNING,等待就好,可以设置等待超时时间。

转载自journey

原文链接:https://segmentfault.com/a/1190000045084857

本文由 白鲸开源 提供发布支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/74545.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

VMware vCenter Server 8.0U2e 发布下载,修复堆溢出漏洞 (CVE-2024-38812) 和权限提升漏洞 (CVE-2024-38813)

VMware vCenter Server 8.0U2e 发布下载,修复堆溢出漏洞 (CVE-2024-38812) 和权限提升漏洞 (CVE-2024-38813)VMware vCenter Server 8.0U2e 下载 - 集中管理 vSphere 环境 Server Management Software | vCenter 请访问原文链接:https://sysin.org/blog/vmware-vcenter-8-u2/…

3184. 构成整天的下标对数目 I

给你一个整数数组 hours,表示以 小时 为单位的时间,返回一个整数,表示满足 i < j 且 hours[i] + hours[j] 构成 整天 的下标对 i, j 的数目。 整天 定义为时间持续时间是 24 小时的 整数倍 。 例如,1 天是 24 小时,2 天是 48 小时,3 天是 72 小时,以此类推。 示例 1:…

@dailai,欢迎成为Apache SeaTunnel Committer一员!

Apache SeaTunnel社区最近又迎来了一位新Committer,他是来自中电信翼康的大数据架构师,作为医疗健康行业从业者,他给SeaTunnel项目带来了此专业领域相关的技术支持,探索了医疗数据的价值挖掘与AI模型应用与SeaTunnel相结合的潜能。来看看他是如何成为SeaTunnel社区Committe…

京准电钟:GPS北斗卫星时钟服务器应用航管自控系统

京准电钟:GPS北斗卫星时钟服务器应用航管自控系统京准电钟:GPS北斗卫星时钟服务器应用航管自控系统 京准电钟:GPS北斗卫星时钟服务器应用航管自控系统 京准电子科技官微——ahjzsz 经过近60年的发展,从 2005 年开始, 我国航空运输总周转量跃居世界第二位,并且迅速逐年增长…

国内十大远程控制软件排名

根据买购网品牌指数排名,2024年国内十大远程控制软件已经出炉,以下是具体介绍。 一、TeamViewer TeamViewer来自德国,自2005年推出以来,已经成为全球最具影响力的远程桌面工具之一。它提供了功能强大的远程连接解决方案,用户可以轻松远程访问、控制、管理和维护设备。Team…

PbootCMS打开首页提示No input file specified.解决办法

问题表现打开 PbootCMS 首页时提示“No input file specified.”。原因服务器环境配置文件引起,主要发生在 Linux 系统用户,尤其是使用宝塔面板(BT)的用户。解决方法删除特定文件:删除根目录下的 .user.ini 文件。 删除根目录下的 .htaccess 文件。清空 runtime 文件夹:清…

信创之达梦数据库(二)mysql迁移

迁移前准备一、数据库工具 在开始目录中可以看到安装后达梦数据库工具二、创建用户和表空间 打开上图的DM管理工具,在输入SYSDBA的口令后,展开如下画面2.1 创建索引表空间 在表空间右键选择【新建表空间】,填写表空间名和文件路径2.2 创建表空间 同上。两个表空间有什么区别…