دليل استخدام Apache Oozie: مخطط سير العمل، جدولة المهام

⚡ ملخص ذكي

Apache Oozie هو برنامج جدولة سير العمل لـ Hadoop الذي يقوم بتشغيل المهام التابعة كرسوم بيانية غير دورية موجهة، ويجمع بين محرك سير العمل لإجراءات MapReduce و Pig و Hive مع محرك تنسيق مدفوع بالوقت وتوافر البيانات.

  • 🔘 محركان: يقوم محرك سير العمل بتشغيل مخططات وظائف Hadoop؛ ويقوم محرك التنسيق بتشغيلها وفقًا للجدول الزمني أو عند وصول البيانات.
  • ☑️ أنواع العقدة: تقوم عقد العمل بتنفيذ المهام؛ بينما تقوم عقد التحكم مثل عقد القرار، وعقد التفرع، وعقد الانضمام بتوجيه المسار.
  • ✅ ثلاثة أنواع من الوظائف: تتراكم مهام سير العمل والمنسق والحزم لتشكل خط أنابيب بيانات كامل.
  • 🧪 نشر: تطبيق سير العمل هو دليل يحتوي على ملف workflow.xml ومجلد lib، يتم نسخه إلى HDFS.
  • 🛠️ سطر الأوامر: مجموعة OOZIE_URL، قم بالإرسال باستخدام oozie job -run، ثم قم باستطلاع oozie job -info حتى يتم الإبلاغ عن نجاح العملية.
  • ⚠️ حالة المشروع: تم إيقاف برنامج Oozie ونقله إلى Apache Attic في عام 2025، لذلك تستخدم خطوط الأنابيب الجديدة عادةً برنامج Apache Airflow.

برنامج تعليمي حول Apache Oozie يغطي سير العمل، ووظائف المنسق، وجدولة Hadoop

ما هو برنامج أباتشي أوزي؟

أباتشي أوزي هو برنامج جدولة سير العمل لـ Hadoopهو نظام يُشغّل سير العمل للوظائف المترابطة. هنا، يُسمح للمستخدمين بإنشاء رسوم بيانية موجهة غير دورية لسير العمل، والتي يمكن تشغيلها بالتوازي والتسلسل في هادوب.

وهو يتألف من جزأين:

  • محرك سير العمل: تتمثل مسؤولية محرك سير العمل في تخزين وتشغيل سير العمل المكون من مهام هادوب، على سبيل المثال، مابريديوس, خنزير, خلية النحل.
  • محرك التنسيق: يقوم بتشغيل مهام سير العمل بناءً على جداول زمنية محددة مسبقًا وتوافر البيانات.

يتميز Oozie بقابليته للتوسع وقدرته على إدارة تنفيذ آلاف مهام سير العمل (التي تتكون كل منها من عشرات المهام) في بيئة Hadoop بكفاءة عالية وفي الوقت المناسب. يوضح الرسم البياني أدناه موقع المجدول بالنسبة إلى بيئة Hadoop والمهام التي يديرها.

يقوم برنامج جدولة سير العمل Apache Oozie بتشغيل مهام Hadoop التابعة كرسم بياني موجه غير دوري

يتميز Oozie بمرونة عالية، حيث يُمكن بدء المهام وإيقافها وتعليقها وإعادة تشغيلها بسهولة. كما يُسهّل Oozie إعادة تشغيل سير العمل الفاشل، مما يُتيح فهم مدى صعوبة اللحاق بالمهام الفائتة أو الفاشلة نتيجةً للتوقف أو الأعطال. بل يُمكن حتى تخطي عقدة معينة معطلة.

حالة المشروع: تم إيقاف برنامج Apache Oozie من قبل شركة Apache Software Foundation في فبراير 2025 والانتقال إلى أباتشي أتيك اكتملت العملية في أبريل 2025. الإصدار النهائي هو 5.2.1 الصادر في فبراير 2021، ومستودع المصدر الآن للقراءة فقط. لا تزال المجموعات الحالية تستخدمه، ولذلك من المهم معرفة الآليات المذكورة أدناه، ولكن عادةً ما تُبنى خطوط الأنابيب الجديدة على Apache Airflow.

كيف يعمل تطبيق Oozie؟

يعمل Oozie كخدمة في المجموعة، ويقوم العملاء بإرسال تعريفات سير العمل للمعالجة الفورية أو اللاحقة.

يتكون سير عمل Oozie من عقد الإجراءات وعقد التحكم في التدفق.

تمثل عقدة الإجراء مهمة من مهام سير العمل، على سبيل المثال، نقل الملفات إلى HDFSتشغيل مهمة MapReduce أو Pig أو Hive، واستيراد البيانات باستخدام سكوبأو تشغيل سكربت شل أو برنامج مكتوب بلغة Java.

تتحكم عقدة تدفق التحكم في تنفيذ سير العمل بين الإجراءات من خلال السماح ببنى مثل المنطق الشرطي، حيث يمكن اتباع فروع مختلفة اعتمادًا على نتيجة عقدة إجراء سابقة.

تندرج عقدة البداية، وعقدة النهاية، وعقدة الخطأ ضمن هذه الفئة من العقد.

  • عقدة البداية يعين بداية مهمة سير العمل.
  • عقدة النهاية يشير إلى نهاية المهمة.
  • عقدة الخطأ يشير إلى حدوث خطأ ورسالة الخطأ المقابلة التي سيتم طباعتها.

في نهاية تنفيذ سير العمل، يستخدم Oozie رد اتصال HTTP لتحديث حالة سير العمل لدى العميل. كما قد يؤدي الدخول إلى عقدة إجراء أو الخروج منها إلى تشغيل رد الاتصال.

عقد التحكم في أوزي وأنواع الإجراءات

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

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

تغطي عقد الإجراءات العمل نفسه، ولكل منها عنصر XML خاص بها:

  • map-reduce و pig و hive و sqoop تؤدي الإجراءات إلى تشغيل مهمة Hadoop المقابلة.
  • جافا يقوم بتشغيل فئة رئيسية على المجموعة؛ قذيفة و سه تشغيل البرامج النصية.
  • fs يقوم بأعمال تنظيف نظام إدارة البيانات الموزعة (HDFS)ping مثل نقل الملفات، وحذفها، وإنشاء دليل، وتغيير أذونات الملفات.
  • البريد الإلكتروني يُخطر المستلمين، و سير العمل الفرعي يستدعي تطبيق سير عمل آخر.

مثال على مخطط سير العمل

الرسم البياني أدناه traces عبارة عن سير عمل صغير من عقدة البداية الخاصة به، من خلال إجراء MapReduce، إلى عقدة النهاية أو مسار الخطأ عند فشل الإجراء.

مثال على مخطط سير عمل Oozie يوضح عقدة البداية، وعقدة الإجراء، ومعالجة الأخطاء، وعقدة النهاية.

أنواع وظائف أوزي

يصف Oozie العمل على ثلاثة مستويات. كل طبقة تغلف الطبقة التي تحتها، لذا فإن الحزمة تتحكم في النهاية في العديد من سير العمل الفردية.

نوع الوظيفة ما يحدده الناجمة عن
سير العمل رسم بياني موجه غير دوري لعقد العمل والتحكم، مكتوب بصيغة workflow.xml تقديم يدوي، أو منسق
منسق جدول زمني متكرر لسير عمل واحد، مع وقت بدء ووقت انتهاء وتكرار توافر وقت الساعة وبيانات الإدخال
باقات مجموعة من تطبيقات التنسيق تُدار معًا كخط أنابيب بيانات واحد تم تحديد وقت انطلاق لجميع منسقيها

إن التمييز مهم من الناحية العملية: يجيب سير العمل على سؤال "ما الذي يتم تشغيله؟"، ويجيب المنسق على سؤال "متى يتم تشغيله؟"، وتجيب الحزمة على سؤال "ما الذي يبدأ ويتوقف معًا؟".

تغليف ونشر تطبيق سير عمل Oozie

يتكون تطبيق سير العمل من تعريف سير العمل وجميع الموارد المرتبطة به مثل ملفات MapReduce Jar، وبرامج Pig النصية، وما إلى ذلك. يجب أن تتبع التطبيقات بنية دليل بسيطة ويتم نشرها على HDFS حتى يتمكن Oozie من الوصول إليها.

يُعرض أدناه مثال على بنية الدليل:

<name of workflow>/
├── lib/
│   └── hadoop-examples.jar
└── workflow.xml

من الضروري الاحتفاظ بملف workflow.xml (ملف تعريف سير العمل) في المجلد الرئيسي (المجلد الأصل الذي يحمل اسم سير العمل). يحتوي مجلد lib على ملفات Jar التي تتضمن فئات MapReduce. يمكن إنشاء تطبيق سير عمل متوافق مع هذا التصميم باستخدام أي أداة بناء، مثل Ant أو Maven.

يجب نسخ هذا الإصدار إلى نظام ملفات Hadoop الموزع (HDFS) باستخدام أمر معين، على سبيل المثال:

% hadoop fs -put hadoop-examples/target/<name of workflow dir> name of workflow

خطوات تشغيل مهمة سير عمل Oozie

في هذا القسم، سنرى كيفية تشغيل مهمة سير العمل. لتشغيل هذا، سوف نستخدم أداة سطر الأوامر Oozie (برنامج عميل يتصل بخادم Oozie).

1. تصدير OOZIE_URL متغير بيئي، يحدد لأمر oozie خادم Oozie الذي يجب استخدامه (هنا نستخدم خادمًا يعمل محليًا):

% export OOZIE_URL="http://localhost:11000/oozie"

2. قم بتشغيل مهمة سير العمل باستخدام:

% oozie job -config ch05/src/main/resources/max-temp-workflow.properties -run

يشير خيار -config إلى ملف محلي Java يحتوي ملف الخصائص على تعريفات للمعلمات في ملف XML لسير العمل، بالإضافة إلى oozie.wf.application.path، الذي يخبر Oozie بموقع تطبيق سير العمل في HDFS.

مثال لمحتويات ملف الخصائص:

nameNode=hdfs://localhost:8020
jobTracker=localhost:8021
oozie.wf.application.path=${nameNode}/user/${user.name}/<name of workflow>

3. احصل على حالة مهمة سير العمل.

يمكن الاطلاع على حالة مهمة سير العمل باستخدام الأمر الفرعي 'job' مع الخيار '-info'، مع تحديد معرف المهمة بعد '-info'.

e.g., % oozie job -info <job id>

يُظهر الناتج حالة إما قيد التشغيل أو تم إيقافها أو نجحت.

4. يمكن الاطلاع على نتائج تنفيذ سير العمل بنجاح باستخدام أمر Hadoop مثل:

% hadoop fs -cat <location of result>

لماذا استخدام أوزي؟

يتمثل الغرض الرئيسي من استخدام Oozie في إدارة أنواع مختلفة من المهام التي تتم معالجتها في نظام Hadoop.

يُحدد المستخدم التبعيات بين المهام باستخدام الرسوم البيانية الموجهة غير الدورية. يستهلك Oozie هذه المعلومات ويتولى تنفيذها بالترتيب الصحيح المحدد في سير العمل. وبذلك، يتم توفير وقت المستخدم اللازم لإدارة سير العمل بالكامل. إضافةً إلى ذلك، يوفر Oozie إمكانية تحديد وتيرة تنفيذ مهمة معينة.

مميزات اوزي

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

أوزي ضد أباتشي إيرفلو

نظراً لتوقف استخدام Oozie، فإن معظم الفرق التي تقيّم نظام جدولة المهام اليوم تقارن ما تستخدمه حالياً مع Apache Airflow. يحلّ كلا النظامين المشكلة نفسها من زاويتين مختلفتين.

البعد أباتشي أوزي أباتشي تدفق الهواء
لغة التعريف سير العمل مكتوب بصيغة XML الرسوم البيانية الموجهة غير الدورية (DAGs) مكتوبة على النحو التالي: Python الكود
مجال مبني على عمليات Hadoop مثل MapReduce و Pig و Hive و Sqoop للأغراض العامة، مع مشغلين لخدمات الحوسبة السحابية وقواعد البيانات والحاويات.
جدولة وظائف المنسقين تعتمد على الوقت وتوافر البيانات فترات زمنية محددة بالإضافة إلى أجهزة استشعار تنتظر الظروف الخارجية
حالة المشروع تم نقله إلى Apache Attic في عام 2025؛ الإصدار النهائي 5.2.1 مشروع Apache عالي المستوى قيد التطوير النشط

يظل Oozie الخيار الأسهل على مجموعة خوادم تعمل به بالفعل، لأن الإجراءات فيه تتوافق تمامًا مع مكونات Hadoop. أما Airflow فهو الخيار العملي لأي مشروع جديد، خاصةً عندما يتجاوز نطاق خط الأنابيب Hadoop.

الأسئلة الشائعة

لا. برنامج أباتشي Foundation تم إيقاف Oozie في فبراير 2025 واكتمل نقل Attic في أبريل 2025. الإصدار النهائي هو 5.2.1 من فبراير 2021 والمستودع للقراءة فقط، على الرغم من أن الوثائق تبقى متاحة عبر الإنترنت.

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

يكتب Copilot ملف workflow.xml بشكل معقول بسرعة، ولكنه غالبًا ما يُنشئ أسماء عناصر خاطئة أو يستخدم إصدارًا غير صحيح من المخطط. تحقق من صحة ملف XML المُنشأ باستخدام مخطط 5.2.1، وقم بتجربته أولًا على مجموعة اختبار.

يقوم المنسق بدمج التردد ووقت البدء ووقت الانتهاء مع تعريفات مجموعة البيانات. ولا يتم تشغيله إلا عندما تصل الساعة إلى الفاصل الزمني التالي، وعندما تكون كل مجموعة بيانات مُدخلة مُعلنة موجودة في نظام ملفات Hadoop الموزع (HDFS)، لذا فإن تأخر البيانات يؤدي إلى تأخير التشغيل.

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

تعني حالة "PREP" قبول المهمة ولكن لم يتم تشغيلها، عادةً بسبب خطأ في مسار التطبيق في نظام ملفات Hadoop الموزع (HDFS) أو عدم حلول وقت التنفيذ. أما حالة "SUSPENDED" فتعني إيقافها مؤقتًا، أو فشل إجراء ما وتوقف سير العمل.

يعمل الخادم باستخدام حسابه الرئيسي وملف مفاتيحه الخاصين، ويتم التحقق من هوية العملاء عبر بروتوكول SPNEGO باستخدام HTTP. تحمل عمليات سير العمل رموز تفويض بحيث يصل كل إجراء إلى HDFS وYARN باسم المستخدم المُرسِل، وليس باسم الخادم.

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

تلخيص هذه التدوينة بـ: