全部版块 我的主页
论坛 数据科学与人工智能 大数据分析 spark高速集群计算平台
3994 4
2016-06-02

先看一下Worker中Driver和Executor注册过程:


Worker本身核心的作用是:管理当前机器的内存和CPU等资源,接受Master的指令来启动Driver,或者启动Executor。

如何启动Driver

如何启动Executor

如果Driver或者Executor有挂掉了,则Master就可以通过schedule再次调度资源。

Worker本身在实际运行的时候作为一个进程。实现RPC通信的。

复制代码

Master通过RPC协议将消息发给Worker,Worker通过receive接收到了Master发过来的消息。

复制代码

根据DriverId来具体管理DriverRunner。DriverRunner内部通过开辟线程的方式来启动了另外的一个线程。DriverRunner是Driver所在进程中Driver本身的Process。

复制代码

DriverRunner:

管理Driver的执行,包括在Driver失败的时候自动重启,主要是指在standaolone模式。Worker会负责重新启动Driver。Cluster中的Driver失败的时候,如果supervise为true,则启动Driver的Worker会负责重新启动该Driver。

复制代码

创建Driver的工作目录:

复制代码

createWorkingDirectory(),创建Driver的工作目录

复制代码

自己写的代码打成Jar包。

复制代码

下载Jar文件,返回Jar在本地的路径,将程序打成JAR包上传到HDFS上,这样每台机器均可以从HDFS上下载。

复制代码

有些变量在开始的时候是占位符,因为还没有初始化,所以在实际运行的时候要初始化。

复制代码

command主要就是构建进程执行类的入口。

复制代码

launchDriver的源码如下:将stdout和stderr重定向到了baseDir之下了,这样就可以通过log去查看之前的执行情况。

复制代码

ProcessBuilderLike静态方法:

复制代码

ProcessBuilderLike源码如下:

复制代码

而在runCommandWithRetry方法中:

复制代码

最后,如果Driver的状态有变,则会给自己发条消息。

复制代码

Worker端:

复制代码

给Master发消息

复制代码

然后Masterreceive方法是负责接收Worker发消息的。根据Driver状态进行处理。

复制代码

removeDriver方法:从自己的数据结构中remove掉。

复制代码

LaunchExecutor:先判断是否此时的路径是是activeMasterUrl

复制代码

创建Executor的工作目录

复制代码

启动ExecutorRunner

复制代码

Start()方法通过fetchAndRunExecutor方法启动Executor。

复制代码

fetchAndRunExecutor源码如下:

复制代码
然后Worker将消息发送给Master
复制代码

Master端处理的时候,还要给Driver发送消息
复制代码

Worker原理内幕和流程控制如下图:


{%81VK0T6]RZSB69%H3J[22.png




注:本学习笔记来自DT大数据梦工厂


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-6-17 11:55:29
代码是亮点
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-6-17 13:12:00
yuan161 发表于 2016-6-17 11:55
代码是亮点
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-6-18 17:27:18
yuan161 发表于 2016-6-17 11:55
代码是亮点
你的回复也是亮点
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-6-18 17:28:07
yuan161 发表于 2016-6-17 11:55
代码是亮点
你的回复也是亮点
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群