التسامح مع الخطأ

مكتمل

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

يعمل Hadoop MapReduce على تطبيق آليتين للتسامح مع الأخطاء وتكرار البيانات ومرونة المهمة. يتم تطبيق تكرار البيانات في طبقة التخزين. على وجه التحديد، تحتفظ موثوقية HDFS بكتل HDFS من خلال الحفاظ على نسخ متماثلة متعددة لكل كتلة (بشكل افتراضي، ثلاث نسخ متماثلة) في أجهزة منفصلة فعليًا. ومن الواضح أن هذا يمكّن MapReduce من التسامح مع الكتل التالفة والعقد المعيبة بسهولة. إذا تم فقدان كتلة بسبب فشل في جهاز أو برنامج، يمكن دائمًا تحديد موقع نسخة متماثلة أخرى في عقدة مختلفة وقراءتها بطريقة شفافة تمامًا لوظائف المستخدم. يقوم HDFS بحساب المجموعات الاختبارية باستخدام التدقيق الدوري عن الأخطاء (CRC-32) لكل البيانات المكتوبة له، والتحقق بشكل افتراضي من المجموعات الاختبارية عند قراءة البيانات منه.2 عند اكتشاف خطأ كتلة أو تعطل عقدة، يحضر HDFS بشفافية عامل النسخ المتماثل إلى مستواه الافتراضي وهو الثالث.

على الرغم من أنه من الممكن أن تكون كل كتل HDFS لمجموعة البيانات الخاصة بالوظيفة خالية من الأخطاء، فإن مهام الوظيفة قد لا تزال تعمل ببطء أو تفشل ببساطة. من الواضح أن تباطؤ المهمة أو فشلها قد يؤدي إلى إبطاء الوظيفة بأكملها أو التسبب في فشلها. لتجنب مثل هذه العواقب وتحقيق المرونة، يسمح Hadoop MapReduce بتكرار المهام ومراقبة المهام للكشف عن المهام البطيئة/المعيبة وعلاجها. للكشف عن المهام البطيئة/المعيبة، يعتمد Hadoop MapReduce على آلية إشارة التزامن. يعمل JobTracker (JT) على تشغيل مؤشر ترابط انتهاء الصلاحية الذي يتحقق من كل إشارات التزامن لدى TaskTracker (TT) ويقرر ما إذا كانت مهام TT متوقفة أم نشطة. إذا لم يتلقَّ مؤشر ترابط انتهاء الصلاحية إشارات تزامن تؤكد صحة مهمة خلال 10 دقائق (بشكل افتراضي)، فستعتبر المهمة متوقفة. وإلا، سيتم اعتبار المهمة نشطة.

يمكن أن تكون المهام النشطة بطيئة ("وحيدة" في لغة Hadoop) أو غير بطيئة. لقياس البطء، يقدر JT تقدم المهمة باستخدام درجة لكل مهمة بين 0 و1. يتم حساب درجات الخريطة والتقليل بشكل مختلف. بالنسبة إلى مهمة الخريطة، تكون درجة التقدم دالة كتلة إدخال HDFS التي تمت قراءتها حتى الآن. بالنسبة إلى مهمة تقليل، تكون درجة التقدم أكثر مشاركة. يفترض Hadoop MapReduce أن كل مرحلة من مراحل التقليل (التبديل والدمج والفرز والتقليل) تمثل ثلث درجة مهمة التقليل، وبالنسبة إلى كل مرحلة، تكون الدرجة جزءًا من البيانات التي تمت معالجتها حتى الآن. على سبيل المثال، فإن مهمة تقليل التي أكملت نصف مرحلة التبديل تكون لها درجة تقدم من $\frac{1}{3} \times \frac{1}{2} = \frac{1}{6}$. من ناحية أخرى، فإن مهمة تقليل التي أكملت نصف طريق مرحلة الدمج والفرز تكون لها درجة تقدم من $\frac{1}{3} + (\frac{1}{2} \times \frac{1}{3}) = \frac{1}{2}$. على سبيل المثال، فإن مهمة تقليل التي أكملت نصف مرحلة التقليل تكون لها درجة تقدم من $\frac{1}{3} + \frac{1}{3} + (\frac{1}{3} \times \frac{1}{2}) = \frac{5}{6}$.

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

يحسب Hadoop MapReduce متوسط درجة التقدم عبر كل المهام في كل فئة مهمة (على سبيل المثال، كل مهام الخريطة). في فئة، أي مهمة تسجل أقل من 80٪ من المتوسط (يسمى حد فارق التقدم 20٪) يتم اعتبارها وحيدة. وطالما أن كل مهام الخريطة والتقليل الأصلية قد تم جدولتها بالفعل، فإن9 JT يطلق مهمة يمكن تخمينها مكافئة. يتم التعامل مع كل المهام الوحيدة على أنها بطيئة بالتساوي، ويتم قطع العلاقات بينها حسب منطقة البيانات. وبشكل أكثر دقة، إذا أصبحت فتحة الخريطة حرة في TT معين، وتم اكتشاف اثنتين من مهام الخريطة الوحيدة، فسيتم اختيار المهمة التي تستخدم كتلة HDFS المخزنة في TT لتنفيذ يمكن تخمينه. إذا كانت كلتا المهمتين الوحيدتين بحاجة إلى كتل HDFS المخزنة في TT، يمكن اختيار مهمة واحدة عشوائيًا. يكون للمهام المتوقفة دائمًا أعلى أولوية، وللمهام التي يمكن تخمينها أقل أولوية. على وجه الخصوص، عندما يتلقى JT إشارة تزامن TT التي تتضمن خريطة أو طلب مهمة تقليل، يرد JT مهمة بالترتيب التالي:

  1. مهمة تعوض مهمة متوقفة أو موقوفة.
  2. مهمة أصلية لم تتم جدولتها بعد.
  3. مهمة يمكن تخمينها.

يعمل نهج مرونة مهمة Hadoop MapReduce جيدًا في البيئات غير المتجانسة ولكنه يتعثر في البيئات المتجانسة لعدة أسباب:1، 3

  • يمكن أن ينتج عدم تجانس من تعارض الموارد في السحاب الظاهري، حيث قد يكون الازدحام عابرًا فقط. وفي مثل هذه الحالات، قد يطلق JT الكثير من المهام التي يمكن تخمينها بالنسبة إلى الأصليات التي تبدو بطيئة في الوقت الراهن ولكنها بعد ذلك بوقت قصير يتم تحديدها على أنها ليست بطيئة. تأخذ المهام التي يمكن تخمينها الموارد بعيدًا عن الأصليات ويمكن أن تبطئ عمليات التنفيذ المفرطة التي يمكن تخمينها نظام المجموعة بأكمله، وخاصة إذا كانت الشبكة محملة بشكل زائد مع قدر كبير من مرور تبديل غير ضروري.
  • يعمل Hadoop MapReduce أيضًا على تشغيل مهام يمكن تخمينها في TT دون النظر في كيفية مقارنة الأحمال/السرعات الحالية مقارنة بتلك المهام من TT التي تستضيف المهام الأصلية. يحتمل أن يعمل JT على جدولة مهمة يمكن تخمينها في TT بطيء الذي يصبح في وقت لاحق أبطأ من حتى المهمة الأصلية المقابلة.
  • لأن مجدول Hadoop يستخدم منطقة البيانات لقطع العلاقات بين مهام الخريطة الوحيدة، يمكن اختيار المهام الوحيدة الخطأ للتخمين. إذا اكتشف JT مهمتين وحيدتين، $S_{1}$ و$S_{2}$، ودرجة $S_{1}$ هي 70% من المتوسط ودرجة $S_{2}$ هي 20%، وإذا أصبح TT الذي يستضيف كتلة إدخال $S_{1}$ معطّلاً، يمكن تخمين $S_{1}$ قبل $S_{2}$.
  • ويعني حد فارق التقدم 20٪ أن المهام التي تسجل درجة أكثر من 80٪ من المتوسط لن يتم تخمينها على الإطلاق، بغض النظر عن الضرورة أو المكاسب المحتملة في الكفاءة.
  • وأخيرًا، يقسم Hadoop MapReduce درجة مرحلة التقليل بالتساوي عبر مراحلها الثلاث التأسيسية. هذه التسوية غير واقعية في وظيفة MapReduce نموذجية، حيث تكون مرحلة التبديل عادةً هي الأبطأ بسبب إشراك كل الأزواج التي تتصل عبر الشبكة. في الواقع، من المحتمل جدًا أنه بعد مرحلة التبديل، تنهي وظائف MapReduce مرحلة الدمج والفرز ومرحلة التقليل. ولذلك، بعد فترة وجيزة، بعد انتهاء المهام القليلة الأولى من مراحل التبديل، فإن درجات تقدمها ستنتقل من $\frac{1}{3}$ إلى $1$. وهذا سيزيد بشكل كبير من متوسط الدرجة الإجمالية ويحتمل أن يؤدي إلى تراجع دقة التخمين. في الواقع، بمجرد تثبيت 30٪ من مهام التقليل، يصبح متوسط الدرجة $0.3 \times 1 + 0.7 \times \frac{1}{3} = 53%$. في وقت لاحق، ستكون كل مهام التقليل التي لا تزال في مرحلة التبديل أسفل متوسط الدرجة بنسبة 20%. ونتيجة لذلك، سيتم تخمين مجموعة عشوائية من المهام الوحيدة الخطأ، وملء فتحات التقليل بسرعة وربما غمر الشبكة السحابية مع المرور غير الضروري.

ومن الواضح أن نهج Hadoop MapReduce في التنفيذ القياسي الذي يمكن تخمينه يعاني أوجه قصور خطيرة. ولهذا السبب، يعمل Facebook على تعطيل التنفيذ الذي يمكن تخمينه لمهام التقليل.1 يعمل Yahoo! أيضًا على تعطيل التنفيذ الذي يمكن تخمينه تمامًا، وذلك لوظائف معينة فقط.1 لمعالجة المشكلة الأساسية، تقدم Zahria and associates1 استراتيجية جشعة تسمى أطول وقت تقريبي للنهاية (LATE)، والذي يقترح أنه لا يمكن التخمين إلا للمهام التي من المتوقع أن تنتهي في أبعد نقطة في المستقبل. توفر LATE أكبر فرصة للمهام التي يمكن تخمينها لتجاوز الأصليات، ومن ثم، ينبغي أن تميل إلى تقليل أوقات استجابة الوظائف. ومع ذلك، يكمن التحدي في تحديد المهام المرشحة المناسبة. للقيام بذلك، تقترح LATE حساب معدل التقدم لكل مهمة كتقدم $\frac{score}{T}$، حيث $T$ هو الوقت الذي استغرقته المهمة حتى الآن، ثم التنبؤ بوقت المهمة إلى الاكتمال كـ $\frac{(1 - progress\ score)}{progress\ rate}$. وبالإضافة إلى ذلك، تعزز LATE جدولة المهام التي يمكن تخمينها في TT سريع فقط (الذي يتجاوز حدًا معينًا). أيضًا، للانتباه لفكرة أن التخمين يستهلك الموارد، تحدد LATE حدًّا أقصى لعدد من المهام التي يمكن تخمينها التي يمكن إطلاقها في وقت واحد. أخيرًا، تتغاضى LATE عن منطقة البيانات عند جدولة مهام الخريطة التي يمكن تخمينها، على افتراض أن معظم مهام الخريطة الأصلية لا تزال تعمل مع كتل إدخال HDFS المحلية ويتم تثبيتها بنجاح. تظهر نتائج التجريب أن LATE يمكن أن يحسن أوقات استجابة Hadoop بصورة مضاعفة على بيئات السحابة غير المتجانسة.


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


المراجع

  1. إم. Zaharia, A. Konwinski, A. Joseph, R. Katz, and I. Stoica (2008). تحسين أداء MapReduce في البيئات غير المتجانسة OSDI
  2. T. White (2011). Hadoop: الدليل التعريفي النسخة الثانية من O'Reilly
  3. Z. Guo and G. Fox (2012). تحسين أداء MapReduce في البيئات الشبكية غير المتجانسة واستخدام الموارد وقائع ندوة IEEE/ACM الدولية الـ 12 لعام 2012 بشأن أنظمة حوسبة الشبكة، والسحابة، وأنظمة المجموعة

‏‫اختبر معلوماتك

1.

كيف يتم التعامل مع تكرار البيانات في Hadoop MapReduce؟

2.

كيف يتم تكرار المهام في Hadoop MapReduce؟

3.

فيما يلي قائمة ببعض الافتراضات التي يقدمها Hadoop ضمنيا في التنفيذ التخميني:

  • ج. لا توجد تكلفة لجدولة المهمة التي يمكن تخمينها في TT التي تعرض فتحة معطّلة.
  • ب. يعمل TT على تنفيذ المهام بالمعدل ذاته تقريبًا.
  • ج. تتقدم المهام في وظيفة بمعدل ثابت بمرور الوقت.
  • د. في مهمة تقليل، تستغرق مراحل التبديل والدمج والفرز والتقليل وقتًا متساويًا (أي، كل منها يأخذ ثلث إجمالي وقت المهمة).
  • هـ. المهمة التي بها درجة تقدم منخفضة ربما تكون وحيدة لأن المهام تميل إلى الانتهاء في أوقات مماثلة.
أي من الافتراضات المذكورة أعلاه من المرجح أن ينقسم في السحاب غير المتجانس ولكن ليس في السحاب المتجانس؟

4.

فيما يلي ثلاثة افتراضات يقدمها Hadoop ضمنيا في التنفيذ التخميني:

  • ج. يعمل TaskTrackers على تنفيذ المهام بالمعدل ذاته تقريبًا.
  • ب. في مهمة تقليل، تستغرق مراحل التبديل والدمج والفرز والتقليل أوقاتًا متساوية (أي، كل منها يأخذ ثلث إجمالي وقت مهمة التقليل).
  • ج. ربما تكون تلك المهمة التي بها درجة تقدم منخفضة وحيدة لأن المهام تميل إلى الانتهاء في أوقات مماثلة.
افترض نظام مجموعة Hadoop C مع نطاق ترددي للشبكة محدود جدًا ووظيفة Hadoop J مع معدل تبديل عالٍ جدًا. أي من الافتراضات المذكورة أعلاه هي الأكثر احتمالاً للتقسيم عند تشغيل J على C؟