当前位置: 首页 > 网络应用技术

[daren列]您会不使用Apache Dolphinscheduler吗?

时间:2023-03-07 19:44:44 网络应用技术

  在官方开始之前,我想鼓励所有人。我们知道,启动大师实际上是启动Masterserver,这与其他Springboot Projects基本相似,也就是说,即创业公司内部的主要功能。但是在开始实践练习之前,必须有许多人,尤其是初学者,突然发现Bean注入了十几个自动人士。

  多种豆子的注射造成了雾气,不是少数派感到攻击性。但是作者想说的是,这些实际上是在吓到你,然后我们将正式开始。

  第一个类别:MasterConfig,MasterRegistryclient,MasterschedulerService,调度程序和其他BEAN。从字面上看,MasterConfig配置了Master。MasterRegistryClient负责与注册相关的内容。

  第二类是:这些后缀是一堆procesors,例如taskexecuterunningprocessor。相同的后缀必须处理相同的任务,并且将来必须将其加载。

  第三类:是EventExeCuteservice和DifoverExecutEthread。这些可以根据事件的名称和灾难恢复的转换大胆地猜测它。这些必须在主内部,理论上应该返回第一类。

  第四类:对于LoggerRequstProcessor,与打印日志有关。至于这样的特定内容,稍后将详细介绍。

  执行主方法后,基于弹簧特征执行运行方法。在运行方法中,创建了NetTyRemotingServer对象(此对象未由Spring管理,而是直接创建)。然后将一堆处理器放入Netty的处理器中的第二种处理器。可以从这里推断出大师和工人之间的通信必须是Netty。

  我们可以查看以下代码,实际上,bean的第一类执行初始化和开始方法。

  总而言之,实际上,主人就像首席指挥官。该指挥官-in-司令称bean内部的开始方法。这些豆开始执行自己的功能。至于这些豆类中什么样的功能,Mastersever太懒了,无法管理,因此不必进行管理。这是正确的。

  本节的摘要:

  在这一点上,大师赛正在运行。在下一部分中,我们将一一分析每个Bean的使用和功能。

  MasterConfig从application.yml到MasterConfig类获得了配置信息,并且获得的特定配置信息如下。

  在MasterServer中,MasterRegisterConfig将执行init()和start()方法。

  init()方法已经建立了一个新的心跳池。注意,目前只有一个线程池,其中没有心跳。

  start()方法从ZK获得锁(Expord),注册信息和用户。

  注册信息做了两件事:

  首先:构建心跳信息并将其扔进线池中以执行心跳任务。

  第二:临时注册ZK中的主信息,然后删除无用的主信息。

  心跳任务是检查是否有死亡节点和每10s(HeartbeatInterval)注册最新的机器信息,包括机器CPU,内存,PID等。

  只要注册信息更改,订阅的信息就会立即感知。如果添加了机器,将打印日志。还原机器,同时删除并打印日志。此部分如下图所示:

  前两个部分来自Masterserver的启动过程和MasterRegisterConfig的注册过程。注册完成后,主人如何管理,我们如何同时管理它以及如何将其保存到数据库中。对于此部分的内容。

  ServernodeManager实现了初始化界面。基于弹簧的特征,将执行此对象后,将执行AfterPropertiesset()方法。执行三件事:

  几乎所有更新操作都是通过重新输入锁来实现的,以确保系统在多线程系统中安全。此外,还有另一个细节,如果删除了节点,则将发送警告信息。

  MasterProrityqueue有一个哈希图。每台机器都对应于一个索引,该索引以这种方式构建了一个插槽。当我转到主信息时,我通过此索引找到了它。

  至于MasterBlockingqueue队列的内容,如何同步到数据库,如何将数据放到队列和队列以删除数据等。这些都是纯粹的CRUD内容,读者可以自己阅读。

  2.1至2.3描述全部与ZK管理的节点信息有关。我们为什么首先讨论主启动之后的节点信息?

  原因实际上很简单,因为无论是最终分析中的主人还是工人,它都是机器。如果这些机器崩溃或增加,DS不知道,这是不知道该机器的浪费。正常运行并且配置是正常的,它是管理的,因此DS操作可以平稳运行。类似,其他大数据组件相似。

  上一个MasterServer中的MasterRregisterClient执行INIT()和start()方法,然后MasterschedulerService执行INIT()和start()方法。从这里开始,它确实进入了Master的工作阶段。

  init()方法是由主pre-exec-exec-thread线程池和netty客户端创建的。

  预先进行的线程池中有固定的10个线程(在2.1中,MasterConfig配置中的前注线程)。这些线程通过命令的ProcessInstance进程处理。

  开始方法是启动状态WhelexecutorthRead的过程。该线程致力于检查检查任务,过程,工作流超时和任务状态的过程。

  其中,MasterSchedulerService本身继承了线程类,在开始方法后,立即执行运行方法。确保计算机在运行方法中具有足够的CPU和内存,并且执行了ScheduleProcess方法。,将在2.5中解释。

  ScheduleProcess方法scheduleprocess在Masterschedulevice中的段落周期,因此它将依次执行以下4种方法。

  该线程池已移交给弹簧管理,属于背景线程。该线程池的最大数量和核心数为100(MasterConfig.getExectHreads)。如下图所示:

  这里有两个细节要解释,

  第一:WorkFlowExecutEthread。它不会继承线程类,而是一个普通的类。只有名称背后的线程,因此在阅读时找不到启动或运行方法。

  第二:如果在SchedulerProcess方法中找到了ProcessInstance,那是时候了

  它将移交给2.4个状态WhelexecuteThread,以删除ProcessInTestance。

  StartProcess方法是首先查看图片。

  StartProcess有三件事,并且buildflowDag()构建dag,inittaskqueue()初始化任务队列和submitpostnode()提交的节点。

  DAG如何做最初队列中发生的事情,以及提交节点后发生的事情,它将在第2.7至2.9章中解释。

  根据buildflowDag中的代码,执行过程已排序,这是以下9个步骤:

  基本逻辑是上述步骤。当然,每个步骤在逻辑上都会更加逻辑,但是数据结构实际上是通过数据结构更改的。如果读者写了一个业务代码,这一定不是陌生的。因此,我不会详细解释。

  可能有读者是什么。以下是DAG的简短链接。阅读后不难理解。

  https://dolphinscheduler.apache.org/zh-cn/blog/dag.html

  该链接理论上引入了DAG。如果DAG想要在实践中有更深入的了解,请在DAO模块的测试文件夹下搜索Daghel pertstest类。Debug表单)将对DAG有更深入的了解。

  与本节相关的链接有两个链接。这两个链接是关于DAG中任务关系的转换,也就是说,保存任务的1.3版本之间的关系仅以字段的形式保存。后来,在发现数据量很大之后,这是不可行的,因此该字段被拆除为多个表。阅读器可以阅读它。

  https://dolphinscheduler.apache.org/zh-cn/blog/dolpheduler_json.html

  https://dolphinscheduler.apache.org/zh-cn/blog/json_split.html

  构造DAG(带有无环图)的目的是拖动在前端拖动的任务,以告诉主任务的执行顺序,即告诉主任务首先执行并执行哪些任务。

  Inittaskqueue做了3件重要的事情:(我认为这种Inittaskqueue方法的名称不是很好,并且可能会感觉到Inittask或InittaskMap会更好。由于队列很容易被误认为队列,因此此方法仅构建4个映射,并且可以构建4个地图。队列仅放置可以检索的任务。在以下各章中,此队列更有用。)

  SubmistPostNode做了6件事:最重要的是最后两件事,将TaskInstance放入队列和更新过程实例中。更新过程实例纯粹是更改数据结构,这并不困难。如何处理该任务队列,接下来会做什么,

  也就是说,SubmistStandByTask的做事将在后续章节中解释。

  原始:https://juejin.cn/post/70993783963372895