تحسين تكوين نظام المجموعة لـ Apache Spark

تتناول هذه المقالة كيفية تحسين تكوين مجموعة Apache Spark للحصول على أفضل أداء على Azure HDInsight.

نظرة عامة

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

فيما يلي بعض المعلمات الشائعة التي يمكنك ضبطها:

المعلمة الوصف
--num-executors تعيين العدد المناسب من المنفذين.
--executor-cores تعيين عدد الذاكرات الأساسية لكل منفذ. يجب أن يكون لديك عادة منفذون متوسطو الحجم، حيث تستهلك العمليات الأخرى بعض الذاكرة المتوفرة.
--executor-memory تعيين حجم الذاكرة لكل منفذ، والذي يتحكم في حجم كومة الذاكرة المؤقتة على YARN. احتفظ ببعض الذاكرة لحمل التنفيذ.

تحديد حجم المنفذ الصحيح

عند تحديد تكوين المنفذ، ضع في اعتبارك الحمل العام لجمع البيانات المهملة Java (GC).

  • عوامل لتقليل حجم المنفذ:

    1. تقليل حجم الكومة إلى أقل من 32 غيغابايت للحفاظ على حمل GC < بنسبة 10%.
    2. تقليل عدد النوى للحفاظ على حمل GC < بنسبة 10%.
  • عوامل لزيادة حجم المنفذ:

    1. تقليل حمل الاتصال بين المنفذين.
    2. تقليل عدد الاتصالات المفتوحة بين المنفذين (N2) على مجموعات أكبر (>100 منفذ).
    3. زيادة حجم كومة الذاكرة المؤقتة لاستيعاب المهام التي تستهلك الذاكرة.
    4. اختياري: تقليل مقدار حمل الذاكرة لكل منفذ.
    5. اختياري: زيادة الاستخدام والتزامن عن طريق الاشتراك الزائد في CPU.

كقاعدة عامة، عند تحديد حجم المنفذ:

  1. ابدأ بـ 30 جيجابايت لكل منفذ، ثم وزع الذاكرات الأساسية المتوفرة للجهاز.
  2. زيادة عدد أنوية المنفذ لمجموعات أكبر (>100 منفذ).
  3. عدّل الحجم استنادًا إلى التشغيل التجريبي والعوامل السابقة مثل حمل تجميع البيانات المهملة (GC).

عند تشغيل الاستعلامات المتزامنة، ضع ما يلي في اعتبارك:

  1. ابدأ بـ 30 جيجابايت لكل منفذ وجميع الذاكرات الأساسية للجهاز.
  2. أنشئ تطبيقات متعددة ومتوازية في Spark من خلال الاستخدام الزائد لـ CPU (تحسين زمن الانتقال بحوالي 30%).
  3. وزع الاستعلامات عبر التطبيقات المتوازية.
  4. عدّل الحجم استنادًا إلى التشغيل التجريبي والعوامل السابقة مثل حمل تجميع البيانات المهملة (GC).

لمزيد من المعلومات عن استخدام Ambari لتكوين المنفذين، راجع إعدادات Apache Spark - منفذو Spark.

راقب أداء الاستعلام للتحقق من وجود القيم الخارجية أو غيرها من مشكلات الأداء، من خلال النظر في طريقة عرض الخط الزمني. رسم بياني للغة الاستعلامات المركبة (SQL)، وإحصاءات المهام، وغير ذلك. للحصول على معلومات عن تصحيح أخطاء مهام Spark باستخدام YARN وخادم Spark History، راجع تصحيح مهام Apache Spark التي تعمل على Azure HDInsight. للحصول على نصائح عن استخدام خادم YARN Timeline Server، راجع الوصول إلى سجلات تطبيق Apache Hadoop YARN.

المهام أبطأ على بعض المنفذين أو العُقد

في بعض الأحيان، يكون منفذ واحد أو عدد قليل من المنفذين أبطأ من الآخرين، وتستغرق المهام وقتاً أطول بكثير لتنفيذها. يحدث هذا البطء بشكل متكرر على أنظمة المجموعات الكبيرة (> 30 عقدة). في هذه الحالة، قم بتقسيم العمل إلى عدد أكبر من المهام بحيث يمكن تعويض المجدوِل عن المهام البطيئة. على سبيل المثال، لديك على الأقل ضعف عدد المهام مثل عدد أساسات المنفذ في التطبيق. كما يمكنك تمكين تنفيذ المهام باستخدام conf: spark.speculation = true.

الخطوات التالية