برامج نصية تهيئة عقدة نظام المجموعة

برنامج نصي init هو برنامج نصي shell الذي يعمل أثناء بدء التشغيل من كل عقدة نظام المجموعة قبل بدء تشغيل برنامج تشغيل أباتشي سبارك أو عامل JVM.

تتضمن بعض الأمثلة على المهام التي يتم تنفيذها بواسطة برامج init النصية:

  • تثبيت الحزم والمكتبات غير المضمنة في وقت تشغيل Databricks. لتثبيت حزم بيثون، استخدم ثنائي Azure Databricks pip الموجود لضمان تثبيت حزم Python في البيئة /databricks/python/bin/pip الظاهرية Azure Databricks Python بدلا من بيئة Python النظام. على سبيل المثال، ⁧/databricks/python/bin/pip install <package-name>⁩.
  • تعديل مسار فئة نظام JVM في الحالات الخاصة.
  • تعيين خصائص النظام و متغيرات البيئة المستخدمة من قبل JVM.
  • تعديل معلمات تكوين Spark.

أنواع البرامج النصية Init

يدعم Azure Databricks نوعين من البرامج النصية init: كتلة النطاق و العمومية.

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

ملاحظة

هناك نوعان من البرامج النصية init التي تم إهمالها. يجب ترحيل البرامج النصية init من هذه الأنواع إلى تلك المذكورة أعلاه:

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

كلما قمت بتغيير أي نوع من البرنامج النصي init يجب إعادة تشغيل كافة الكتل المتأثرة بالبرنامج النصي.

أمر تنفيذ البرنامج النصي Init

ترتيب تنفيذ النصوص init هو:

  1. إرث عالمي (مهمل)
  2. تسمية الكتلة (مهمل)
  3. عالمي (جديد)
  4. نطاق الكتلة

متغيرات البيئة.

تعتمد البرامج النصية init العمومية ونطاق الكتلة (الجيل الجديد) متغيرات البيئة التالية:

  • DB_CLUSTER_IDمعرف الكتلة التي يتم تشغيل البرنامج النصي. راجع الكتل API 2.0.
  • DB_CONTAINER_IPعنوان IP الخاص للحاوية التي تعمل فيها Spark. يتم تشغيل البرنامج النصي init داخل هذه الحاوية. انظر سبارك ند.
  • DB_IS_DRIVERما إذا كان البرنامج النصي قيد التشغيل على عقدة برنامج تشغيل.
  • DB_DRIVER_IPعنوان IP لعقدة برنامج التشغيل.
  • DB_INSTANCE_TYPEنوع المثيل من VM المضيف.
  • DB_CLUSTER_NAMEاسم الكتلة التي ينفذ البرنامج النصي عليها:
  • DB_PYTHON_VERSIONنسخة بيثون المستخدمة في الكتلة. انظر صور دوكر.
  • DB_IS_JOB_CLUSTERما إذا كان قد تم إنشاء الكتلة لتشغيل مهمة. راجع إنشاء وظيفة.
  • SPARKPASSWORDطريق إلى SPARKPASSWORD.

على سبيل المثال، إذا كنت تريد تشغيل جزء من برنامج نصي فقط على عقدة برنامج تشغيل، يمكنك كتابة برنامج نصي مثل:

echo $DB_IS_DRIVER
if [[ $DB_IS_DRIVER = "TRUE" ]]; then
  <run this part only on driver>
else
  <run this part only on workers>
fi
<run this part on both driver and workers>

تسجيل الدخول

يتم التقاط أحداث بدء البرنامج النصي وانتهاء Init في سجلات أحداث الكتلة. يتم التقاط التفاصيل في سجلات الكتلة. يتم أيضا التقاط أحداث إنشاء البرنامج النصي init العمومية وتحريرها وحذفها في سجلات التشخيص على مستوى الحساب.

أحداث البرنامج النصي Init

تسجل أحداث الكتلة حدثين init script الأحداث: و , تشير إلى البرامج INIT_SCRIPTS_FINISHED النصية التي تمت جدولتها للتنفيذ والتي تم إكمالها بنجاح. INIT_SCRIPTS_FINISHED كما يلتقط مدة التنفيذ.

تتم الإشارة إلى البرامج النصية init العمومية في تفاصيل حدث السجل بواسطة المفتاح "global" ويتم الإشارة إلى البرامج النصية init ذات النطاق الكتلي بواسطة المفتاح "cluster" .

ملاحظة

سجلات أحداث الكتلة لا تسجيل أحداث البرنامج النصي init لكل عقدة نظام المجموعة; يتم تحديد عقدة واحدة فقط لتمثيل كل منهم.

سجلات البرنامج النصي Init

إذا تم تكوين تسليم سجل الكتلة من أجل كتلة، يتم كتابة سجلات البرنامج النصي init إلى . تتم كتابة سجلات كل حاوية في الكتلة إلى دليل فرعي يسمى init_scripts/<cluster_id>_<container_ip> . على سبيل المثال، إذا cluster-log-path تم تعيين إلى ، المسار إلى سجلات cluster-logs حاوية معينة سيكون: dbfs:/cluster-logs/<cluster-id>/init_scripts/<cluster_id>_<container_ip> .

إذا تم تكوين الكتلة لكتابة سجلات إلى DBFS، يمكنك عرض السجلات باستخدام الأداة المساعدة نظام الملفات (dbutils.fs) أو CLI DBFS. على سبيل المثال، إذا كان معرف الكتلة 1001-234039-abcde739 هو :

dbfs ls dbfs:/cluster-logs/1001-234039-abcde739/init_scripts
1001-234039-abcde739_10_97_225_166
1001-234039-abcde739_10_97_231_88
1001-234039-abcde739_10_97_244_199
dbfs ls dbfs:/cluster-logs/1001-234039-abcde739/init_scripts/1001-234039-abcde739_10_97_225_166
<timestamp>_<log-id>_<init-script-name>.sh.stderr.log
<timestamp>_<log-id>_<init-script-name>.sh.stdout.log

عندما لم يتم تكوين تسليم سجل الكتلة، تتم كتابة السجلات إلى /databricks/init_scripts . يمكنك استخدام أوامر shell القياسية في دفتر ملاحظات لسرد وعرض السجلات:

%sh
ls /databricks/init_scripts/
cat /databricks/init_scripts/<timestamp>_<log-id>_<init-script-name>.sh.stdout.log

في كل مرة يتم فيها تشغيل نظام مجموعة، فإنه يكتب سجلا إلى مجلد سجل البرنامج النصي init.

هام

يمكن لأي مستخدم يقوم بإنشاء كتلة وتمكين تسليم سجل الكتلة عرض stderrstdout وإخراج من البرامج النصية init العمومية. يجب التأكد من أن البرامج النصية init العمومية لا تقوم بإخراج أية معلومات حساسة.

سجلات التشخيص

تسجيل التشخيص Azure Databricks يلتقط البرنامج النصي init العمومية إنشاء وتحرير وحذف الأحداث ضمن نوع الحدث globalInitScripts . راجع تسجيل التشخيص في كريكيت البيانات Azure.

برامج نصية init ذات نطاق الكتلة

برامج نصية init نطاق الكتلة هي برامج نصية init المعرفة في تكوين كتلة. تطبيق البرامج النصية init نطاق الكتلة على كل من الكتل التي تقوم بإنشائها وتلك التي تم إنشاؤها لتشغيل مهام. منذ البرامج النصية هي جزء من تكوين الكتلة، التحكم بالوصول الكتلة يتيح لك التحكم في من يمكنه تغيير البرامج النصية.

يمكنك تكوين كتلة نطاق init البرامج النصية باستخدام واجهة المستخدم و CLI و عن طريق استدعاء API الكتل. يركز هذا القسم على تنفيذ هذه المهام باستخدام واجهة المستخدم. للحصول على أساليب أخرى، راجع Databricks CLI و الكتلة API 2.0.

يمكنك إضافة أي عدد من البرامج النصية، ويتم تنفيذ البرامج النصية بشكل تسلسلي بالترتيب المتوفر.

إذا كان برنامج نصي init نطاق الكتلة بإرجاع رمز إنهاء غير صفر، فشلتشغيل الكتلة . يمكنك استكشاف أخطاء البرامج النصية في نطاق الكتلة بواسطة تكوين تسليم سجل الكتلة وفحص سجل البرنامج النصي init.

مواقع البرامج النصية في نطاق الكتلة

يمكنك وضع البرامج النصية init في دليل DBFS أو ADLS يمكن الوصول إليها بواسطة كتلة. يجب تخزين البرامج النصية init عقدة الكتلة في DBFS في جذر DBFS. لا يدعم Azure Databricks تخزين البرامج النصية init في دليل DBFS التي تم إنشاؤها بواسطة تخزين كائن متزايد.

مثال على ذلك البرامج النصية ذات النطاق الكتلي

يعرض هذا المقطع مثالين من البرامج النصية init.

مثال: تثبيت برنامج تشغيل POSTGRESQL JDBC

المقتطفات التالية التي تعمل في دفتر ملاحظات Python إنشاء برنامج نصي init تثبيت برنامج تشغيل PostgreSQL JDBC.

  1. إنشاء دليل DBFS الذي تريد تخزين البرنامج النصي init في. يستخدم هذا المثال dbfs:/databricks/scripts.

    dbutils.fs.mkdirs("dbfs:/databricks/scripts/")
    
  2. إنشاء برنامج نصي اسمه postgresql-install.sh في هذا الدليل:

    dbutils.fs.put("/databricks/scripts/postgresql-install.sh","""
    #!/bin/bash
    wget --quiet -O /mnt/driver-daemon/jars/postgresql-42.2.2.jar https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.2/postgresql-42.2.2.jar""", True)
    
  3. تحقق من وجود البرنامج النصي.

    display(dbutils.fs.ls("dbfs:/databricks/scripts/postgresql-install.sh"))
    

بدلا من ذلك، يمكنك إنشاء البرنامج النصي init postgresql-install.sh محليا:

#!/bin/bash
wget --quiet -O /mnt/driver-daemon/jars/postgresql-42.2.2.jar https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.2/postgresql-42.2.2.jar

ونسخها إلى dbfs:/databricks/scripts استخدام dbfs:/databricks/scripts:

dbfs cp postgresql-install.sh dbfs:/databricks/scripts/postgresql-install.sh

مثال: استخدام conda لتثبيت مكتبات Python

في Databricks وقت التشغيل 8.4 ML وما دونها، يمكنك استخدام إدارة حزمة كوندا لتثبيت حزم بيثون. لتثبيت مكتبة Python عند تهيئة الكتلة، يمكنك استخدام برنامج نصي كما يلي:

#!/bin/bash
set -ex
/databricks/python/bin/python -V
. /databricks/conda/etc/profile.d/conda.sh
conda activate /databricks/python
conda install -c conda-forge -y astropy

بدءا من Databricks Runtime 9.0، لا يمكنك استخدام conda لتثبيت مكتبات بيثون. راجع المكتبات للحصول على إرشادات حول كيفية تثبيت حزم Python على نظام مجموعة.

تكوين برنامج نصي في نطاق الكتلة

يمكنك تكوين كتلة لتشغيل برنامج نصي init باستخدام واجهة المستخدم أو API.

هام

  • يجب أن يكون البرنامج النصي موجودا في الموقع المكون. إذا لم يكن البرنامج النصي موجودا، ستفشل الكتلة في بدء التشغيل أو يتم زيادة حجمها تلقائيا.
  • لا يمكن أن يكون البرنامج النصي init أكبر من 64 كيلوبايت. إذا تجاوز البرنامج نصي هذا الحجم، ستفشل الكتلة في التشغيل وستظهر رسالة فشل في سجل نظام المجموعة.

تكوين برنامج نصي init نطاق الكتلة باستخدام واجهة المستخدم

لاستخدام صفحة تكوين الكتلة لتكوين كتلة لتشغيل برنامج نصي init:

  1. في صفحة تكوين الكتلة، انقر فوق تبديل خيارات متقدمة.

  2. في أسفل الصفحة، انقر فوق علامة التبويب Init Scripts .

    Init Scripts tab

  3. في الوجهة المنسدلة، حدد نوع وجهة. في المثال في المقطع السابق، الوجهة هي DBFS .

  4. تحديد مسار إلى البرنامج النصي init. في المثال في المقطع السابق، يكون المسار dbfs:/databricks/scripts/postgresql-install.sh . يجب أن يبدأ المسار ب dbfs:/ .

  5. انقر فوق Add.

لإزالة برنامج نصي من تكوين الكتلة انقر فوق Delete Icon في يمين البرنامج النصي. عند تأكيد الحذف ستتم مطالبتك بإعادة تشغيل الكتلة. اختياريا يمكنك حذف ملف البرنامج النصي من الموقع الذي قمت بتحميله إلى.

تكوين برنامج نصي init نطاق الكتلة باستخدام API REST DBFS

لاستخدام الكتلة API 2.0 لتكوين الكتلة مع معرف لتشغيل البرنامج النصي init في المقطع السابق، قم بتشغيل الأمر التالي:

curl -n -X POST -H 'Content-Type: application/json' -d '{
  "cluster_id": "1202-211320-brick1",
  "num_workers": 1,
  "spark_version": "7.3.x-scala2.12",
  "node_type_id": "Standard_D3_v2",
  "cluster_log_conf": {
    "dbfs" : {
      "destination": "dbfs:/cluster-logs"
    }
  },
  "init_scripts": [ {
    "dbfs": {
      "destination": "dbfs:/databricks/scripts/postgresql-install.sh"
    }
  } ]
}' https://<databricks-instance>/api/2.0/clusters/edit

البرامج النصية init العمومية

يتم تشغيل برنامج نصي init عمومي على كل كتلة تم إنشاؤها في مساحة العمل الخاصة بك. البرامج النصية init العمومية مفيدة عندما تريد فرض تكوينات المكتبة على مستوى المؤسسة أو شاشات الأمان. يمكن للمسؤولين فقط إنشاء برامج نصية init العمومية. يمكنك إنشاء هذه الواجهة باستخدام واجهة المستخدم أو REST API.

هام

استخدام البرامج النصية init العمومية بعناية:

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

يمكنك استكشاف أخطاء البرامج النصية init العمومية عن طريق تكوين تسليم سجل الكتلة وفحص سجل البرنامج النصي init.

إضافة برنامج نصي init عمومي باستخدام واجهة المستخدم

لتكوين البرامج النصية init العمومية باستخدام وحدة تحكم المسؤول:

  1. انتقل إلى وحدة تحكم المسؤول وانقر فوق علامة التبويب البرامج النصية Init العمومية.

    Global Init Scripts tab

  2. انقر فوق الزر "Add" .

  3. قم بتسمية البرنامج النصي وأدخله بكتابة ملف نصي أو لصقه أو سحبه إلى الحقل البرنامج النصي.

    Add global init script

    ملاحظة

    لا يمكن أن يكون البرنامج النصي init أكبر من 64 كيلوبايت. إذا تجاوز البرنامج نصي هذا الحجم، ستظهر رسالة خطأ عند محاولة الحفظ.

  4. إذا كان لديك أكثر من برنامج نصي init عمومي تم تكوينه لمساحة العمل الخاصة بك، قم بتعيين الترتيب الذي سيتم تشغيل البرنامج النصي الجديد.

  5. إذا كنت تريد تمكين البرنامج النصي لكافة الكتل الجديدة وإعادة تشغيلها بعد حفظ، قم بالتبديل على مفتاح التبديل ممكن.

    هام

    يجب إعادة تشغيل تشغيل الكتل للتغييرات إلى البرامج النصية init العمومية لتصبح نافذ المفعول، بما في ذلك التغييرات لتشغيل النظام والاسم وحالة التمكين.

  6. انقر فوق Add.

تحرير برنامج نصي init عمومي باستخدام واجهة المستخدم

  1. انتقل إلى وحدة تحكم المسؤول وانقر فوق علامة التبويب البرامج النصية Init العمومية.
  2. انقر فوق برنامج نصي.
  3. تحرير البرنامج النصي.
  4. انقر فوق «Confirm» .

تكوين برنامج نصي init عمومي باستخدام API

يمكن للمسؤولين إضافة وحذف وإعادة ترتيب والحصول على معلومات حول البرامج النصية init العمومية في مساحة العمل الخاصة بك باستخدام API البرامج النصية Init العمومية 2.0.

ترحيل من إرث إلى برامج نصية init عمومية جديدة

إذا تم تشغيل مساحة عمل Azure Databricks قبل أغسطس 2020، فقد يظل لديك برامج نصية عمومية قديمة. يجب ترحيل هذه إلى إطار عمل البرنامج النصي init العمومية الجديدة للاستفادة من ميزات الأمان والتناسق والرؤية المضمنة في إطار عمل البرنامج النصي الجديد.

  1. نسخ البرامج النصية init العمومية القديمة الموجودة وإضافتها إلى إطار عمل البرنامج النصي init العمومية الجديدة باستخدام واجهة المستخدم أو API REST.

    أبقهم معطلين حتى تكمل الخطوة التالية.

  2. تعطيل كافة البرامج النصية init العمومية القديمة.

    في وحدة تحكم المسؤول، انتقل إلى علامة التبويب "البرامج النصية Init العمومية" وقم بالتبديل إيقاف تشغيل رمز التبديل "البرامج النصية Init العمومية القديمة".

    Disable legacy global init scripts

  3. تمكين البرامج النصية init العمومية الجديدة.

    في التبويب البرامج النصية Init العمومية تبديل على مفتاح التبديل ممكن لكل برنامج نصي init الذي تريد تمكين.

    Enable global scripts

  4. إعادة تشغيل كافة الكتل.

    • لن يتم تشغيل البرامج النصية القديمة على العقد الجديدة المضافة أثناء التحجيم التلقائي للأنظمة العنقودية قيد التشغيل. كما لن يتم تشغيل البرامج النصية init العمومية الجديدة على تلك العقد الجديدة. يجب إعادة تشغيل كافة الكتل للتأكد من تشغيل البرامج النصية الجديدة عليها و أن أية كتل موجودة محاولة إضافة عقد جديدة مع أية برامج نصية عمومية قيد التشغيل عليها على الإطلاق.
    • قد تحتاج البرامج النصية غير idempotent إلى تعديل عند ترحيل إلى إطار عمل البرنامج النصي init العمومية الجديدة وتعطيل البرامج النصية القديمة.