Spark之Worker工作原理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34993631/article/details/86667070

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判定为执行失败。

猜你喜欢

转载自blog.csdn.net/qq_34993631/article/details/86667070
今日推荐