spark源码分析,master如何开启,master和worker是怎么通信

master的开启,开启了master,会在本机开启master netty服务端,用来接收远程或者本地客户端发送数据,再对master服务进行绑定。
开启流程如worker的开启流程:https://blog.csdn.net/LinkStars/article/details/112982187 spark源码学习 -worker启动消息通信,inbox,outbox创建

netty 服务端发送消息:
master消息接收会存放到master 的inbox中,master 的inbox会不断轮询进行process,master端点处理消息,处理完成,首先master把消息放置到自己的outbox中,拿到远程端点ref,发送时,创建连接远程worker netty 客户端,去连接worker 的 netty 服务端,向其发送消息,远程再把消息放置worker 的inbox中。

不管master开启,worker 的开启以及executor开启都是会开启自己本地netty服务端。master和worker的开启时开启jvm进程,当worker中的executor(executor创建在worker jvm进程中开启线程,帮助开启子进程CoarseGrainedExecutorBackend)需要通信,是创建远程连接netty client端与其通信。

master类:
def main(argStrings: Array[String]): Unit = {
val (rpcEnv, _, _) = startRpcEnvAndEndpoint(args.host, args.port, args.webUiPort, conf)
rpcEnv.awaitTermination()
}
def startRpcEnvAndEndpoint( host: String, port: Int,webUiPort: Int, conf: SparkConf): (RpcEnv, Int, Option[Int]) = {
val rpcEnv = RpcEnv.create(SYSTEM_NAME, host, port, conf, securityMgr)//这里开启nettty 服务端
val masterEndpoint = rpcEnv.setupEndpoint(ENDPOINT_NAME,
new Master(rpcEnv, rpcEnv.address, webUiPort, securityMgr, conf)) //开启master 服务,创建inbox收件箱,首先处理 endpoint.onStart(),master的onStart方法
val portsResponse = masterEndpoint.askSyncBoundPortsResponse//case BoundPortsRequest 回复
context.reply(BoundPortsResponse(address.port, webUi.boundPort, restServerBoundPort))
(rpcEnv, portsResponse.webUIPort, portsResponse.restPort)
}

executor创建在worker jvm进程中开启线程。如下:
worker类:
executors(appId + “/” + execId) = manager
manager.start()
ExecutorRunner类中
private[worker] def start(): Unit = {
workerThread = new Thread("ExecutorRunner for " + fullId) {
override def run(): Unit = { fetchAndRunExecutor() }
}
作者:小亦
好好学习,天天向上

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值