我们都知道,写好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呢?这点笔者还没完全搞明白哦。
本文详细介绍了如何通过spark-submit命令在Standalone集群上以client模式提交Spark程序。提交过程涉及Spark DriverDescription的创建,Master的调度以及Worker的执行。在Master接收到SubmitDriver消息后,它会创建Driver并分配给Worker运行。最终,Worker上的DriverRunner执行程序,但DriverWrapper的具体执行细节仍有待进一步理解。
363

被折叠的 条评论
为什么被折叠?



