इलम में स्पार्क निर्भरता को संभालना
इलम provides three methods to handle dependencies for कुबेरनेट्स पर चिंगारी , each suited for different use cases ranging from rapid prototyping to stable production environments.
Comparison of Dependency Management Methods
| Method | के लिए सबसे अच्छा | हठ | Startup Speed |
|---|---|---|---|
| Custom Docker Image | उत्पादन , Large dependencies, Security | High (Immutable) | Fast (Pre-built) |
| Runtime Injection | Testing, PoCs, Small/Transient libs | Medium (Cached) | Slower (Downloads at startup) |
नोटबुक pip install | Ad-hoc Experiments, Exploration | None (Session only) | Slowest (Repeated installs) |
1. Dedicated Docker Image (Production Best Practice)
इस पद्धति में एक कस्टम डॉकर छवि बनाना शामिल है जिसमें सभी आवश्यक निर्भरताएं शामिल हैं। यह वातावरण में स्थिरता सुनिश्चित करता है और उत्पादन कार्यभार के लिए सबसे अच्छा तरीका है।
कस्टम स्पार्क इमेज बनाने के चरण
- आधिकारिक Ilum Spark आधार छवि से शुरू करें।
- किसी भी जावा-आधारित निर्भरता के लिए आवश्यक जार जोड़ें।
- आवश्यक पायथन पैकेज स्थापित करें।
- छवि को निजी या सार्वजनिक रजिस्ट्री में बनाएँ और पुश करें.
- इस नई छवि का उपयोग करने के लिए इलम को कॉन्फ़िगर करें।
उदाहरण: अपाचे आइसबर्ग समर्थन जोड़ना
नीचे एक उदाहरण डॉकरफाइल है जो इलम स्पार्क बेस इमेज पर बनाता है और अपाचे आइसबर्ग के लिए समर्थन जोड़ता है:
से ilum/spark:3.5.7
उपभोक्ता root
# आइसबर्ग समर्थन के लिए जार जोड़ें
आगे कहना https://repo1.maven.org/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.8.0/iceberg-spark-runtime-3.5_2.12-1.8.0.jar $SPARK_HOME/jars
# पायथन निर्भरता स्थापित करें
RUN python3 -m pip install pandas pyiceberg[hive,s3fs,pandas,snappy,gcsfs,adlfs]
उपभोक्ता ${spark_uid}
छवि बनाएं और पुश करें
डॉकरफाइल लिखने के बाद (उदाहरण के लिए, के रूप में सहेजा गया डॉकरफ़ाइल वर्तमान निर्देशिका में), छवि का निर्माण और पुश:
docker build -t myPrivateRepo/spark:3.5.7-iceberg .
docker push myPrivateRepo/spark:3.5.7-iceberg
कस्टम छवि का उपयोग करने के लिए इलम को कॉन्फ़िगर करना
एक बार जब छवि कंटेनर रजिस्ट्री में उपलब्ध हो जाती है, तो इस कस्टम स्पार्क छवि का उपयोग करने के लिए इलम को अपडेट करें:
- UI (Job & Service)
- Helm (Install Time)
- बाकी एपीआई
- Global Default (Cluster Config)
Per-Job/Service Setting: When submitting a Spark job or Service, specify the image by setting this param:
स्पार्क.कुबेरनेट्स.कंटेनर.इमेज : myPrivateRepo/स्पार्क : 3.5.7- हिमशैल
During the installation process:इस ध्वज को अपने हेल्म इंस्टॉल कमांड में जोड़ें:
--set ilum-core.kubernetes.defaultCluster.config.spark\\.kubernetes\\.container\\.image="myPrivateRepo/spark:3.5.7-iceberg"
When submitting a job programmatically, verify the प्रतिबिंब parameter:
curl -X POST "http://ilum-core/api/v1/job/submit" \
-F "name=my-custom-job" \
-F "image=registry.example.com/my-team/spark-custom:v1" \
...
You can set the default image for the entire cluster via the UI using one of two methods.
Option A: General Tab (Spark Version)
पर नेविगेट करें सामान्य tab of your cluster settings. Locate the Spark Version field and enter your custom image tag (e.g., myPrivateRepo/spark:3.5.7-iceberg).

Option B: Configuration Tab
पर नेविगेट करें संरूपण tab. Add a new parameter स्पार्क.कुबेरनेट्स.कंटेनर.इमेज and set its value to your custom image.

सबसे सही तरीके
- सभी निर्भरता संस्करणों को उपयोग किए गए स्पार्क संस्करण के साथ संरेखित रखें।
- सुरक्षा पैच और नवीनतम निर्भरता संस्करणों को शामिल करने के लिए कस्टम छवि को नियमित रूप से अपडेट करें।
- छवियों को एक विश्वसनीय और सुलभ कंटेनर रजिस्ट्री में संग्रहीत करें।
- अपनी इमेज के लिए वर्ज़निंग स्कीम का इस्तेमाल करें (उदा., टैग में Spark और फ़ीचर वर्शन शामिल करें).
समस्या निवारण
Common Image Issues
| समस्या | विलयन |
|---|---|
| निर्भरता बेमेल | सुनिश्चित करें कि सभी जार और पायथन पैकेज उपयोग में आने वाले स्पार्क संस्करण के साथ संगत हैं। |
| छवि नहीं मिली | छवि नाम सत्यापित करें और यह कि इसे सही रजिस्ट्री में धकेल दिया गया था (और इलम के पास उस रजिस्ट्री तक पहुंच है)। |
| निर्भरताएं गायब होने के कारण नौकरी विफल हो जाती है | दोबारा जांचें कि स्पार्क कार्य इच्छित कस्टम छवि का उपयोग कर रहा है (इलम में छवि कॉन्फ़िगरेशन या स्पार्क-सबमिट कमांड की जांच करें)। |
2. Runtime Injection (Spark Packages & PyPI)
For rapid development and testing, you can add dependencies dynamically using Spark’s configuration. This approach fetches JARs and installs Python packages at startup time.
जावा जार जोड़ना
का उपयोग करके जावा निर्भरताओं के लिए मावेन निर्देशांक निर्दिष्ट करें स्पार्क.जार्स.पैकेज configuration.
- UI (Job & Service)
- Helm (Install Time)
- Global Default (Cluster Config)
For individual Jobs or Services, you can add packages directly in the संसाधन बिल।

- Navigate to नई नौकरी नहीं तो New Service.
- के पास जाओ संसाधन बिल।
- Scroll to Spark Packages.
- क्लिक करना Add Parameter and enter the Maven coordinate (e.g.,
org.apache.hadoop:hadoop-aws:3.3.4).
During the installation process:इस ध्वज को अपने हेल्म इंस्टॉल कमांड में जोड़ें:
--set ilum-core.kubernetes.defaultCluster.config.spark\\.jars\\.packages="org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.8.0,org.apache.hadoop:hadoop-aws:3.3.4"
To define default packages for all jobs on a cluster, set the property in the Cluster Configuration.
Runtime: Set this in the Cluster Configuration form:
स्पार्क.जार्स.पैकेज : org.apache.iceberg : हिमशैल - उत्तेजक गुण - रनटाइम - 3.5_2.12 : 1.8.0 , org.apache.hadoop: hadoop- aws: 3.3.4
स्पार्क स्वचालित रूप से मेवेन सेंट्रल या कॉन्फ़िगर किए गए भंडार से निर्दिष्ट पैकेज (और इसकी निर्भरता) डाउनलोड करेगा जब नौकरी शुरू होती है।
इलम में पायथन निर्भरता स्थापित करना
इलम स्पार्क नौकरियों और ज्यूपिटर सत्रों के लिए पायथन निर्भरता स्थापित करने के कई तरीके प्रदान करता है। आपके उपयोग के मामले के आधार पर, आप इनमें से चुन सकते हैं:
- UI (Job & Service)
- Jupyter Session
- Global Default (Cluster Config)
Ilum makes it easy to add Python dependencies when creating Spark Jobs or Interactive Services directly from the UI. The process is identical for both.

- Navigate to नई नौकरी नहीं तो New Service in the Ilum UI (see Running Spark Jobs).
- का पता लगाएँ आवश्यकताओं फ़ील्ड के अंतर्गत
संसाधनबिल। - आवश्यक पायथन निर्भरता दर्ज करें।
Ilum will install these dependencies at runtime before executing the application.
There are two ways to configure dependencies for Jupyter: per-session or globally for all sessions.
Option A: Per-Session (Session Creation Form)
When creating a Jupyter Notebook session, you can specify required Python packages directly in the session creation form.

- Open the Create Session form (e.g., via the
%manage_sparkmagic command). - का पता लगाएँ Extra Packagesखेत।
- Enter the required packages as a अर्धविराम-अलग तालिका:
Extra Packages
पांडा; सुन्न; ओपनएआई - When the session starts, Ilum will automatically install these libraries.
Option B: Global Default for Jupyter (Helm/ConfigMap)
To define default packages for all Jupyter Spark sessions (but not standard Spark jobs):
Install Time:
--set ilum-jupyter.sparkmagic.config.sessionConfigs.conf='{"pyRequirements":"pandas;numpy;openai"}'
Post-Install (ConfigMap):संशोधित करें ilum-jupyter-config configMap:
डाटा :
config.json : |
...
{
"session_configs": {
"conf": { "pyRequirements": "pandas;numpy;openai", ... }
}
}
To define default python packages for ALL Spark applications running on a specific cluster (including Jobs and interactive sessions started by external modules like बृहस्पति नहीं तो Airflow), you need to add environment variables in the Cluster Configuration.
You need to add two properties with the same list of semicolon-separated packages:
spark.executorEnv.PIP_MODULESspark.kubernetes.driverEnv.PIP_MODULES

सीढ़ी:
- यहाँ जाओ क्लस्टर्स and edit your target cluster (or configured during creation).
- पर नेविगेट करें संरूपण बिल।
- Add the parameters:
Cluster Parameters
spark.executorEnv.PIP_MODULES= pyspark;pandas;openai
spark.kubernetes.driverEnv.PIP_MODULES= pyspark;pandas;openai
प्रत्येक दृष्टिकोण सुनिश्चित करता है कि आपकी स्पार्क नौकरियों और ज्यूपिटर सत्रों में आवश्यक निर्भरताएं स्थापित हैं, ताकि आप कर सकें वातावरण प्रबंधित करने के बजाय डेटा इंजीनियरिंग और विश्लेषण पर ध्यान दें।
सबसे सही तरीके
- के लिए इस विधि का प्रयोग करें परीक्षण या अवधारणा का प्रमाण नौकरियों; प्रत्येक रन पर निर्भरता डाउनलोड करने के ओवरहेड के कारण उत्पादन के लिए इससे बचें।
- Specify exact versions for packages to ensure reproducibility.
- बेहतर स्थिरता के लिए कस्टम डॉकर छवियों के साथ इस दृष्टिकोण को मिलाएं (उदाहरण के लिए, कोर निर्भरता के लिए डॉकर का उपयोग करें और
स्पार्क.जार्स.पैकेजयदि आवश्यक हो तो कुछ क्षणिक लोगों के लिए)। - नेटवर्क एक्सेस और प्रदर्शन से सावधान रहें, क्योंकि पैकेज डाउनलोड करने से स्टार्टअप समय धीमा हो सकता है।
समस्या निवारण
Common Dependency Issues
| समस्या | विलयन |
|---|---|
| जार नहीं मिला | Ensure the Maven coordinates (groupId, artifactId, version) are correct. |
| Startup Performance | If startup is slow or OOMs occur, consider baking dependencies into a Docker image. |
3. पाइप इंस्टॉल के साथ ज्यूपिटर नोटबुक में लाइब्रेरी स्थापित करना
त्वरित इंटरैक्टिव प्रयोगों के लिए, आप पाइप का उपयोग करके ज्यूपिटर नोटबुक के भीतर पुस्तकालय स्थापित कर सकते हैं। यह तदर्थ तरीके से कुछ परीक्षण करने का एक तेज़ तरीका है, लेकिन अस्थायी अन्वेषण से परे किसी भी चीज़ के लिए इसकी अनुशंसा नहीं की जाती है।
उदाहरण
यदि आप एक इलम ज्यूपिटर नोटबुक में एक स्पार्क सत्र चला रहे हैं और एक नए पायथन पैकेज की आवश्यकता है, तो आप इसे इस तरह स्थापित कर सकते हैं:
% % उत्तेजक गुण
आयात उपप्रक्रिया
# Install package
परिणाम = उपप्रक्रिया . check_output ( [ "पिप" , "इंस्टॉल करें" , "जियोपांडास" ] )
फ़ोटो ( परिणाम . कूटानुवाद ( ) )
# Verify installation
परिणाम = उपप्रक्रिया . check_output ( [ "पिप" , "सूची" ] )
फ़ोटो ( परिणाम . कूटानुवाद ( ) )
This will install the package in the notebook’s environment so you can use it immediately.
Why It’s Not Recommended
- इस तरह से स्थापित पैकेज केवल वर्तमान स्पार्क सत्र में उपलब्ध हैं।
- परिवेश सत्र पुनरारंभ या नए सत्रों में बना रहता नहीं है।
- यह आपके विकास के माहौल और उत्पादन स्पार्क रनटाइम के बीच विसंगतियों को जन्म दे सकता है।
सबसे सही तरीके
- इस दृष्टिकोण का उपयोग केवल त्वरित, फेंकने वाले प्रोटोटाइप के लिए करें।
- यदि आप अपने आप को पाइप-इंस्टॉल की गई लाइब्रेरी पर भरोसा करते हुए पाते हैं, तो इसे स्थायित्व के लिए आवश्यकता फ़ाइल या डॉकर छवि में जोड़ें।
- नोटबुक में स्थापित किए जाने वाले किसी भी पैकेज का दस्तावेज़ीकरण करें ताकि आप बाद में अपने परिवेश का ठीक से अद्यतन कर सकें.
समस्या निवारण
Pip Install Issues
| समस्या | विलयन |
|---|---|
| पैकेज नहीं मिला | Check spelling and availability on PyPI. |
| Module not found | Try restarting the notebook kernel to reload the environment. |
Frequently Asked Questions (FAQ)
How do I install private Python packages in Spark?
You can install private packages by building a Custom Docker Image (Method 1). During the docker build process, you can pass credentials or use a pip configuration file to authenticate with your private PyPI repository. Alternatively, for runtime injection, you may need to configure a custom pip index URL in your environment, but Docker is more secure for handling credentials.
Should I use Docker or runtime requirements for Spark on Kubernetes?
के लिए उत्पादन , always use a Docker image. It guarantees that every node (driver and executors) has the exact same environment without the latency and failure risk of installing packages at runtime. Use runtime requirements only for development, testing, or very small, non-critical libraries.
How to add JDBC drivers to Ilum Spark jobs?
JDBC drivers (like PostgreSQL, MySQL, or Snowflake) are best added as JARs. You can either:
- Add the JAR to your Docker image (e.g., in
$SPARK_HOME/jars). - प्रयोग
स्पार्क.जार्स.पैकेज(Method 2) to fetch them from Maven Central at runtime (e.g.,org.postgresql:postgresql:42.6.0).
अंतिम सिफारिशें
- उत्पादन कार्यभार: एक का उपयोग करें कस्टम डॉकर छवि सभी निर्भरताओं के साथ पूर्व-स्थापित। यह तेजी से स्टार्टअप समय के साथ एक स्थिर और प्रतिलिपि प्रस्तुत करने योग्य वातावरण पैदा करता है।
- परीक्षण या प्रोटोटाइप: प्रयोग
स्पार्क.जार्स.पैकेजऔर एकpyrequirements.txtलचीलेपन के लिए। यह आपको एक नई छवि बनाने के बिना जल्दी से प्रयोग करने की अनुमति देता है, हालांकि यह स्टार्टअप ओवरहेड को लागू कर सकता है। - इंटरएक्टिव प्रयोग: ज्यूपिटर नोटबुक के माध्यम से स्थापित करना अल्पकालिक प्रयोगों के लिए सुविधाजनक है, लेकिन हमेशा किसी भी चीज़ के लिए अधिक मजबूत समाधान (डॉकर छवि या आवश्यकताओं की फ़ाइल) में संक्रमण होता है जिसे सहेजने या फिर से चलाने की आवश्यकता होती है।
इन प्रथाओं का पालन करके, आप संगतता समस्याओं और रनटाइम त्रुटियों को कम करते हुए इलम में स्पार्क निर्भरता को कुशलतापूर्वक प्रबंधित कर सकते हैं।