মূল বিষয়বস্তুতে যান

ইলুমে স্পার্ক নির্ভরতা পরিচালনা করা

ইলুম 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. অফিসিয়াল ইলাম স্পার্ক বেস চিত্র দিয়ে শুরু করুন।
  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:

কনফিগারেশন
spark.kubernetes.container.image : মাইপ্রাইভেটরেপো/স্পার্ক : 3.5.7- হিমশৈল 

সর্বোত্তম অনুশীলন

  • সমস্ত নির্ভরতা সংস্করণগুলি ব্যবহৃত স্পার্ক সংস্করণের সাথে সারিবদ্ধ রাখুন।
  • সুরক্ষা প্যাচগুলি এবং সর্বশেষতম নির্ভরতা সংস্করণগুলি অন্তর্ভুক্ত করতে নিয়মিত কাস্টম চিত্রটি আপডেট করুন।
  • একটি নির্ভরযোগ্য এবং অ্যাক্সেসযোগ্য ধারক রেজিস্ট্রিতে চিত্রগুলি সঞ্চয় করুন।
  • আপনার চিত্রগুলির জন্য একটি সংস্করণ স্কিম ব্যবহার করুন (উদাঃ, ট্যাগে স্পার্ক এবং বৈশিষ্ট্য সংস্করণগুলি অন্তর্ভুক্ত করুন)।

সমস্যা সমাধান

Common Image Issues
সমস্যা সমাধান
নির্ভরশীলতার অমিল নিশ্চিত করুন যে সমস্ত JAR এবং পাইথন প্যাকেজগুলি ব্যবহারে থাকা স্পার্ক সংস্করণের সাথে সামঞ্জস্যপূর্ণ।
চিত্র খুঁজে পাওয়া যায়নি চিত্রের নামটি যাচাই করুন এবং এটি সঠিক রেজিস্ট্রিতে ধাক্কা দেওয়া হয়েছিল (এবং ইলুমের সেই রেজিস্ট্রিতে অ্যাক্সেস রয়েছে)।
নির্ভরশীলতা না থাকায় চাকরি ব্যর্থ হয় স্পার্ক কাজটি উদ্দিষ্ট কাস্টম চিত্রটি ব্যবহার করছে কিনা তা ডাবল-চেক করুন (ইলাম বা স্পার্ক-সাবমিট কমান্ডে চিত্রের কনফিগারেশনটি পরীক্ষা করুন)।

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
সমস্যা সমাধান
JAR খুঁজে পাওয়া যায়নি 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 নমনীয়তার জন্য। এটি আপনাকে কোনও নতুন চিত্র তৈরি না করে দ্রুত পরীক্ষা করতে দেয়, যদিও এটি স্টার্টআপ ওভারহেড বহন করতে পারে।
  • ইন্টারেক্টিভ পরীক্ষা: জুপিটার নোটবুকগুলির মাধ্যমে ইনস্টল করা স্বল্পকালীন পরীক্ষার জন্য সুবিধাজনক, তবে সংরক্ষণ করা বা আবার চালানো দরকার এমন কোনও কিছুর জন্য সর্বদা আরও শক্তিশালী সমাধান (ডকার চিত্র বা প্রয়োজনীয়তা ফাইল) এ স্থানান্তর করুন।

এই অনুশীলনগুলি অনুসরণ করে, আপনি সামঞ্জস্যতার সমস্যা এবং রানটাইম ত্রুটিগুলি হ্রাস করার সময় ইলুমে স্পার্ক নির্ভরতাগুলি দক্ষতার সাথে পরিচালনা করতে পারেন।