دليل استخدام Apache Oozie: مخطط سير العمل، جدولة المهام
⚡ ملخص ذكي
Apache Oozie هو برنامج جدولة سير العمل لـ Hadoop الذي يقوم بتشغيل المهام التابعة كرسوم بيانية غير دورية موجهة، ويجمع بين محرك سير العمل لإجراءات MapReduce و Pig و Hive مع محرك تنسيق مدفوع بالوقت وتوافر البيانات.
ما هو برنامج أباتشي أوزي؟
أباتشي أوزي هو برنامج جدولة سير العمل لـ Hadoopهو نظام يُشغّل سير العمل للوظائف المترابطة. هنا، يُسمح للمستخدمين بإنشاء رسوم بيانية موجهة غير دورية لسير العمل، والتي يمكن تشغيلها بالتوازي والتسلسل في هادوب.
وهو يتألف من جزأين:
- محرك سير العمل: تتمثل مسؤولية محرك سير العمل في تخزين وتشغيل سير العمل المكون من مهام هادوب، على سبيل المثال، مابريديوس, خنزير, خلية النحل.
- محرك التنسيق: يقوم بتشغيل مهام سير العمل بناءً على جداول زمنية محددة مسبقًا وتوافر البيانات.
يتميز Oozie بقابليته للتوسع وقدرته على إدارة تنفيذ آلاف مهام سير العمل (التي تتكون كل منها من عشرات المهام) في بيئة Hadoop بكفاءة عالية وفي الوقت المناسب. يوضح الرسم البياني أدناه موقع المجدول بالنسبة إلى بيئة 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 العمل على ثلاثة مستويات. كل طبقة تغلف الطبقة التي تحتها، لذا فإن الحزمة تتحكم في النهاية في العديد من سير العمل الفردية.
| نوع الوظيفة | ما يحدده | الناجمة عن |
|---|---|---|
| سير العمل | رسم بياني موجه غير دوري لعقد العمل والتحكم، مكتوب بصيغة 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.


