Spark Client-server Boundary & Spark Connect
Từ Spark classic/Py4J tới Spark Connect: client gửi plan/command tới server runtime.
Câu hỏi
Spark classic khác Spark Connect ở boundary client-server nào?
Mental model
Trong PySpark classic, Python process thường nói với JVM driver qua Py4J:
Python user code
-> Py4J gateway
-> JVM Spark driver
-> executorsPython có thể cầm handle tới nhiều object JVM. Điều này tiện, nhưng trong môi trường multi-user/governed runtime thì nguy hiểm vì Python có thể gọi sâu vào JVM API surface.
Spark Connect đổi boundary:
Client
-> gửi unresolved logical plan / request qua protocol
-> Spark Connect server
-> Spark runtime/executorsClient không còn cầm trực tiếp SparkContext/JVM handle như classic.
Vì sao liên quan Databricks Runtime
Databricks cần vừa giữ compatibility với Spark classic, vừa hạn chế bypass trong shared/serverless/UC mode. Vì vậy khi đọc snapshot, cần để ý:
- mode nào còn Py4J/JVM handle;
- mode nào chuyển sang Spark Connect;
sc,spark.sparkContext, RDD API bị chặn ở đâu;- Python TripWire/RemoteContext chỉ là UX guard hay security boundary thật;
- JVM Py4J security manager mới là rào thật hay không.