pyspark principle | python spark 集成原理_spark

PythonRunner.scala里启动了java_gateway.py
也启动了 和Python通信用的py4j.GatewayServer并把端口告诉了java_gateway.py

context.py调用java_gateway.py

java_gateway.py可以调用scala类

主要就是context.py里的java_gateway.py调用生成了PythonRDD.scala

这样job就由context.py里的java_gateway.py调用的scala类发出

————-master|worker分界线————–

这样worker端就可以处理PythonRDD.scala

PythonRDD.scala->compute()调用SparkEnv.scala->createPythonWorker()

然后ProcessBuilder生成进程daemon.py或worker.py,并保持和Python的通信

然后worker.py通过socket向本地Worker节点上的JVM返回计算结果,
具体是PythonRDD.scala的compute()方法里的​​
val worker: Socket = env.createPythonWorker(pythonExec, envVars.asScala.toMap)​
​这个JVM的val worker负责读出计算结果并后面也搞成一个Iterator