[ 
https://issues.apache.org/jira/browse/SPARK-58649?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dongjoon Hyun reassigned SPARK-58649:
-------------------------------------

    Assignee: Yannick Goetschel

> Allow SparkApplication drivers ingress to SparkCluster workers  
> ----------------------------------------------------------------
>
>                 Key: SPARK-58649
>                 URL: https://issues.apache.org/jira/browse/SPARK-58649
>             Project: Spark
>          Issue Type: Bug
>          Components: Kubernetes
>    Affects Versions: kubernetes-operator-1.0.0
>         Environment:   
>            Reporter: Yannick Goetschel
>            Assignee: Yannick Goetschel
>            Priority: Major
>              Labels: pull-request-available
>
> We run per-user Spark Connect sessions as SparkApplications attached to a 
> shared
>   standalone SparkCluster. Most jobs are fine, but every so often one dies 
> like this:
> {code:java}
> Job aborted due to stage failure: Task 11 in stage 2.0 failed 4 times, most 
> recent
> failure: Lost task 11.3 in stage 2.0 (TID 86) (<executor-ip> executor 3):
> TaskResultLost (result lost from block manager)
> {code}
> We run per-user Spark Connect sessions as SparkApplications attached to a 
> shared
> standalone SparkCluster. Most jobs are fine, but every so often one dies like 
> this:
> {code:java}
>   Job aborted due to stage failure: Task 11 in stage 2.0 failed 4 times, most 
> recent
>   failure: Lost task 11.3 in stage 2.0 (TID 86) (<executor-ip> executor 3):
>   TaskResultLost (result lost from block manager)
> {code}
> The driver log explains why only some of them:
> {code:java}
>  java.io.IOException: Connecting to /<executor-ip>:<ephemeral-port> timed out 
> (120000 ms)
>         at 
> org.apache.spark.network.client.TransportClientFactory.createClient(...)
>         at 
> org.apache.spark.network.netty.NettyBlockTransferService$$anon$2.createAndStart(...)
>         at 
> org.apache.spark.network.shuffle.RetryingBlockTransferor.transferAllOutstanding(...)
>         at org.apache.spark.storage.BlockManager.fetchRemoteManagedBuffer(...)
>         at org.apache.spark.scheduler.TaskResultGetter$$anon$3.run(...)
>  {code}
> The driver cannot reach the executors' block manager. That only matters once 
> a task
> result goes over {{spark.task.maxDirectResultSize}} (1 MB): below it the 
> result rides
> along inline in the RPC, above it the executor parks the result in its block 
> manager and
> hands the driver an {{IndirectTaskResult}} to go and fetch. The tasks that 
> stayed under
> the limit never noticed anything. The three that went over timed out, retried 
> three
> times and gave up, and the stage aborted on the fourth attempt.
> The culprit is the worker NetworkPolicy the operator generates for every 
> SparkCluster in
> {{SparkClusterResourceSpec#buildWorkerNetworkPolicy}}:
> {code:yaml}
>   podSelector:
>     matchLabels: {spark-role: worker, spark.operator/spark-cluster-name: 
> <cluster>}
>   ingress:
>   - from:
>     - podSelector:
>         matchLabels: {spark.operator/spark-cluster-name: <cluster>}
>   policyTypes: [Ingress]
>   {code}
> Only pods carrying the cluster label may talk to the workers. But a 
> SparkApplication
> attached to the cluster is a separate resource: its driver is labelled
> {{spark-role: driver}} and {{spark.operator/spark-app-name: <app>}}, never 
> the cluster
> label. So the driver is locked out of its own executors.
> The executor-to-driver direction works perfectly well —
> executors register, tasks get dispatched, tasks run. Only the return path for 
> large
> results is broken, so the cluster looks healthy right up until a job happens 
> to cross
> the 1 MB threshold.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to