我在Kubernetes中有2个Spark Master和3个Spark Worker。目前,我正在启用监督标记的情况下以集群部署模式提交spark作业。现在要检查是否在其他Sparkworker上重新生成驱动程序,我将删除包含该驱动程序的Sparkworker容器。这将导致删除吊舱并在另一个Sparkworker吊舱中重新生成驱动程序。但这有时会失败,有时会起作用。我提交给Spark的代码中启用了检查点。
从代码角度看:我试图直接从sparkcontext使用streamingcontext。这样可以使驾驶员在另一个Sparkworker吊舱中更好地重生。我还尝试过使用sparksession创建流上下文。这有时会导致驱动程序重生,有时会导致驱动程序被杀死。
从JVM角度来看:我试图杀死运行Spark提交的进程。这样会导致驱动程序重新出现在另一个Sparkworker Pod中。
火花提交:
/opt/spark/bin/spark-submit --deploy-mode cluster --total-executor-cores 3 --driver-memory 2G --supervise --driver-cores 1 --executor-cores 2 --executor-memory 8G --class com.CheckpointTest.app.SparkIngestion --master spark://sparkmaster-0.sparkmaster.default.svc.cluster.local:7077,sparkmaster-1.sparkmaster.default.svc.cluster.local:7077 http://http-server-clientsvc:5000/download/fs-ingestion-svc.jar;
驱动程序有时无法重新启动。