Uploaded image for project: 'Spark'
  1. Spark
  2. SPARK-33349

ExecutorPodsWatchSnapshotSource: Kubernetes client has been closed

    XMLWordPrintableJSON

Details

    • Bug
    • Status: In Progress
    • Critical
    • Resolution: Unresolved
    • 3.0.1, 3.0.2, 3.1.0
    • None
    • Kubernetes
    • None

    Description

      I launch my spark application with the spark-on-kubernetes-operator with the following yaml file:

      apiVersion: sparkoperator.k8s.io/v1beta2
      kind: SparkApplication
      metadata: 
         name: spark-kafka-streamer-test
         namespace: kafka2hdfs
      spec: 
         type: Scala
         mode: cluster
         image: <my-repo>/spark:3.0.2-SNAPSHOT-2.12-0.1.0
         imagePullPolicy: Always
         timeToLiveSeconds: 259200
         mainClass: path.to.my.class.KafkaStreamer
         mainApplicationFile: spark-kafka-streamer_2.12-spark300-assembly.jar
         sparkVersion: 3.0.1
         restartPolicy: 
           type: Always
         sparkConf: 
           "spark.kafka.consumer.cache.capacity": "8192"
           "spark.kubernetes.memoryOverheadFactor": "0.3"
         deps: 
         jars: 
           - my
           - jar
           - list
         hadoopConfigMap: hdfs-config
      
         driver: 
           cores: 4
           memory: 12g
           labels: 
             version: 3.0.1
           serviceAccount: default
           javaOptions: "-Dlog4j.configuration=file:///opt/spark/log4j/log4j.properties"
      
        executor: 
           instances: 4
          cores: 4
          memory: 16g
          labels: 
            version: 3.0.1
          javaOptions: "-Dlog4j.configuration=file:///opt/spark/log4j/log4j.properties"
      

       I have tried with both Spark `3.0.1` and `3.0.2-SNAPSHOT` with the "Restart the watcher when we receive a version changed from k8s" patch.

      This is the driver log:

      20/11/04 12:16:02 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
      
      ... // my app log, it's a structured streaming app reading from kafka and writing to hdfs
      
      20/11/04 13:12:12 WARN ExecutorPodsWatchSnapshotSource: Kubernetes client has been closed (this is expected if the application is shutting down.)
      io.fabric8.kubernetes.client.KubernetesClientException: too old resource version: 1574101276 (1574213896)
       at io.fabric8.kubernetes.client.dsl.internal.WatchConnectionManager$1.onMessage(WatchConnectionManager.java:259)
       at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.java:323)
       at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.java:219)
       at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.java:105)
       at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.java:274)
       at okhttp3.internal.ws.RealWebSocket$2.onResponse(RealWebSocket.java:214)
       at okhttp3.RealCall$AsyncCall.execute(RealCall.java:203)
       at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
       at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
       at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
       at java.base/java.lang.Thread.run(Unknown Source)
      

      The error above appears after roughly 50 minutes.

      After the exception above, no more logs are produced and the app hangs.

      Attachments

        Activity

          People

            Unassigned Unassigned
            redsk Nicola Bova
            Dongjoon Hyun Dongjoon Hyun
            Votes:
            4 Vote for this issue
            Watchers:
            16 Start watching this issue

            Dates

              Created:
              Updated: