تحسين تطبيقات Apache Spark في HDInsight

تقدم هذه المقالة نظرة عامة على إستراتيجيات تحسين تطبيقات Apache Spark على Azure HDInsight.

نظرة عامة

قد تواجه أدناه السيناريوهات الشائعة

  • نفس مهمة spark أبطأ من ذي قبل في نفس نظام مجموعة HDInsight
  • تكون مهمة spark أبطأ في نظام مجموعة HDInsight من موفر الخدمة المحلي أو موفر خدمة الجهات الخارجية الأخرى
  • مهمة spark أبطأ في نظام مجموعة HDI واحدة من نظام مجموعة HDI أخرى

يعتمد أداء مهام Apache Spark على عوامل متعددة. وتشمل عوامل الأداء هذه ما يلي:

  • كيفية تخزين بياناتك
  • كيفية تكوين نظام المجموعة
  • العمليات المستخدمة عند معالجة البيانات.
  • خدمة yarn غير السليمة
  • قيود الذاكرة بسبب المنفذين بحجم غير صحيح وOutOfMemoryError
  • مهام كثيرة جدًا أو مهام قليلة جدًا
  • تسبب انحراف البيانات في بعض المهام الثقيلة أو المهام البطيئة
  • المهام أبطأ في العقد غير الصالحة

الخطوة 1: تحقق مما إذا كانت خدمة yarn سليمة

  1. انتقل إلى واجهة مستخدم Ambari:
  • تحقق من تنبيهات ResourceManager أو NodeManager
  • تحقق من حالة ResourceManager وNodeManager في YARN > SUMMARY: يجب أن تكون جميع NodeManager قيد البدء ويجب أن يكون Active ResourceManager فقط قيد البدء
  1. تحقق مما إذا كان يمكن الوصول إلى واجهة مستخدم Yarn من خلال https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster

  2. تحقق مما إذا كانت هناك أي استثناءات أو أخطاء في تسجيل الدخول إلى ResourceManager /var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.log

التعرف على مزيد من المعلومات في مشكلات Yarn الشائعة

الخطوة 2: مقارنة موارد التطبيق الجديدة بالموارد المتوفرة في yarn

  1. الانتقال إلى واجهة مستخدم Ambari> YARN>SUMMARY، والتحقق من CLUSTER MEMORY في ServiceMetrics

  2. تحقق من مقاييس قائمة انتظار yarn بالتفصيل:

  • الانتقال إلى واجهة مستخدم Yarn، والتحقق من مقاييس جدولة Yarn من خلال https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster/scheduler
  • بدلاً من ذلك، يمكنك التحقق من مقاييس جدولة yarn من خلال واجهة برمجة تطبيقات Rest لـ Yarn. على سبيل المثال، ⁧curl -u "xxxx" -sS -G "https://YOURCLUSTERNAME.azurehdinsight.net/ws/v1/cluster/scheduler"⁩. بالنسبة إلى ESP، يجب استخدام مستخدم مسؤول المجال.
  1. حساب إجمالي الموارد لتطبيقك الجديد
  • كافة موارد المنفذين: spark.executor.instances * (spark.executor.memory + spark.yarn.executor.memoryOverhead) and spark.executor.instances * spark.executor.cores. راجع المزيد من المعلومات في تكوين منفذي spark
  • ApplicationMaster
    • في وضع نظام المجموعة، استخدم spark.driver.memory وspark.driver.cores
    • في وضع العميل، استخدم spark.yarn.am.memory+spark.yarn.am.memoryOverhead وspark.yarn.am.cores

ملاحظة

yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb

  1. مقارنة إجمالي موارد التطبيق الجديد بالموارد المتوفرة في قائمة الانتظار المحددة

الخطوة 3: تعقب تطبيق spark الخاص بك

  1. مراقبة تطبيق spark قيد التشغيل من خلال واجهة مستخدم Spark

  2. مراقبة تطبيق spark المكتمل أو غير المكتمل من خلال واجهة مستخدم خادم محفوظات Spark

نحن بحاجة إلى تحديد الأعراض أدناه من خلال واجهة مستخدم Spark أو واجهة مستخدم محفوظات Spark:

  • أي مرحلة بطيئة
  • هل تم استخدام v-core لـ CPU الخاصة بالمنفذ بالكامل في مخطط زمني للحدث في علامة تبويب المرحلة
  • إذا كنت تستخدم spark sql، فما هي الخطة الفعلية في علامة تبويب SQL
  • هل DAG طويل جدًا في مرحلة واحدة
  • مراقبة مقاييس المهام (حجم الإدخال، حجم الكتابة العشوائي، وقت GC) في علامة تبويب المرحلة

راجع المزيد من المعلومات في مراقبة تطبيقات Spark

الخطوة 4: تحسين تطبيق spark

هناك أيضًا العديد من التحسينات التي يمكن أن تساعدك على التغلب على هذه التحديات، مثل التخزين المؤقت، والسماح لانحراف البيانات.

في كل من المقالات التالية، يمكنك العثور على معلومات عن جوانب مختلفة من التحسين Spark.

تحسين أقسام Spark SQL

  • spark.sql.shuffle.paritions هو 200 بشكل افتراضي. يمكننا الضبط بناء على احتياجات العمل عند تبديل البيانات للربط أو التجميعات.
  • spark.sql.files.maxPartitionBytes هو 1 جيجابايت بشكل افتراضي في HDI. الحد الأقصى لعدد وحدات البايت التي يجب حزمها في قسم واحد عند قراءة الملفات. هذا التكوين فعال فقط عند استخدام المصادر المستندة إلى الملفات مثل Parquet وJSON وORC.
  • AQE في Spark 3.0. راجع تنفيذ الاستعلام التكيفي

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