Run Spark Submit (spark-submit) on Kubernetes
ইলুমের একটি সাধারণ স্পার্ক কাজ স্ট্যান্ডার্ডের মাধ্যমে জমা দেওয়া একটির মতোই কাজ করে স্পার্ক-সাবমিট কমান্ড, তবে ব্যবহারের সহজতা, কনফিগারেশন এবং বাহ্যিক সরঞ্জামগুলির সাথে সংহতকরণের জন্য অতিরিক্ত বর্ধন সহ।
আপনি আপনার স্থানীয় স্পার্ক ইনস্টলেশন বা আপনার কাছে থাকা কোনও কাস্টম জার থেকে স্পার্ক উদাহরণ সহ জার ফাইলটি ব্যবহার করতে পারেন।
নীচে একটি সাধারণ স্পার্ক কাজ সেট আপ এবং চালানোর জন্য একটি ধাপে ধাপে গাইড রয়েছে স্পার্ক-সাবমিট on Ilum. This guide demonstrates the core configuration needed and shows how to monitor your job’s progress within the Ilum platform. For a complete overview of Ilum's architecture, check the Architecture Overview.
How do I run a Spark job on Kubernetes with স্পার্ক-সাবমিট ?
To run a Spark job on Ilum (Kubernetes), ensure Java 17 and Spark 3.5.7 are installed, upload your JAR, and run:
./বিন/স্পার্ক-সাবমিট \
--মাস্টার k8s://http://<ilum-core-address>:<ilum-core-port> \
--মোতায়েন-মোড ক্লাস্টার \
--class org.apache.spark.examples.SparkPi \
--conf spark.driver.memory=4g \
--conf spark.ilum.cluster=default \
--conf spark.kubernetes.container.image=ilum/spark:3.5.7 \
--conf spark.kubernetes.submission.waitAppCompletion=true \
s3a://ilum-files/spark-examples_2.12-3.5.7.jar
Note: Replace <ilum-core-address> with your actual Ilum Core endpoint.
Step-by-Step Guide
1. Prerequisites
- নিশ্চিত করুন যে জাভা 17 ইনস্টল করা আছে এবং আপনার মধ্যে সঠিকভাবে সেট করা আছে
JAVA_HOME. - ডাউনলোড এবং এক্সট্রাক্ট করুন Apache Spark 3.5.7(বা সমতুল্য সংস্করণ):
wget https://dlcdn.apache.org/spark/spark-3.5.7/spark-3.5.7-bin-hadoop3.tgz
tar -xzf spark-3.5.7-bin-hadoop3.tgz
cd spark-3.5.7-bin-hadoop3
2. Connect to Ilum
If Ilum is deployed on Kubernetes, forward the service port to your local machine to make Ilum accessible at লোকালহোস্ট:9888 .
- কুবেক্টল পোর্ট-ফরোয়ার্ড এসভিসি / আইএলইউএম-কোর 9888: 9888
আপনি যদি একই কুবারনেটস ক্লাস্টারের মধ্যে থেকে যোগাযোগ করছেন তবে আপনি কুবারনেটস ডিএনএস-ভিত্তিক পরিষেবা ঠিকানাগুলি ব্যবহার করতে পারেন (উদাঃ, http://ilum-core.namespace.svc.cluster.local ) or expose services using Ingress.
3. Submit Your Spark Job
Choose the submission method that best fits your workflow:
- REST (Local Testing)
- Kubernetes (Production)
- Auto-Upload (Local JAR)
This method is suitable for quick local testing.
1. Upload your JAR File
For demonstration, we assume the JAR is uploaded manually to MinIO.
-
Locate the example JAR:
examples/jars/spark-examples_2.12-3.5.7.jar -
Upload it to MinIO (bucket
ইলুম-ফাইল). Example path:s3a://ilum-files/spark-examples_2.12-3.5.7.jar2. Submit via REST
Limitationspark.ilum.pyRequirementsis not supported in this mode, as REST does not support PySpark submissions.Run the following command:
REST Submit./বিন/স্পার্ক-সাবমিট \
--মাস্টার spark://localhost:9888 \
--মোতায়েন-মোড ক্লাস্টার \
--class org.apache.spark.examples.SparkPi \
--conf spark.master.rest.enabled=true \
--conf spark.ilum.cluster=default \
--conf spark.app.name=my-spark-job \
s3a://ilum-files/spark-examples_2.12-3.5.7.jarParameters:
| Parameter | বর্ণনা |
|---|---|
--মাস্টার | Ilum Core address via REST (e.g. spark://localhost:9888). |
--conf spark.master.rest.enabled=true | Enables REST submission. |
s3a://... | JAR file path in MinIO. |
Expected Output
আরইএসটি অ্যাপ্লিকেশন জমা দেওয়ার প্রোটোকল ব্যবহার করে চলমান স্পার্ক।
25/03/12 12:58:01 INFO RestSubmissionClient: spark://localhost:9888 মধ্যে একটি অ্যাপ্লিকেশন চালু করার জন্য একটি অনুরোধ জমা দেওয়া।
25/03/12 12:58:03 INFO RestSubmissionClient: জমা দেওয়া সফলভাবে 20250312-1158-qdnioef2rny হিসাবে তৈরি করা হয়েছে। ভোট জমা দেওয়ার রাজ্য...
25/03/12 12:58:03 INFO RestSubmissionClient: spark://localhost:9888 সালে 20250312-1158-qdnioef2rny জমা দেওয়ার স্থিতির জন্য একটি অনুরোধ জমা দেওয়া।
25/03/12 12:58:03 INFO RestSubmissionClient: ড্রাইভারের অবস্থা 20250312-1158-qdnioef2rny এখন জমা দেওয়া হয়েছে।
25/03/12 12:58:03 INFO RestSubmissionClient: ড্রাইভার ILUM_UI_ADDRESS/ওয়ার্কলোডস/ডিটেইলস/জব/20250312-1158-qdnioef2rny-এ ওয়ার্কার ILUM এ চলছে।
25/03/12 12:58:03 INFO RestSubmissionClient: সার্ভার ক্রিয়েটসাবমিশনরেসপন্স দিয়ে প্রতিক্রিয়া জানিয়েছে:
{
"ক্রিয়া": "জমা দেওয়ার প্রতিক্রিয়া তৈরি করুন",
"serverSparkVersion" : "3.5.7",
"সাবমিশনআইডি" : "20250312-1158-qdnioef2rny",
"সাফল্য" : সত্য
}
25/03/12 12:58:03 তথ্য শাটডাউনহুকম্যানেজার: শাটডাউন হুক কল করা হয়েছে
25/03/12 12:58:03 INFO ShutdownHookManager: মুছে ফেলা হচ্ছে ডিরেক্টরি /tmp/spark-fa2603be-488a-4e2a-9b7f-5e49825d379b
This method is recommended for production and supports advanced features like Python dependencies.
1. Upload your JAR File
For demonstration, we assume the JAR is uploaded manually to MinIO.
In production environments, this process should be automated and executed programmatically (e.g., using AWS SDK, Hadoop's S3A connector) before triggering স্পার্ক-সাবমিট .
-
Locate the example JAR:
examples/jars/spark-examples_2.12-3.5.7.jar -
Upload it to MinIO (bucket
ইলুম-ফাইল). Example path:s3a://ilum-files/spark-examples_2.12-3.5.7.jar2. Submit via Kubernetes Mode
Include Ilum-specific configurations for better management:
-
--conf spark.ilum.cluster=default -
--conf spark.app.name=my-spark-job -
--conf spark.ilum.tags=analytics,pi-calculation -
--conf spark.ilum.pyRequirements="numpy==1.24.1,pandas==2.0.3"(if using Python)
These configurations allow you to better categorize, identify, and manage jobs within the Ilum UI. Run this command:
./বিন/স্পার্ক-সাবমিট \
--master k8s://http://localhost:9888 \
--মোতায়েন-মোড ক্লাস্টার \
--class org.apache.spark.examples.SparkPi \
--conf spark.driver.memory=4g \
--conf spark.ilum.cluster=default \
--conf spark.kubernetes.container.image=ilum/spark:3.5.7 \
--conf spark.kubernetes.submission.waitAppCompletion=true \
s3a://ilum-files/spark-examples_2.12-3.5.7.jar
Parameters:
| Parameter | বর্ণনা |
|---|---|
--মাস্টার | Address of your Kubernetes API (or Ilum Core for REST mode). |
--ডিপ্লয়-মোড ক্লাস্টার | Submits the job to the Spark cluster. |
--শ্রেণী | Entry point class of your Spark application (use format filename.classname পাইথনের জন্য)। |
--কনফ স্পার্ক.ড্রাইভার.মেমরি | Specifies memory allocation for the driver. |
--conf spark.ilum.cluster | Logical cluster name defined in Ilum. |
--conf spark.kubernetes.container.image | Docker image containing Spark. |
--conf spark.kubernetes.submission.waitAppCompletion=true | Keeps the CLI process attached until the job completes. |
s3a://... | JAR path in S3-compatible storage like MinIO. |
Expected Output
25/04/02 15:42:30 তথ্য স্পার্ককুবারনেটসক্লায়েন্টফ্যাক্টরি: ব্যবহারকারীদের কাছ থেকে বর্তমান প্রসঙ্গ ব্যবহার করে কে 8 এস ক্লায়েন্টকে স্বয়ংক্রিয় কনফিগার করা হচ্ছে K8S কনফিগারেশন ফাইল
25/04/02 15:42:38 INFO LoggingPodStatusWatcherImpl: রাষ্ট্র পরিবর্তিত, নতুন রাষ্ট্র:
POD নাম: org-apache-spark-examples-sparkpi-30ae6d95f6bd37fd-driver
নামস্থান: ডিফল্ট
লেবেলসমূহ: ilum.jobId -> 20250402-1342-s55afwq7gax, ilum.clusterName -> default
POD UID: 20250402-1342-S55afwq7gax
তৈরির সময়: 2025-04-02T13:42:37.145Z
পরিষেবা অ্যাকাউন্টের নাম: আইএলইউএম-টেস্ট-ইলুম-কোর-স্পার্ক
খণ্ড: এন / এ
নোডের নাম: ইলুম
শুরুর সময়: 2025-04-02T13:42:37.145Z
পর্যায়: চলমান
ধারক অবস্থা:
ধারকের নাম: স্পার্ক-ড্রাইভার
container image: ilum/spark:3.5.7
ধারক রাষ্ট্র: চলমান
কন্টেইনার শুরু হয়েছে: 2025-04-02T13:42:37.145Z
25/04/02 15:42:38 INFO LoggingPodStatusWatcherImpl: অ্যাপ্লিকেশন আইডি spark-a4f8f1eb4ed344f38d799d79817c45dc এবং জমা আইডি ডিফল্ট : org-apache-spark-examples-sparkpi-30ae6d95f6bd37fd-driver to finish...
25/04/02 15:42:39 INFO LoggingPodStatusWatcherImpl: spark-a4f8f1eb4ed344f38d799d79817c45dc (পর্ব: চলমান) এর জন্য আবেদনের স্থিতি
...
25/04/02 15:43:03 INFO LoggingPodStatusWatcherImpl: spark-a4f8f1eb4ed344f38d799d79817c45dc (পর্যায়: চলমান) এর জন্য আবেদনের স্থিতি
25/04/02 15:43:03 INFO LoggingPodStatusWatcherImpl: ধারক চূড়ান্ত অবস্থা:
ধারকের নাম: স্পার্ক-ড্রাইভার
container image: ilum/spark:3.5.7
ধারক রাষ্ট্র: চলমান
কন্টেইনার শুরু হয়েছে: 2025-04-02T13:42:37.145Z
25/04/02 15:43:03 INFO LoggingPodStatusWatcherImpl: Application org.apache.spark.examples.SparkPi with application ID spark-a4f8f1eb4ed344f38d799d79817c45dc এবং জমা আইডি ডিফল্ট :org-apache-spark-examples-sparkpi-30ae6d95f6bd37fd-driver সমাপ্ত
25/04/02 15:43:03 তথ্য শাটডাউনহুকম্যানেজার: শাটডাউন হুক কল করা হয়েছে
25/04/02 15:43:03 INFO ShutdownHookManager: মুছে ফেলা হচ্ছে ডিরেক্টরি /tmp/spark-61e63485-79a3-491d-9bac-c71a8c1d96aa
Ilum can automatically upload your local JARs to MinIO during submission.
1. Additional Prerequisites Forward the MinIO port so the local Spark client can upload files:
কুবেক্টল পোর্ট-ফরোয়ার্ড এসভিসি / আইএলইউএম-মিনিও 9000: 9000
2. Download S3 Dependencies
Download the required Hadoop/AWS JARs to your local জার folder:
wget -P jars \
https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.3.4/hadoop-aws-3.3.4.jar \
https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk/1.12.262/aws-java-sdk-1.12.262.jar \
https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-core/1.12.262/aws-java-sdk-core-1.12.262.jar \
https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-dynamodb/1.12.262/aws-java-sdk-dynamodb-1.12.262.jar \
https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-s3/1.12.262/aws-java-sdk-s3-1.12.262.jar
3. Submit with Auto-Upload
This command includes configuration to connect to the local MinIO port and upload files. (replace image/tag or S3 credentials as needed)
./বিন/স্পার্ক-সাবমিট \
--master k8s://http://localhost:9888 \
--মোতায়েন-মোড ক্লাস্টার \
--class org.apache.spark.examples.SparkPi \
--conf spark.ilum.cluster=default \
--conf spark.app.name=my-sparkpi-job \
--conf spark.kubernetes.container.image=ilum/spark:3.5.7 \
--conf spark.kubernetes.submission.waitAppCompletion=true \
--conf spark.kubernetes.file.upload.path=s3a://ilum-files/spark-jobs \
--conf spark.hadoop.fs.s3a.endpoint=http://localhost:9000 \
--conf spark.hadoop.fs.s3a.access.key=minioadmin \
--conf spark.hadoop.fs.s3a.secret.key=minioadmin \
--conf spark.hadoop.fs.s3a.path.style.access=true \
--conf spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem \
--conf spark.hadoop.fs.s3a.fast.upload=true \
--conf spark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider \
./examples/jars/spark-examples_2.12-3.5.7.jar
পর্দার আড়ালে কী ঘটে?
- স্পার্ক ক্লায়েন্ট আপনার স্থানীয় জারকে স্বয়ংক্রিয়ভাবে নির্দিষ্ট মিনিও বালতিতে আপলোড করে (
আইএলইউএম-ফাইলস / স্পার্ক-জবস). - ইলাম-পরিচালিত কুবারনেটস ক্লাস্টারে কুবারনেটস ড্রাইভার পড তৈরি করা হয়েছে।
- ইলাম ইউআইয়ের মাধ্যমে সরাসরি জব এক্সিকিউশন পর্যবেক্ষণ করা হয়।
4. Monitor and Troubleshoot
Using the Ilum UI:
- কাজের অগ্রগতি পর্যবেক্ষণ করুন: Track executors, memory usage, and job stages.
- Review Results: Access logs and the integrated Spark History Server.
- Troubleshoot: Diagnose failures by checking detailed executor logs.
For more details on monitoring metrics, see the Monitoring Guide.
Comparison: Classic spark-submit vs Ilum Approach
Running Spark directly on Kubernetes requires significant administrative effort. Ilum simplifies this by automating infrastructure management.
Traditional Approach (Native Spark on K8s) vs Ilum
| বৈশিষ্ট্য | Native Spark on K8s | Ilum (Managed Spark) |
|---|---|---|
| Setup | Manual Docker image build & complex স্পার্ক-সাবমিট args. | Automated. Use existing JARs; Ilum handles images. |
| কনফিগার | Verbose (Service Accounts, Volumes, Secrets). | Simplified. Minimal args; configs are injected automatically. |
| সঞ্চয় | Manual Hadoop/S3 configuration per job. | Integrated. Automatic credential injection for S3/GCS/Azure. |
| নজরদারি | CLI-based (kubectl logs), ephemeral. | Centralized UI. Persistent logs, metrics, and history. |
| পর্যবেক্ষণযোগ্যতা | Basic Spark UI (if exposed). | উন্নত . উপাত্ত বংশ , detailed resource metrics. |
Key Benefits of Ilum:
- Automatic Image Selection: Ilum selects a compatible Spark Docker image matching the cluster version.
- Advanced Observability: Ilum provides deep lineage observability and advanced monitoring capabilities.
- Simplified Configuration: Reduce
স্পার্ক-সাবমিটparameters by 3x-4x. - Integrated Storage Access: Credentials for all configured storages are automatically injected.
- Instant Monitoring: Logs and metrics (CPU/RAM) appear in the Ilum UI immediately.
For a developer, this means less time fighting with infrastructure and error-prone configurations, and more time delivering business logic.
For advanced customization, refer to the official Spark documentation.