Skip to content

K8SSparkSubmitOperation

K8SSparkSubmitOperation is an extension of spark-submit (Apache Spark) for Spark on Kubernetes to support the operations:

K8SSparkSubmitOperation is registered with Apache Spark using META-INF/services/org.apache.spark.deploy.SparkSubmitOperation service file.

Killing Submission

kill(
  submissionId: String,
  conf: SparkConf): Unit

kill is part of the SparkSubmitOperation (Apache Spark) abstraction.

kill prints out the following message to standard error:

Submitting a request to kill submission [submissionId] in [spark.master]. Grace period in secs: [[getGracePeriod] | not set].

kill creates a KillApplication to execute it (with the input submissionId and SparkConf).

Displaying Submission Status

printSubmissionStatus(
  submissionId: String,
  conf: SparkConf): Unit

printSubmissionStatus is part of the SparkSubmitOperation (Apache Spark) abstraction.

printSubmissionStatus prints out the following message to standard error:

Submitting a request for the status of submission [submissionId] in [spark.master].

printSubmissionStatus creates a ListStatus to execute it (with the input submissionId and SparkConf).

Checking Whether Master URL Supported

supports(
  master: String): Boolean

supports is part of the SparkSubmitOperation (Apache Spark) abstraction.

supports is true when the input master starts with k8s:// prefix.

Executing Operation

execute(
  submissionId: String,
  sparkConf: SparkConf,
  op: K8sSubmitOp): Unit

execute is used for kill and printSubmissionStatus.

execute parses the master URL (based on spark.master configuration property).

execute uses : (the colon) to split the given submissionId to at most two parts - an optional namespace and a driver pod name. The driver pod name can use a glob pattern as * (the star).

execute creates a KubernetesClient (with Submission client type).

If the pod name uses the glob pattern (with *), execute requests the KubernetesClient for the driver pods (pods with the spark-role label with driver value) that it then hands over to the given K8sSubmitOp to executeOnGlob (with the optional namespace).

Otherwise, execute requests the given K8sSubmitOp to executeOnPod with the pod and the optional namespace.

execute prints out the following message and exits when the given submissionId cannot be split on : to two parts:

Submission ID: {[submissionId]} is invalid.

Last update: 2021-01-29