本文启动worker节点启动流程分析
启动命令:
${SPARK_HOME}/sbin/start-slave.sh spark://sysadmindeMacBook-Pro.local:7077
查看start-slave.sh
执行脚本:
/workspace/spark-2.2.2/sbin/spark-daemon.sh start org.apache.spark.deploy.worker.Worker 1 --webui-port 8081 spark://sysadmindeMacBook-Pro.local:7077 |
发现调用spark-daemon.sh脚本
打开脚本
发现最终调用的执行脚本为 bin目录下的 spark-class 脚本
这里分两步:
1.调用java脚本构建shell命令
调用java类:
org.apache.spark.launcher.Main
最终输出到shell脚本命令如下:
/Library/java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/bin/java -cp /workspace/spark-2.2.2/conf/:/workspace/spark-2.2.2/assembly/target/scala-2.11/jars/* -Xmx1g org.apache.spark.deploy.worker.Worker --webui-port 8081 spark://sysadmindeMacBook-Pro.local:7077 |
2.shell脚本执行shell命令
执行org.apache.spark.deploy.worker.Worker类中的方法
类中的内容:
先看def main(argStrings: Array[String]) 方法
接下来看如何开启的
|
createWorkDir 创建工作目录
注册master
sendRegisterMessageToMaster(masterEndpoint)
将work节点信息发送给master
sendRegisterMessageToMaster(masterEndpoint)
接下来就要看master里面recevice方法的
ReregisterWorker
主要关注两个地方:
1.注册worker
registerWorker(worker)
2.调度
schedule
先说:registerWorker(worker) 这里主要干的事就是注册worker
schedule 这里是调度方法,
基本上对集群资源的变更,节点状态的改变,任务的提交,都会执行此调度
在work启动里面,就可以理解为刷新资源信息就好了,后面会做详细解释
启动成功可以通过浏览器进行观看