Hi,
    I have found three important classes:
org.apache.spark.sql.connect.service.SparkConnectServer : the 
./sbin/start-connect-server.sh script use SparkConnectServer  class as main 
class. In main function, use SparkSession.builder.getOrCreate() create local 
sessin, and start SparkConnectService.
org.apache.spark.sql.connect.SparkConnectPlugin : To enable Spark Connect, 
simply make sure that the appropriate JAR is available in the CLASSPATH and the 
driver plugin is configured to load this class.
org.apache.spark.sql.connect.SimpleSparkConnectService : A simple main class 
method to start the spark connect server as a service for client tests. 

   So, I believe that by configuring the spark.plugins and starting the Spark 
cluster on Kubernetes, clients can utilize sc://ip:port to connect to the 
remote server. 
   Let me give it a try.



eabour
 
From: eab...@163.com
Date: 2023-10-19 14:28
To: Nagatomi Yasukazu; user @spark
Subject: Re: Re: Running Spark Connect Server in Cluster Mode on Kubernetes
Hi all, 
    Has the spark connect server running on k8s functionality been implemented?



 
From: Nagatomi Yasukazu
Date: 2023-09-05 17:51
To: user
Subject: Re: Running Spark Connect Server in Cluster Mode on Kubernetes
Dear Spark Community,

I've been exploring the capabilities of the Spark Connect Server and 
encountered an issue when trying to launch it in a cluster deploy mode with 
Kubernetes as the master.

While initiating the `start-connect-server.sh` script with the `--conf` 
parameter for `spark.master` and `spark.submit.deployMode`, I was met with an 
error message:

```
Exception in thread "main" org.apache.spark.SparkException: Cluster deploy mode 
is not applicable to Spark Connect server.
```

This error message can be traced back to Spark's source code here:
https://github.com/apache/spark/blob/6c885a7cf57df328b03308cff2eed814bda156e4/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala#L307

Given my observations, I'm curious about the Spark Connect Server roadmap:

Is there a plan or current conversation to enable Kubernetes as a master in 
Spark Connect Server's cluster deploy mode?

I have tried to gather information from existing JIRA tickets, but have not 
been able to get a definitive answer:

https://issues.apache.org/jira/browse/SPARK-42730
https://issues.apache.org/jira/browse/SPARK-39375
https://issues.apache.org/jira/browse/SPARK-44117

Any thoughts, updates, or references to similar conversations or initiatives 
would be greatly appreciated.

Thank you for your time and expertise!

Best regards,
Yasukazu

2023年9月5日(火) 12:09 Nagatomi Yasukazu <yassan0...@gmail.com>:
Hello Mich,
Thank you for your questions. Here are my responses:

> 1. What investigation have you done to show that it is running in local mode?

I have verified through the History Server's Environment tab that:
- "spark.master" is set to local[*]
- "spark.app.id" begins with local-xxx
- "spark.submit.deployMode" is set to local


> 2. who has configured this kubernetes cluster? Is it supplied by a cloud 
> vendor?

Our Kubernetes cluster was set up in an on-prem environment using RKE2( 
https://docs.rke2.io/ ).


> 3. Confirm that you have configured Spark Connect Server correctly for 
> cluster mode. Make sure you specify the cluster manager (e.g., Kubernetes) 
> and other relevant Spark configurations in your Spark job submission.

Based on the Spark Connect documentation I've read, there doesn't seem to be 
any specific settings for cluster mode related to the Spark Connect Server.

Configuration - Spark 3.4.1 Documentation
https://spark.apache.org/docs/3.4.1/configuration.html#spark-connect

Quickstart: Spark Connect — PySpark 3.4.1 documentation
https://spark.apache.org/docs/latest/api/python/getting_started/quickstart_connect.html

Spark Connect Overview - Spark 3.4.1 Documentation
https://spark.apache.org/docs/latest/spark-connect-overview.html

The documentation only suggests running ./sbin/start-connect-server.sh 
--packages org.apache.spark:spark-connect_2.12:3.4.0, leaving me at a loss.


> 4. Can you provide a full spark submit command

Given the nature of Spark Connect, I don't use the spark-submit command. 
Instead, as per the documentation, I can execute workloads using only a Python 
script. For the Spark Connect Server, I have a Kubernetes manifest executing 
"/opt.spark/sbin/start-connect-server.sh --packages 
org.apache.spark:spark-connect_2.12:3.4.0".


> 5. Make sure that the Python client script connecting to Spark Connect Server 
> specifies the cluster mode explicitly, like using --master or --deploy-mode 
> flags when creating a SparkSession.

The Spark Connect Server operates as a Driver, so it isn't possible to specify 
the --master or --deploy-mode flags in the Python client script. If I try, I 
encounter a RuntimeError.

like this:
RuntimeError: Spark master cannot be configured with Spark Connect server; 
however, found URL for Spark Connect [sc://.../]


> 6. Ensure that you have allocated the necessary resources (CPU, memory etc) 
> to Spark Connect Server when running it on Kubernetes.

Resources are ample, so that shouldn't be the problem.


> 7. Review the environment variables and configurations you have set, 
> including the SPARK_NO_DAEMONIZE=1 variable. Ensure that these variables are 
> not conflicting with 

I'm unsure if SPARK_NO_DAEMONIZE=1 conflicts with cluster mode settings. But 
without it, the process goes to the background when executing 
start-connect-server.sh, causing the Pod to terminate prematurely.


> 8. Are you using the correct spark client version that is fully compatible 
> with your spark on the server?

Yes, I have verified that without using Spark Connect (e.g., using Spark 
Operator), Spark applications run as expected.

> 9. check the kubernetes error logs

The Kubernetes logs don't show any errors, and jobs are running in local mode.


> 10. Insufficient resources can lead to the application running in local mode

I wasn't aware that insufficient resources could lead to local mode execution. 
Thank you for pointing it out.


Best regards,
Yasukazu

2023年9月5日(火) 1:28 Mich Talebzadeh <mich.talebza...@gmail.com>:

personally I have not used this feature myself. However, some points

What investigation have you done to show that it is running in local mode?
who has configured this kubernetes cluster? Is it supplied by a cloud vendor? 
Confirm that you have configured Spark Connect Server correctly for cluster 
mode. Make sure you specify the cluster manager (e.g., Kubernetes) and other 
relevant Spark configurations in your Spark job submission.
Can you provide a full spark submit command
Make sure that the Python client script connecting to Spark Connect Server 
specifies the cluster mode explicitly, like using --master or --deploy-mode 
flags when creating a SparkSession.
Ensure that you have allocated the necessary resources (CPU, memory etc) to 
Spark Connect Server when running it on Kubernetes.
Review the environment variables and configurations you have set, including the 
SPARK_NO_DAEMONIZE=1 variable. Ensure that these variables are not conflicting 
with cluster mode settings.
Are you using the correct spark client version that is fully compatible with 
your spark on the server? 
check the kubernetes error logs 
Insufficient resources can lead to the application running in local mode
HTH

Mich Talebzadeh,
Distinguished Technologist, Solutions Architect & Engineer
London
United Kingdom

   view my Linkedin profile

 https://en.everybodywiki.com/Mich_Talebzadeh
 
Disclaimer: Use it at your own risk. Any and all responsibility for any loss, 
damage or destruction of data or any other property which may arise from 
relying on this email's technical content is explicitly disclaimed. The author 
will in no case be liable for any monetary damages arising from such loss, 
damage or destruction. 
 


On Mon, 4 Sept 2023 at 04:57, Nagatomi Yasukazu <yassan0...@gmail.com> wrote:
Hi Cley,

Thank you for taking the time to respond to my query. Your insights on Spark 
cluster deployment are much appreciated.

However, I'd like to clarify that my specific challenge is related to running 
the Spark Connect Server on Kubernetes in Cluster Mode. While I understand the 
general deployment strategies for Spark on Kubernetes, I am seeking guidance 
particularly on the Spark Connect Server aspect.

cf. Spark Connect Overview - Spark 3.4.1 Documentation
    https://spark.apache.org/docs/latest/spark-connect-overview.html

To reiterate, when I connect from an external Python client and execute 
scripts, the server operates in Local Mode instead of the expected Kubernetes 
Cluster Mode (with master as k8s://... and deploy-mode set to cluster).

If I've misunderstood your initial response and it was indeed related to Spark 
Connect, I sincerely apologize for the oversight. In that case, could you 
please expand a bit on the Spark Connect-specific aspects?

Do you, or anyone else in the community, have experience with this specific 
setup or encountered a similar issue with Spark Connect Server on Kubernetes? 
Any targeted advice or guidance would be invaluable.

Thank you again for your time and help.

Best regards,
Yasukazu

2023年9月4日(月) 0:23 Cleyson Barros <euroc...@gmail.com>:
Hi Nagatomi,
Use Apache imagers, then run your master node, then start your many slavers. 
You can add a command line in the docker files to call for the master using the 
docker container names in your service composition if you wish to run 2 masters 
active and standby follow the instructions in the Apache docs to do this 
configuration, the recipe is the same except when you start the masters and how 
you expect the behaviour of your cluster. 
I hope it helps. 
Have a nice day :) 
Cley

Nagatomi Yasukazu <yassan0...@gmail.com> escreveu no dia sábado, 2/09/2023 à(s) 
15:37:
Hello Apache Spark community,

I'm currently trying to run Spark Connect Server on Kubernetes in Cluster Mode 
and facing some challenges. Any guidance or hints would be greatly appreciated.

## Environment:
Apache Spark version: 3.4.1
Kubernetes version:  1.23
Command executed: 
 /opt/spark/sbin/start-connect-server.sh \
   --packages 
org.apache.spark:spark-connect_2.13:3.4.1,org.apache.iceberg:iceberg-spark-runtime-3.4_2.13:1.3.1...
Note that I'm running it with the environment variable SPARK_NO_DAEMONIZE=1.

## Issue:
When I connect from an external Python client and run scripts, it operates in 
Local Mode instead of the expected Cluster Mode.

## Expected Behavior:
When connecting from a Python client to the Spark Connect Server, I expect it 
to run in Cluster Mode.

If anyone has any insights, advice, or has faced a similar issue, I'd be 
grateful for your feedback.
Thank you in advance.


Reply via email to