Spark执行流程
Spark带注释源码
对于整个Spark源码分析系列,我将带有注释的Spark源码和分析的文件放在我的GitHub上Spark源码剖析欢迎大家fork和star
过程描述:
1.通过Shell脚本启动Master,Master类继承Actor类,通过ActorySystem创建并启动。
2.通过Shell脚本启动Worker,Worker类继承Actor类,通过ActorySystem创建并启动。
3.Worker通过Akka或者Netty发送消息向Master注册并汇报自己的资源信息(内存以及CPU核数等),以后就是定时汇报,保持心跳。
4.Master接受消息后保存(源码中通过持久化引擎持久化)并发送消息表示Worker注册成功,并且定时调度,移除超时的Worker。
5.通过Spark-Submit提交作业或者通过Spark Shell脚本连接集群,都会启动一个Spark进程Driver。
6.Master拿到作业后根据资源筛选Worker并与Worker通信,发送信息,主要包含Driver的地址等。
7.Worker进行收到消息后,启动Executor,Executor与Driver通信。
8.Driver端计算作业资源,transformation在Driver 端完成,划分各个Stage后提交Task给Executor。
9.Exectuor针对于每一个Task读取HDFS文件,然后计算结果,最后将计算的最终结果聚合到Driver端或者写入到持久化组件中。
Spark启动Shell脚本
1.start-all.sh
可以中脚本文件看出,spark启动事首选启动spark-config.sh,然后启动start-master.sh 最后启动脚本
2.start-master.sh脚本
${SPARK_HOME}/sbin"/spark-daemon.sh start $CLASS1 \
--ip $SPARK_MASTER_IP--port $SPARK_MASTER_PORT--webui-port $SPARK_MASTER_WEBUI_PORT\
$ORIGINAL_ARGS
/sbin"/spark-daemon.sh start $CLASS1 \
--ip $SPARK_MASTER_IP--port $SPARK_MASTER_PORT--webui-port $SPARK_MASTER_WEBUI_PORT\
$ORIGINAL_ARGS
start-master.sh脚本主要执行的是这一块逻辑,主要使用spark-daemon.sh利用传入的参数启动Spark。
3.spark-daemon.sh脚本
nohup nice -n"$SPARK_NICENESS