تخطي إلى المحتوى الرئيسي

التعامل مع تبعيات الشرارة في إيلوم

إيلوم provides three methods to handle dependencies for شرارة على Kubernetes , 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)

تتضمن هذه الطريقة إنشاء صورة Docker مخصصة تتضمن جميع التبعيات المطلوبة. إنه يضمن الاتساق عبر البيئات وهو أفضل نهج لأحمال عمل الإنتاج.

خطوات إنشاء صورة شرارة مخصصة

  1. ابدأ بالصورة الأساسية الرسمية ل Ilum Spark.
  2. أضف JARs الضرورية لأي تبعيات تستند إلى Java.
  3. قم بتثبيت حزم Python المطلوبة.
  4. إنشاء الصورة ودفعها إلى سجل خاص أو عام.
  5. قم بتكوين Ilum لاستخدام هذه الصورة الجديدة.

مثال: إضافة دعم Apache Iceberg

يوجد أدناه مثال على Dockerfile الذي يبني على الصورة الأساسية ل Ilum Spark ويضيف دعما ل Apache Iceberg:

دوكر فايل
من  ilum/spark:3.5.7

مستخدم root

# إضافة JARs لدعم Iceberg
جمع --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

# تثبيت تبعيات Python
RUN python3 -m pip install pandas pyiceberg[hive,s3fs,pandas,snappy,gcsfs,adlfs]

مستخدم ${spark_uid}

بناء الصورة ودفعها

بعد كتابة Dockerfile (على سبيل المثال، تم حفظه ك دوكر فايل في الدليل الحالي)، قم بإنشاء الصورة ودفعها:

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

تكوين Ilum لاستخدام الصورة المخصصة

بمجرد توفر الصورة في سجل حاوية، قم بتحديث Ilum لاستخدام صورة Spark المخصصة هذه:

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

تكوين
spark.kubernetes.container.image : myPrivateRepo / شرارة : 3.5.7- مثلجة 

أفضل الممارسات

  • حافظ على محاذاة جميع إصدارات التبعية مع إصدار Spark المستخدم.
  • قم بتحديث الصورة المخصصة بانتظام لتضمين تصحيحات الأمان وأحدث إصدارات التبعية.
  • قم بتخزين الصور في سجل حاويات موثوق به ويمكن الوصول إليه.
  • استخدم نظام تعيين الإصدار لصورك (على سبيل المثال، قم بتضمين إصدارات Spark والميزات في العلامة).

استكشاف الاخطاء

Common Image Issues
أصدر حل
عدم تطابق التبعية تأكد من توافق جميع حزم JARs و Python مع إصدار Spark المستخدم.
لم يتم العثور على الصورة تحقق من اسم الصورة وأنه تم دفعها إلى السجل الصحيح (وأن Ilum لديه حق الوصول إلى هذا السجل).
فشل الوظيفة بسبب فقدان التبعيات تحقق جيدا من أن وظيفة Spark تستخدم الصورة المخصصة المقصودة (تحقق من تكوين الصورة في Ilum أو الأمر spark-submit).

2. Runtime Injection (Spark Packages & PyPI)

للتطوير والاختبار السريع، يمكنك إضافة تبعيات ديناميكيا باستخدام تكوين Spark. يجلب هذا الأسلوب JARs ويقوم بتثبيت حزم Python في وقت بدء التشغيل.

إضافة Java JARs

حدد إحداثيات Maven لتبعيات Java باستخدام السمة spark.jars.packages 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).

سيقوم Spark تلقائيا بتنزيل الحزمة المحددة (وتبعياتها) من Maven Central أو المستودع الذي تم تكوينه عند بدء الوظيفة.

تثبيت تبعيات Python في Ilum

يوفر Ilum طرقا متعددة لتثبيت تبعيات Python لمهام Spark وجلسات Jupyter. اعتمادا على حالة الاستخدام الخاصة بك ، يمكنك الاختيار بين:

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).
  • حدد موقع المتطلبات تحت الحقل موارد التبويب.
  • أدخل تبعيات Python المطلوبة.

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

يضمن كل نهج تثبيت وظائف Spark وجلسات Jupyter على التبعيات اللازمة، حتى تتمكن من ذلك ركز على هندسة البيانات وتحليلها بدلا من إدارة البيئات.

أفضل الممارسات

  • استخدم هذه الطريقة ل الاختبار أو إثبات المفهوم وظائف; تجنبه للإنتاج بسبب النفقات العامة لتبعيات التنزيل في كل تشغيل.
  • Specify exact versions for packages to ensure reproducibility.
  • اجمع بين هذا الأسلوب وصور Docker المخصصة للحصول على تناسق أفضل (على سبيل المثال ، استخدم Docker للتبعيات الأساسية و spark.jars.packages لعدد قليل من العابرين إذا لزم الأمر).
  • ضع في اعتبارك الوصول إلى الشبكة وأدائها ، حيث يمكن أن يؤدي تنزيل الحزم إلى إبطاء أوقات بدء التشغيل.

استكشاف الاخطاء

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. تثبيت المكتبات في Jupyter Notebooks مع تثبيت النقطة

للتجارب التفاعلية السريعة، يمكنك تثبيت المكتبات داخل دفتر ملاحظات Jupyter باستخدام pip. هذه طريقة سريعة لاختبار شيء ما بطريقة مخصصة ، ولكن لا ينصح بها لأي شيء يتجاوز الاستكشاف المؤقت.

مثل

إذا كنت تقوم بتشغيل جلسة Spark في دفتر ملاحظات Ilum Jupyter وتحتاج إلى حزمة Python جديدة ، فيمكنك تثبيتها على النحو التالي:

notebook.ipynb
% % شراره 

استورد العملية الفرعية

# Install package
نتيجة = العملية الفرعية . check_output ( [ "نقطة" , "تثبيت" , "الجيوبانداس" ] )
طبع ( نتيجة . فك ( ) )

# Verify installation
نتيجة = العملية الفرعية . check_output ( [ "نقطة" , "قائمة" ] )
طبع ( نتيجة . فك ( ) )

سيؤدي هذا إلى تثبيت الحزمة في بيئة الكمبيوتر المحمول حتى تتمكن من استخدامها على الفور.

  • الحزم المثبتة بهذه الطريقة متاحة فقط في جلسة spark الحالية.
  • لا تستمر البيئة عبر عمليات إعادة تشغيل الجلسة أو الجلسات الجديدة.
  • يمكن أن يؤدي إلى عدم الاتساق بين بيئة التطوير الخاصة بك ووقت تشغيل Spark للإنتاج.

أفضل الممارسات

  • استخدم هذا الأسلوب فقط للنماذج الأولية السريعة التي يتم التخلص منها.
  • إذا وجدت نفسك تعتمد على مكتبة مثبتة بنقطة ، فقم بإضافتها إلى ملف المتطلبات أو صورة Docker للاستمرار.
  • قم بتوثيق أي حزم كان عليك تثبيتها في دفتر الملاحظات حتى تتمكن من تحديث بيئتك بشكل صحيح لاحقا.

استكشاف الاخطاء

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. استخدام spark.jars.packages (Method 2) to fetch them from Maven Central at runtime (e.g., org.postgresql:postgresql:42.6.0).

التوصيات النهائية

  • أحمال عمل الإنتاج: استخدم صورة Docker المخصصة مع تثبيت جميع التبعيات مسبقا. ينتج عن ذلك بيئة مستقرة وقابلة للتكرار مع أوقات بدء تشغيل أسرع.
  • الاختبار أو النماذج الأولية: استخدام spark.jars.packages و pyrequirements.txt للمرونة. يتيح لك ذلك التجربة بسرعة دون إنشاء صورة جديدة ، على الرغم من أنها قد تتحمل نفقات بدء التشغيل.
  • التجارب التفاعلية: يعد التثبيت عبر دفاتر ملاحظات Jupyter مناسبا للتجارب قصيرة العمر ، ولكن دائما ما تنتقل إلى حل أكثر قوة (صورة Docker أو ملف المتطلبات) لأي شيء يحتاج إلى حفظ أو تشغيله مرة أخرى.

باتباع هذه الممارسات، يمكنك إدارة تبعيات Spark بكفاءة في Ilum مع تقليل مشكلات التوافق وأخطاء وقت التشغيل.