عقد التوازي

يُعد نموذج برمجة عقد التوازي أو PACT تعميمًا لنموذج برمجة MapReduce ويستخدم وظائف من الدرجة الثانية لإجراء عمليات حسابية متزامنة على مجموعات بيانات كبيرة ( بيتابايت ) بالتوازي.

ملخص

على غرار MapReduce، يتم تسليم وتنفيذ أي كود برمجي للمستخدم بواسطة PACTs. ومع ذلك، فإن PACT يعمم بعض مفاهيم MapReduce:

  • الدوال من الدرجة الثانية: يوفر PACT المزيد من الدوال من الدرجة الثانية. حاليًا، يدعم خمس دوال من الدرجة الثانية تُسمى عقود الإدخال . قد يتم توسيع هذه المجموعة في المستقبل.
  • بنية البرنامج: يسمح PACT بتكوين رسوم بيانية لتدفق البيانات غير الدورية. في المقابل، تتميز برامج MapReduce ببنية ثابتة (Map -> Reduce).
  • نموذج البيانات: يتكون نموذج بيانات PACT من سجلات تحتوي على عدد غير محدود من الحقول من أنواع مختلفة. ويمكن اعتبار أزواج المفاتيح والقيم في MapReduce سجلات تحتوي على حقلين.

قامت منصة Apache Flink ، وهي منصة مفتوحة المصدر لمعالجة البيانات المتوازية، بتنفيذ PACT . يسمح Flink للمستخدمين بتحديد وظائف المستخدم باستخدام التعليقات التوضيحية.

وجهة نظر منطقية

عقود التوازي (PACTs) هي عوامل معالجة البيانات في تدفق البيانات. ولذلك، يحتوي عقد التوازي على مدخل بيانات واحد أو أكثر ومخرج بيانات واحد أو أكثر. ويتكون عقد التوازي من عنصرين:

  • عقد المدخلات
  • وظيفة المستخدم
  • تعليقات توضيحية لرمز المستخدم

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

يمكن إضافة معلومات إضافية إلى كود المستخدم، إن رغب المستخدم. تكشف هذه المعلومات عن بعض جوانب سلوك دالة المستخدم (التي تُعتبر صندوقًا أسود). يستطيع مُجمِّع PACT الاستفادة من هذه المعلومات للحصول على خطط تنفيذ أكثر كفاءة. مع ذلك، فبينما لا يؤثر غياب أي معلومات إضافية على نتيجة التنفيذ، فإن عقد الإخراج غير الصحيح يُنتج نتائج خاطئة.

يتم عرض ومناقشة عقود الإدخال والتعليقات التوضيحية المدعومة حاليًا فيما يلي.

عقود المدخلات

تقوم عقود الإدخال بتقسيم بيانات الإدخال الخاصة بـ PACT إلى مجموعات فرعية قابلة للمعالجة بشكل مستقل، تُسلّم إلى وظيفة المستخدم في PACT. وتختلف عقود الإدخال في عدد مدخلات البيانات وطريقة إنشاء المجموعات الفرعية المستقلة.

بصورة أدق، تُعدّ عقود الإدخال دوالًا من الدرجة الثانية، تتضمن دالة من الدرجة الأولى (كود المستخدم)، ومجموعة إدخال واحدة أو أكثر، وعددًا من الحقول الرئيسية لكل إدخال كمعاملات. تُستدعى دالة الدرجة الأولى مرة واحدة أو عدة مرات مع مجموعات فرعية من مجموعة (مجموعات) الإدخال. ولأن دوال الدرجة الأولى لا تُحدث أي آثار جانبية، فإن كل استدعاء مستقل عن الآخر، ويمكن تنفيذ جميع الاستدعاءات بالتوازي.

تعتبر الدوال من الدرجة الثانية map() و reduce() في نموذج برمجة MapReduce بمثابة عقود إدخال في سياق نموذج برمجة PACT.

رسم خريطة

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

يقلل

يتمتع عقد إدخال الاختزال بنفس دلالات دالة الاختزال في MapReduce. فهو يحتوي على مُدخل واحد ويُجمّع جميع السجلات التي لها حقول مفاتيح متطابقة. تُمرر كل مجموعة من هذه المجموعات كوحدة واحدة إلى كود المستخدم ويتم معالجتها بواسطته (انظر الشكل أدناه). يدعم نموذج برمجة PACT أيضًا مُجمّعات اختيارية، على سبيل المثال للتجميعات الجزئية.

يعبر

يعمل عقد الإدخال المتقاطع على مدخلين. يقوم بإنشاء حاصل الضرب الديكارتي لسجلات كلا المدخلين. يتم تمرير كل عنصر من عناصر حاصل الضرب الديكارتي (زوج من السجلات) إلى كود المستخدم.

مباراة

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

مجموعة كوجروب

يعمل عقد إدخال CoGroup على مدخلين أيضًا. ويمكن اعتباره بمثابة عملية Reduce على مدخلين. في كل مدخل، تُجمّع السجلات حسب المفتاح (كما تفعل عملية Reduce) وتُمرّر إلى كود المستخدم. وعلى عكس عملية Match، يُستدعى كود المستخدم أيضًا للحصول على مفتاح إذا كان أحد المدخلين فقط يحتوي على زوج منه.

نموذج بيانات سجل الاتفاق

على عكس MapReduce، يستخدم PACT نموذج بيانات أكثر عمومية للسجلات ( سجل Pact ) لتمرير البيانات بين الدوال. يمكن اعتبار سجل Pact بمثابة مجموعة بيانات ذات مخطط حر. ويعود تفسير حقول السجل إلى دالة المستخدم. يُعد زوج المفتاح/القيمة (كما في MapReduce) حالة خاصة من هذا السجل، حيث يحتوي على حقلين فقط (المفتاح والقيمة).

بالنسبة لعقود الإدخال التي تعمل على المفاتيح (مثل //Reduce//، //Match//، أو //CoGroup//)، يتم تحديد مجموعة حقول السجل التي تُشكل المفتاح. يمكن استخدام أي مجموعة حقول. راجع مثال الاستعلام لمعرفة كيفية كتابة البرامج التي تُعرّف عقود //Reduce// و //Match// على حقل واحد أو أكثر، وكيفية كتابة هذه البرامج لنقل البيانات بين الحقول بأقل قدر ممكن.

قد يكون السجل غير مكتمل البيانات، أي قد يحتوي على حقول بقيم فارغة (//null//). من المسموح إنشاء سجل، على سبيل المثال، حيث يتم تعيين الحقلين 2 و5 فقط. تُفسَّر الحقول 1 و3 و4 على أنها فارغة (//null//). مع ذلك، لا يجوز أن تكون الحقول التي يستخدمها العقد كحقول رئيسية فارغة (//null//)، وإلا سيتم طرح استثناء.

تعليقات توضيحية لرمز المستخدم

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

الحقول الثابتة

تُستخدم علامة " الحقول الثابتة" لتمييز الحقول التي لا يتم تعديلها بواسطة دالة المستخدم البرمجية. لاحظ أنه بالنسبة لكل سجل إدخال، لا يمكن تغيير محتوى وموقع الحقل الثابت في أي سجل إخراج! في حالة الدوال الثنائية من الدرجة الثانية مثل Cross وMatch وCoGroup، يمكن للمستخدم تحديد علامة واحدة لكل إدخال.

الحقول الثابتة باستثناء

تُعدّ خاصية " الحقول الثابتة باستثناء " عكس خاصية "الحقول الثابتة". فهي تُشير إلى جميع الحقول التي قد تُعدّل بواسطة دالة المستخدم المُشار إليها، وبالتالي يعتبر المُحسِّن أي حقل غير مُشار إليه ثابتًا. لذا، يجب استخدام هذه الخاصية بحذر شديد! مرة أخرى، بالنسبة للدوال الثنائية من الدرجة الثانية (Cross، Match، CoGroup)، يُمكن تعريف خاصية واحدة لكل مُدخل. لاحظ أنه يُمكن استخدام إما خاصية "الحقول الثابتة" أو خاصية "الحقول الثابتة باستثناء" للمُدخل الواحد.

برامج PACT

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

يوضح الشكل أدناه برنامج PACT مزودًا بمصدرين للبيانات، وأربعة عقود PACT، ومستقبل بيانات واحد. يقرأ كل مصدر بيانات البيانات من موقع محدد في نظام الملفات. يقوم كلا المصدرين بإعادة توجيه البيانات إلى عقود PACT الخاصة بهما باستخدام عقود إدخال Map. لم يتم عرض رمز المستخدم في الشكل. يتم توجيه مخرجات عقدي Map PACT إلى عقد PACT آخر مزود بعقد إدخال Match. يحتوي عقد PACT الأخير على عقد إدخال Reduce، ويقوم بإعادة توجيه نتيجته إلى مستقبل البيانات.

Wiki:pactProgram.png?nolink&600

مزايا PACT مقارنةً بـ MapReduce

  • يشجع نموذج برمجة PACT على أسلوب برمجة أكثر نمطية . فعلى الرغم من أن عدد وظائف المستخدم عادةً ما يكون أكبر، إلا أنها أكثر دقة وتركز على مشاكل محددة. وبالتالي، يمكن تجنب تداخل الوظائف الشائع في مهام MapReduce.
  • يمكن التعبير عن مهام تحليل البيانات على شكل تدفقات بيانات مباشرة، خاصة عندما تكون هناك حاجة إلى مدخلات متعددة.
  • يعتمد نظام PACT على نموذج بيانات قائم على السجلات، مما يقلل الحاجة إلى تحديد أنواع البيانات المخصصة حيث لا يلزم تجميع جميع عناصر البيانات في نوع قيمة واحد.
  • غالباً ما يقضي PACT على الحاجة إلى الهياكل المساعدة، مثل ذاكرة التخزين المؤقت الموزعة ، والتي "تكسر" نموذج البرمجة المتوازية .
  • تُنفَّذ عمليات تنظيم البيانات، مثل إنشاء حاصل الضرب الديكارتي أو دمج السجلات ذات المفاتيح المتطابقة، بواسطة نظام التشغيل. أما في MapReduce، فيجب على مطوّر كود المستخدم توفير هذه الوظائف التي غالباً ما تكون ضرورية.
  • تُحدد بروتوكولات PACT توازي البيانات بطريقة تصريحية، مما يمنح النظام عدة درجات من الحرية. تُعد هذه الدرجات من الحرية شرطًا أساسيًا هامًا للتحسين التلقائي. يقوم مُصرّف PACT بحصر استراتيجيات التنفيذ المختلفة، ويختار الاستراتيجية التي تُقلل من حجم البيانات المُقدّر لنقلها. في المقابل، يُنفّذ Hadoop مهام MapReduce دائمًا بنفس الاستراتيجية.

مراجع

  • "Nephele/PACTs: نموذج برمجة وإطار تنفيذ لمعالجة البيانات التحليلية على نطاق الويب" - ورقة بحثية من تأليف د. باتري، س. إيوين، ف. هوسكي، أ. كاو، ف. ماركل ، ود. وارنيك من جامعة برلين التقنية، نُشرت في وقائع مؤتمر ACM SoCC 2010. تقدم الورقة نموذج برمجة PACT، وهو تعميم لـ MapReduce، تم تطويره في مشروع بحث Stratosphere .
  • "MapReduce و PACT - مقارنة نماذج البرمجة المتوازية للبيانات" - ورقة بحثية من تأليف أ. ألكسندروف، س. إيوين، م. هايميل، ف. هوسكي، أ. كاو، ف. ماركل، إ. نايكامب، و د. وارنيك من جامعة برلين التقنية نُشرت في وقائع مؤتمر BTW 2011.

للمزيد من القراءة