我们都知道,写好spark程序后,可以通过命令行spark-submit方式提交到集群,那么这个具体的过程是怎么搞得呢?

spark有多种集群方式,如yarn,standalone等。提交方式又分为client和cluster等模式,这里就先拿standalone的client方式举例。

standalone方式下,spark集群有一个master和多个worker组成集群,现在spark又支持HA方式的热备,保障master安全,这块我们就不谈了,知道这个概念就行了。

spark-submit classMain xx.jar -master spark://127.0.0.1:8088 ,类似这样的命令提交jar包后,spark-submit先启动要给Client程序,然后这个Client程序将spark程序(classMain)打包成DriverDescription,并放在SubmitDriver消息体内提交给Master。

Master收到SubmitDriver消息后,根据消息里的参数DriverDescription创建好Driver,并等待调度。调度是schedule()方法触发的。这时候Master会找到一台Worker。并且给这台Worker发送LaunchDriver命令,LaunchDriver命令里带的参数就包括这个Driver的信息。

然后就是Worker的过程了,这时候这台Worker其实就是我们的spark程序的Driver所在的机器。这时候Worker会执行DriverRunnber,跑的就是我们的spark程序。

最后还有个小疑问?DriverRunner里是不是执行的是DriverWrapper呢?这点笔者还没完全搞明白哦。

09-23 07:06