تحسين تخزين البيانات لـ Apache Spark

تتناول هذه المقالة إستراتيجيات لتحسين تخزين البيانات لتنفيذ مهمة Apache Spark الفعالة على Azure HDInsight.

نظرة عامة

يدعم Spark العديد من التنسيقات، مثل csv وjson وxml وparquet وorc وavro. يمكن توسيع Spark لدعم العديد من التنسيقات مع مصادر البيانات الخارجية - لمزيد من المعلومات، راجع حزم Apache Spark.

أفضل تنسيق للأداء هو Parquet مع ضغط snappy، وهو الافتراضي في Spark 2.x. يخزن Parquet البيانات بتنسيق عمودي، ويتم تحسينه بشكل كبير في Spark.

اختيار تجريد البيانات

تستخدم إصدارات Spark السابقة RDDs لتلخيص البيانات، وSpark 1.3، و1.6 المقدمة DataFrames وDataSets، على التوالي. ضع في اعتبارك المزايا النسبية التالية:

  • DataFrames
    • أفضل خيار في معظم الحالات.
    • يوفر تحسين الاستعلام من خلال Catalyst.
    • توليد التعليمات البرمجية للمرحلة الكاملة.
    • الوصول المباشر إلى الذاكرة.
    • حمل منخفض لمجموعة البيانات المهملة (GC).
    • ليس سهلاً على المطور مثل مجموعات البيانات، كما لا توجد أي عمليات تحقق من وقت التحويل البرمجي أو برمجة كائن المجال.
  • مجموعات البيانات
    • جيد في تدفقات ETL المعقدة حيث يكون تأثير الأداء مقبولاً.
    • ليس جيداً في التجميعات حيث يمكن أن يكون تأثير الأداء كبيراً.
    • يوفر تحسين الاستعلام من خلال Catalyst.
    • سهل للمطور عن طريق توفير برمجة كائن المجال وعمليات التحقق من وقت التجميع.
    • إضافة الحمل التسلسلي/ إلغاء التسلسل.
    • ارتفاع حمل مجموعة البيانات المهملة.
    • فواصل توليد التعليمات البرمجية للمرحلة الكاملة.
  • مجموعات البيانات الموزعة المرنة
    • لا تحتاج إلى استخدام مجموعات البيانات الموزعة المرنة، إلا إذا كنت بحاجة إلى إنشاء مجموعة البيانات الموزعة المرنة مخصص جديد.
    • لا يوجد تحسين للاستعلام من خلال Catalyst.
    • لا يوجد توليد للتعليمات البرمجية للمرحلة الكاملة.
    • ارتفاع حمل مجموعة البيانات المهملة.
    • يجب استخدام واجهات برمجة التطبيقات القديمة من Spark 1.x.

تحديد التخزين الافتراضي

عند إنشاء نظام مجموعة Spark جديدة، يمكنك تحديد Azure Blob Storage أو Azure Data Lake Storage كمساحة تخزين افتراضية لنظام المجموعة. يمنحك كلا الخيارين ميزة التخزين على المدى الطويل لأنظمة المجموعات المؤقتة. لذلك لا يتم حذف بياناتك تلقائياً عند حذف نظام مجموعتك. يمكنك إعادة إنشاء نظام مجموعة مؤقتة والوصول إلى البيانات الخاصة بك أيضاً.

نوع المخزن File System السرعة مؤقت استخدام الحالات
Azure Blob Storage wasb: //url/ قياسي نعم نظام مجموعة مؤقت
Azure Blob Storage (آمن) wasbs: //url/ قياسي نعم نظام مجموعة مؤقت
Azure Data Lake Storage Gen2 abfs: //url/ أسرع نعم نظام مجموعة مؤقت
Azure Data Lake Storage Gen 1 adl: //url/ أسرع نعم نظام مجموعة مؤقت
HDFS محلي hdfs: //url/ الأسرع لا نظام مجموعة تفاعلي 24/7

للحصول على وصف كامل لخيارات التخزين، راجع مقارنة خيارات التخزين للاستخدام مع مجموعات النظام Azure HDInsight.

استخدام ذاكرة التخزين المؤقت

يوفر Spark آليات التخزين المؤقت الأصلية الخاصة بها، والتي يمكن استخدامها بطرق مختلفة مثل .persist() و.cache() وCACHE TABLE. ذاكرة التخزين المؤقت الأصلية هذه فعالة مع مجموعات البيانات الصغيرة وفي تدفقات ETL حيث تحتاج إلى تخزين النتائج المتوسطة في ذاكرة التخزين المؤقت. ومع ذلك، لا يعمل التخزين المؤقت الأصلي لـ Spark حالياً بشكل جيد مع التقسيم، نظراً إلى أن الجدول المخزن بذاكرة التخزين المؤقت لا يحتفظ ببيانات التقسيم. هناك تقنية تخزين مؤقت أكثر عمومية وموثوقية ألا وهي التخزين المؤقت لطبقة التخزين.

  • تخزين Spark المؤقت الأصلي (غير مستحسن)

    • جيد لمجموعات البيانات الصغيرة.
    • لا يعمل مع التقسيم، والذي قد يتغير في إصدارات Spark المستقبلية.
  • التخزين المؤقت لمستوى التخزين (مستحسن)

    • يمكن تنفيذه على HDInsight باستخدام ميزة IO Cache.
    • يستخدم التخزين المؤقت في الذاكرة وSSD.
  • HDFS المحلي (مستحسن)

    • مسار hdfs://mycluster.
    • يستخدم التخزين المؤقت SSD.
    • سيتم فقدان البيانات المخزنة مؤقتاً عند حذف نظام المجموعة، ما يتطلب إعادة إنشاء ذاكرة التخزين المؤقت.

تحسين تسلسل البيانات

يتم توزيع وظائف Spark، لذا فإن تسلسل البيانات المناسب مهم لتحقيق أفضل أداء. هناك خياران للتسلسل لـ Spark:

  • تسلسل Java هو الافتراضي.
  • إن تسلسل Kryo هو أحدث تنسيق ويمكن أن يؤدي إلى تسلسل أسرع وأبسط من Java. يتطلب Kryo تسجيل الفئات في برنامجك، ولا يدعم حتى الآن جميع الأنواع القابلة للتسلسل.

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

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

فيما يلي بعض ميزات التجميع المتقدمة:

  • تحسين الاستعلام استنادًا إلى معلومات التعريف للتجميع.
  • تجميعات محسنة.
  • صلات ربط محسنة.

يمكنك استخدام التقسيم والتجميع في الوقت نفسه.

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