首页 > 其他分享 >深入解析Apache DolphinScheduler容错机制

深入解析Apache DolphinScheduler容错机制

时间:2024-10-22 10:44:51浏览次数:1  
标签:taskInstance DolphinScheduler Worker yarn 容错 任务 Master Apache kill

简述

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 exited
        log.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

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

标签:taskInstance,DolphinScheduler,Worker,yarn,容错,任务,Master,Apache,kill
From: https://www.cnblogs.com/DolphinScheduler/p/18492099

相关文章

  • Ambari 2.8.0已经支持dolphinscheduler 3.2.2 了?
    ......
  • 双十一母婴有什么好物推荐?双十一这五款母婴好物不容错过!
    随着双十一购物狂欢节的来临,母婴用品市场再次迎来了消费者的热切关注。作为家长们为孩子和自身挑选必需品的重要时刻,母婴用品的质量和安全性无疑成为了关注的焦点。在众多品牌和商品中,我们精心筛选了本年度最受欢迎的母婴用品,从便捷的婴儿洗衣机,从智能的婴儿车到实用的奶瓶消毒......
  • hive执行SQL提示:Error while processing statement:FAILED:Execution Error, return c
    遇到Hive执行SQL时提示Errorwhileprocessingstatement:FAILED:ExecutionError,returncode1fromorg.apache.hadoop.hive.ql.exec.tez.TezTask的错误,通常意味着在执行Tez任务时出现了问题。这个错误可能由多种原因引起,包括但不限于配置问题、资源限制、数据问......
  • 2024年PDF转JPG新趋势,4款常用编辑工具梳理,不容错过
    嘿,大家好,我是你们的老朋友,今天咱们聊个超实用的技巧——把PDF文件变成JPG图片,这样分享起来就方便多了。不管是工作汇报、学习资料还是生活照片,这招都能让你事半功倍。1.福昕PDF编辑器闪现✚ https://editor.foxitsoftware.cn/操作教程“https://mp.weixin.qq.com/s/8okEw......
  • 高效数据移动指南 | 如何快速实现数据库 Oracle 到 Apache Doris 的数据同步?
    在现代企业中,数据无处不在,贯穿于各个业务环节和系统之间。无论是跨系统的数据集成、多地域的数据协同,还是实时应用的数据同步,数据的一致性和及时性都至关重要。在数字化转型的过程中,如何确保不同系统、地域、设备之间的数据同步,成为了企业面临的重要挑战。本专题将基于实践经验,从......
  • TB 级数据入库无压力:Apache DolphinScheduler 助力 ClickHouse 优化
    引言......
  • 使用 CDN 后 Apache 的日志记录客户真实 IP
    经常搭建网站服务器的都知道,在给站点使用了CDN后Web应用的日志记录里就会只记录CDN节点IP了,这就没法看到真实客户请求IP,对于日志分析、运维日常维护来说就有点儿麻烦了,今天明月结合在五洛云服务器上搭建的Apache环境给大家分享一下让日志记录客户真实IP,毕竟网上的教......
  • 在 Apache 虚拟机中, php-fpm 以指定用户身份运行 PHP
     用户和用户目录useraddsite1usermod-a-Gsite1www-datamkdir/var/www/site1chown-Rsite1:site1/var/www/site1chmod770/var/www/site1#限制其它用户查看site1数据 设置php-fpmcp/etc/php/7.4/fpm/pool.d/www.conf/etc/php/7.4/fpm/pool.d/fpm-......
  • Apache Storm实时流处理的核心技术
    1.引言ApacheStorm是一个开源的、分布式的实时计算系统,专为处理流式数据而设计。它能够处理大量数据流并在极低的延迟下提供实时的结果。相比于传统的批处理系统,Storm具有处理无限数据流的能力,支持非常高的可扩展性和容错机制。Storm可以适用于多种编程语言,具有高度的......
  • DolphinScheduler快速上手:基于Docker Compose的安装与配置全攻略
    DolphinScheduler是一款强大的开源分布式任务调度系统,广泛应用于大数据领域,用于管理复杂的工作流。本文将详细介绍如何通过DockerCompose安装和配置DolphinScheduler,以便快速搭建并使用这一系统。1.环境准备首先,确保你的系统已经安装了Docker和DockerCompose。Docker......