Spark之Worker工作原理

Spark之Worker工作原理

当一个Spark上的Application要启动的时候,Master就会发送使用调度算法给Application分配资源,也就是将Application所需要的资源分摊到Worker上面以保证分布式的计算。同时Master还会给Worker发送消息让它去启动Driver(Yarn-Client模式下),和Executor。同时Executor的反向注册与Driver与Executor的状态改变也会通过Worker中的线程与Master进行通信。这就是Worker的重要作用①启动②信息的传递。

Worker启动与调度Driver

  • 如果一个Driver需要启动的话那么首先Master就会给Driver发送一个启动消息LaunchDriver,其中包括Driver的id与DriverDesc也就是Driver的描述信息。在接收到信息之后首先会启动DriverRunner,后续的启动过程中的一些步骤都是DriverRunner去调度。
  • Worker在接收到工作目录的时候会给当前的Driver创建一个目录,这个目录用来存放与这个Driver一些相关的文件。
  • 下载用户上传的jar到刚才的工作目录中。也就是我们计算的程序以及一些依赖的jar包。
  • 构建ProcessBuilder,ProcessBuilder是Java中启动一个线程的类。在启动Driver的时候我们会将Driver的启动命令,内存大小,是否可监控等信息作为参数。最后通过waitFor方法去启动Driver。
  • 当Driver进程终结时,DriverRunner会向Worker所属的线程发送DriverStateChanged事件。这时Worker也会向Master发送这个消息,Master再收到信息之后会将这个Driver从内存中移除。同时Worker也会释放Driver占用的资源同时改变自己是否可用的状态,也就是这个Worker又变得可用了。

 

Worker启动与调度Executor

这个过程与上面的Worker十分的相似。

  • 整个前提就是Master通过自己的调度算法将Application所需要的资源分摊到各个Worker上面。每个Worker上面对应的计算存储资源也就构成了Executor。
  • Master向Worker发送LaunchExecutor。当然发送的信息包括,想要构建的Executor的id号、这个Executor所对应的ApplicationId的id号与描述信息、所分配的计算资源的核数,所分配的内存的大小。
  • Worker创建Executor所对应的工作目录。
  • 创建ExecutorRunner,用来构建ProcessBuilder进而通过waitFor方法来启动真正的Executor。
  • 当Executor启动之后,ExecutorRunner会向Worker发送消息然后Worker会将这个Executor反向注册到它对应的Driver上。
  • 当Executor的状态发生改变,也会同⑤步骤一样告诉Master,如果执行失败那么会重新调度直到一定的次数。如果被判定为终结状态的话那么就将这个Executor所对应的资源释放也将这个Application判定为执行失败。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spark集群是由多台计算机组成的分布式计算系统,其工作原理如下: 1. Master节点:Spark集群中的一个节点被称为Master节点,其主要负责协调整个集群的工作。Master节点负责分配任务给各个Worker节点,并监控Worker节点的状态。 2. Worker节点:Spark集群中的多个节点被称为Worker节点,它们执行Master节点分配的任务。Worker节点之间可以互相通信,以便共享数据和计算资源。 3. RDD(Resilient Distributed Datasets):RDD是Spark中的核心概念,它是一个可分区、可重用、容错的数据集合。Spark将数据划分为多个分区,分区分布在不同的Worker节点上。RDD的分区可以在不同的Worker节点上并行处理,从而提高计算效率。 4. 任务调度:Spark将任务分为多个阶段(Stage),每个阶段包含一个或多个Task。Master节点负责将任务分成多个Stage,并将Stage分配给Worker节点。Worker节点执行Task,并将结果返回给Master节点。 5. 内存计算:Spark将数据存储在内存中,可以快速访问和处理。Spark使用内存计算来提高计算效率,尤其是对于迭代计算和机器学习等需要多次访问同一数据集的计算任务。 总的来说,Spark集群通过将数据分布到多个节点上,并且在内存中进行计算,实现了高效的分布式计算。Spark的任务调度和内存计算能力也使其适用于处理大规模数据集和复杂的计算任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elong_Hu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值