मुख्य विषयवस्तु में जाएं

इलम में स्पार्क निर्भरता को संभालना

इलम 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, SecurityHigh (Immutable)Fast (Pre-built)
Runtime InjectionTesting, PoCs, Small/Transient libsMedium (Cached)Slower (Downloads at startup)
नोटबुक pip installAd-hoc Experiments, ExplorationNone (Session only)Slowest (Repeated installs)

1. Dedicated Docker Image (Production Best Practice)

इस पद्धति में एक कस्टम डॉकर छवि बनाना शामिल है जिसमें सभी आवश्यक निर्भरताएं शामिल हैं। यह वातावरण में स्थिरता सुनिश्चित करता है और उत्पादन कार्यभार के लिए सबसे अच्छा तरीका है।

कस्टम स्पार्क इमेज बनाने के चरण

  1. आधिकारिक Ilum Spark आधार छवि से शुरू करें।
  2. किसी भी जावा-आधारित निर्भरता के लिए आवश्यक जार जोड़ें।
  3. आवश्यक पायथन पैकेज स्थापित करें।
  4. छवि को निजी या सार्वजनिक रजिस्ट्री में बनाएँ और पुश करें.
  5. इस नई छवि का उपयोग करने के लिए इलम को कॉन्फ़िगर करें।

उदाहरण: अपाचे आइसबर्ग समर्थन जोड़ना

नीचे एक उदाहरण डॉकरफाइल है जो इलम स्पार्क बेस इमेज पर बनाता है और अपाचे आइसबर्ग के लिए समर्थन जोड़ता है:

डॉकरफ़ाइल
से  ilum/spark:3.5.7

उपभोक्ता root

# आइसबर्ग समर्थन के लिए जार जोड़ें
आगे कहना --chmod= 644 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}

छवि बनाएं और पुश करें

डॉकरफाइल लिखने के बाद (उदाहरण के लिए, के रूप में सहेजा गया डॉकरफ़ाइल वर्तमान निर्देशिका में), छवि का निर्माण और पुश:

Build and Push Image
docker build -t myPrivateRepo/spark:3.5.7-iceberg .
docker push myPrivateRepo/spark:3.5.7-iceberg

कस्टम छवि का उपयोग करने के लिए इलम को कॉन्फ़िगर करना

एक बार जब छवि कंटेनर रजिस्ट्री में उपलब्ध हो जाती है, तो इस कस्टम स्पार्क छवि का उपयोग करने के लिए इलम को अपडेट करें:

Per-Job/Service Setting: When submitting a Spark job or Service, specify the image by setting this param:

संरूपण
स्पार्क.कुबेरनेट्स.कंटेनर.इमेज : myPrivateRepo/स्पार्क : 3.5.7- हिमशैल 

सबसे सही तरीके

  • सभी निर्भरता संस्करणों को उपयोग किए गए स्पार्क संस्करण के साथ संरेखित रखें।
  • सुरक्षा पैच और नवीनतम निर्भरता संस्करणों को शामिल करने के लिए कस्टम छवि को नियमित रूप से अपडेट करें।
  • छवियों को एक विश्वसनीय और सुलभ कंटेनर रजिस्ट्री में संग्रहीत करें।
  • अपनी इमेज के लिए वर्ज़निंग स्कीम का इस्तेमाल करें (उदा., टैग में 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.

For individual Jobs or Services, you can add packages directly in the संसाधन बिल।

Adding Spark Packages in UI

  • 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).

स्पार्क स्वचालित रूप से मेवेन सेंट्रल या कॉन्फ़िगर किए गए भंडार से निर्दिष्ट पैकेज (और इसकी निर्भरता) डाउनलोड करेगा जब नौकरी शुरू होती है।

इलम में पायथन निर्भरता स्थापित करना

इलम स्पार्क नौकरियों और ज्यूपिटर सत्रों के लिए पायथन निर्भरता स्थापित करने के कई तरीके प्रदान करता है। आपके उपयोग के मामले के आधार पर, आप इनमें से चुन सकते हैं:

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.

Adding Python dependencies to Spark Job in Ilum UI

  • Navigate to नई नौकरी नहीं तो New Service in the Ilum UI (see Running Spark Jobs).
  • का पता लगाएँ आवश्यकताओं फ़ील्ड के अंतर्गत संसाधन बिल।
  • आवश्यक पायथन निर्भरता दर्ज करें।

Ilum will install these dependencies at runtime before executing the application.

प्रत्येक दृष्टिकोण सुनिश्चित करता है कि आपकी स्पार्क नौकरियों और ज्यूपिटर सत्रों में आवश्यक निर्भरताएं स्थापित हैं, ताकि आप कर सकें वातावरण प्रबंधित करने के बजाय डेटा इंजीनियरिंग और विश्लेषण पर ध्यान दें।

सबसे सही तरीके

  • के लिए इस विधि का प्रयोग करें परीक्षण या अवधारणा का प्रमाण नौकरियों; प्रत्येक रन पर निर्भरता डाउनलोड करने के ओवरहेड के कारण उत्पादन के लिए इससे बचें।
  • Specify exact versions for packages to ensure reproducibility.
  • बेहतर स्थिरता के लिए कस्टम डॉकर छवियों के साथ इस दृष्टिकोण को मिलाएं (उदाहरण के लिए, कोर निर्भरता के लिए डॉकर का उपयोग करें और स्पार्क.जार्स.पैकेज यदि आवश्यक हो तो कुछ क्षणिक लोगों के लिए)।
  • नेटवर्क एक्सेस और प्रदर्शन से सावधान रहें, क्योंकि पैकेज डाउनलोड करने से स्टार्टअप समय धीमा हो सकता है।

समस्या निवारण

Common Dependency Issues
समस्या विलयन
जार नहीं मिला Ensure the Maven coordinates (groupId, artifactId, version) are correct.
Startup PerformanceIf startup is slow or OOMs occur, consider baking dependencies into a Docker image.

3. पाइप इंस्टॉल के साथ ज्यूपिटर नोटबुक में लाइब्रेरी स्थापित करना

त्वरित इंटरैक्टिव प्रयोगों के लिए, आप पाइप का उपयोग करके ज्यूपिटर नोटबुक के भीतर पुस्तकालय स्थापित कर सकते हैं। यह तदर्थ तरीके से कुछ परीक्षण करने का एक तेज़ तरीका है, लेकिन अस्थायी अन्वेषण से परे किसी भी चीज़ के लिए इसकी अनुशंसा नहीं की जाती है।

उदाहरण

यदि आप एक इलम ज्यूपिटर नोटबुक में एक स्पार्क सत्र चला रहे हैं और एक नए पायथन पैकेज की आवश्यकता है, तो आप इसे इस तरह स्थापित कर सकते हैं:

notebook.ipynb
% % उत्तेजक गुण 

आयात उपप्रक्रिया

# Install package
परिणाम = उपप्रक्रिया . check_output ( [ "पिप" , "इंस्टॉल करें" , "जियोपांडास" ] )
फ़ोटो ( परिणाम . कूटानुवाद ( ) )

# Verify installation
परिणाम = उपप्रक्रिया . check_output ( [ "पिप" , "सूची" ] )
फ़ोटो ( परिणाम . कूटानुवाद ( ) )

This will install the package in the notebook’s environment so you can use it immediately.

  • इस तरह से स्थापित पैकेज केवल वर्तमान स्पार्क सत्र में उपलब्ध हैं।
  • परिवेश सत्र पुनरारंभ या नए सत्रों में बना रहता नहीं है।
  • यह आपके विकास के माहौल और उत्पादन स्पार्क रनटाइम के बीच विसंगतियों को जन्म दे सकता है।

सबसे सही तरीके

  • इस दृष्टिकोण का उपयोग केवल त्वरित, फेंकने वाले प्रोटोटाइप के लिए करें।
  • यदि आप अपने आप को पाइप-इंस्टॉल की गई लाइब्रेरी पर भरोसा करते हुए पाते हैं, तो इसे स्थायित्व के लिए आवश्यकता फ़ाइल या डॉकर छवि में जोड़ें।
  • नोटबुक में स्थापित किए जाने वाले किसी भी पैकेज का दस्तावेज़ीकरण करें ताकि आप बाद में अपने परिवेश का ठीक से अद्यतन कर सकें.

समस्या निवारण

Pip Install Issues
समस्या विलयन
पैकेज नहीं मिला Check spelling and availability on PyPI.
Module not foundTry 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:

  1. Add the JAR to your Docker image (e.g., in $SPARK_HOME/jars).
  2. प्रयोग स्पार्क.जार्स.पैकेज (Method 2) to fetch them from Maven Central at runtime (e.g., org.postgresql:postgresql:42.6.0).

अंतिम सिफारिशें

  • उत्पादन कार्यभार: एक का उपयोग करें कस्टम डॉकर छवि सभी निर्भरताओं के साथ पूर्व-स्थापित। यह तेजी से स्टार्टअप समय के साथ एक स्थिर और प्रतिलिपि प्रस्तुत करने योग्य वातावरण पैदा करता है।
  • परीक्षण या प्रोटोटाइप: प्रयोग स्पार्क.जार्स.पैकेज और एक pyrequirements.txt लचीलेपन के लिए। यह आपको एक नई छवि बनाने के बिना जल्दी से प्रयोग करने की अनुमति देता है, हालांकि यह स्टार्टअप ओवरहेड को लागू कर सकता है।
  • इंटरएक्टिव प्रयोग: ज्यूपिटर नोटबुक के माध्यम से स्थापित करना अल्पकालिक प्रयोगों के लिए सुविधाजनक है, लेकिन हमेशा किसी भी चीज़ के लिए अधिक मजबूत समाधान (डॉकर छवि या आवश्यकताओं की फ़ाइल) में संक्रमण होता है जिसे सहेजने या फिर से चलाने की आवश्यकता होती है।

इन प्रथाओं का पालन करके, आप संगतता समस्याओं और रनटाइम त्रुटियों को कम करते हुए इलम में स्पार्क निर्भरता को कुशलतापूर्वक प्रबंधित कर सकते हैं।