ترحيل أحمال عمل Azure HDInsight 3.6 Hive إلى HDInsight 4.0

يتميز HDInsight 4.0 بعديد من المزايا مقارنة بـ HDInsight 3.6. إليك نظرة عامة على ما هو جديد في HDInsight 4.0.

تتناول هذه المقالة خطوات ترحيل حمل عمل Apache Hive من HDInsight 3.6 إلى 4.0، بما في ذلك

  • نسخة Apatchi Hive metastore وترقية المخطط
  • الترحيل الآمن للتوافق مع ACID
  • الحفاظ على نُهج أمن Apatchi Hive

يجب أن تتمتع مجموعات HDInsight الجديدة والقديمة بإمكانية الوصول إلى حسابات التخزين نفسها.

يجب إجراء ترحيل جداول Hive إلى حساب تخزين جديد كخطوة منفصلة. راجع ترحيل Apatchi Hive عبر حسابات التخزين.

التغييرات في Hive 3 والجديد:

تغييرات عميل Apache Hive

يدعم Hive 3 العميل الرقيق فقط، Beeline لتشغيل الاستعلامات والأوامر الإدارية ل Apache Hive من سطر الأوامر. يستخدم Beeline اتصال JDBC ب HiveServer لتنفيذ جميع الأوامر. تحدث عمليات التحليل والتحويل البرمجي والتنفيذ في HiveServer.

يمكنك إدخال أوامر Hive CLI المدعومة عن طريق استدعاء Beeline باستخدام الكلمة الأساسية Hive كمستخدم Hive أو استدعاء beeline باستخدام beeline -u <JDBC URL>. يمكنك الحصول على عنوان URL ل JDBC من صفحة Ambari Hive.

Screenshot showing JDBC URL output.

استخدام Beeline (بدلا من العميل السميك Apache Hive CLI، والذي لم يعد مدعوما) له العديد من المزايا، بما في ذلك:

  • بدلا من الحفاظ على قاعدة التعليمات البرمجية Apache Hive بأكملها، يمكنك الاحتفاظ بعميل JDBC فقط.
  • حمل بدء التشغيل أقل باستخدام Beeline لأن قاعدة التعليمات البرمجية Apache Hive بأكملها غير معنية.

يمكنك أيضا تنفيذ البرنامج النصي Hive، الموجود ضمن الدليل "/usr/bin"، والذي يستدعي اتصال beeline باستخدام عنوان URL ل JDBC.

Screenshot showing beeline connection output.

تسهل بنية العميل الرقيقة تأمين البيانات في

  • توجد حالة الجلسة وهياكل البيانات الداخلية وكلمات المرور وما إلى ذلك على العميل بدلا من الخادم.
  • يبسط العدد الصغير من البرامج الخفية المطلوبة لتنفيذ الاستعلامات المراقبة وتصحيح الأخطاء.

يفرض HiveServer إعدادات قائمة السماح وقائمة الحظر التي يمكنك تغييرها باستخدام SET الأوامر. باستخدام قوائم الحظر، يمكنك تقييد تكوين الذاكرة لمنع عدم استقرار خادم Hive. يمكنك تكوين مثيلات HiveServer متعددة مع قائمة السماح وقائمة حظر مختلفة لإنشاء مستويات مختلفة من الاستقرار.

تغييرات Hive Metastore

يدعم Hive الآن فقط metastore البعيد بدلا من metastore المضمن (داخل HS2 JVM). يوجد Hive metastore على عقدة في مجموعة يديرها Ambari كجزء من مكدس HDInsight. خادم مستقل خارج نظام المجموعة غير مدعوم. لم تعد تقوم بتعيين أوامر key=value على سطر الأوامر لتكوين Hive Metastore. استنادا إلى القيمة التي تم تكوينها في "hive.metastore.uris=' ' " خدمة HMS المستخدمة والاتصال المنشأة.

تغيير محرك التنفيذ

يحل Apache Tez محل MapReduce كمحرك تنفيذ Apache Hive الافتراضي. تم إهمال MapReduce بدءا من Hive 2.0 راجع HIVE-12300. مع تعبيرات الرسوم البيانية المتكررة الموجهة (DAGs) وبدائيات نقل البيانات، يعمل تنفيذ استعلامات Hive ضمن Tez على تحسين الأداء. يتم تنفيذ استعلامات SQL التي ترسلها إلى Apache Hive كما يلي

  1. يقوم Hive بتجميع الاستعلام.
  2. ينفذ Tez الاستعلام.
  3. يخصص YARN موارد للتطبيقات عبر نظام المجموعة ويمكن التخويل لمهام Hive في قوائم انتظار YARN.
  4. تقوم Hive بتحديث البيانات في ABFS أو WASB.
  5. ترجع Hive نتائج الاستعلام عبر اتصال JDBC.

إذا حدد برنامج نصي أو تطبيق قديم MapReduce للتنفيذ، يحدث استثناء كما يلي

Screenshot showing map reducer exception output.

إشعار

لا تتطلب معظم الوظائف المعرفة من قبل المستخدم (UDFs) أي تغيير لتنفيذها على Tez بدلا من MapReduce.

التغييرات فيما يتعلق بمعاملة ACID وCBO:

  • جداول ACID هي نوع الجدول الافتراضي في HDInsight 4.x مع عدم وجود أداء أو تحميل زائد تشغيلي.

  • تطوير التطبيقات المبسطة والعمليات مع ضمانات معاملات أقوى ودلالات أبسط لأوامر SQL

  • تهتم Hive الداخلية بالمستودعات لجداول ACID في HDInsight 4.1، وبالتالي إزالة النفقات العامة للصيانة.

  • تحسينات متقدمة - الترقية في CBO

  • ذاكرة التخزين المؤقت للاستعلام التلقائي. الخاصية المستخدمة لتمكين التخزين المؤقت للاستعلام هي hive.query.results.cache.enabled. تحتاج إلى تعيين هذه الخاصية إلى true. يخزن Apache Hive ذاكرة التخزين المؤقت لنتيجة الاستعلام بشكل /tmp/hive/__resultcache__/. افتراضي، يخصص Hive 2 غيغابايت لذاكرة التخزين المؤقت لنتيجة الاستعلام. يمكنك تغيير هذا الإعداد عن طريق تكوين المعلمة التالية بالبايت hive.query.results.cache.max.size.

    لمزيد من المعلومات، فوائد الترحيل إلى Azure HDInsight 4.0.

إعادة كتابة طريقة العرض المجسدة

لمزيد من المعلومات، حول Hive - طرق العرض المجسدة

التغييرات بعد الترقية إلى Apache Hive 3

لتحديد موقع جداول Apache Hive 3 واستخدامها بعد الترقية، تحتاج إلى فهم التغييرات التي تحدث أثناء عملية الترقية. تغييرات في إدارة الجداول وموقعها، والأذونات لدلائل الجداول، وأنواع الجداول، والمخاوف المتعلقة بتوافق ACID.

إدارة Hive للجداول

يتحكم Hive 3 في الجداول أكثر من Apache Hive 2، ويتطلب أن تلتزم الجداول المدارة بتعريف صارم. مستوى التحكم في Apache Hive يستحوذ على الجداول متجانس لقواعد البيانات التقليدية. Apache Hive مدركة ذاتيا لتغييرات دلتا على البيانات؛ يعمل إطار التحكم هذا على تحسين الأداء.

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

تغييرات Hive على خصائص ACID

يحتوي Hive 2.x و3.x على جداول المعاملات (المدارة) وغير العملياتية (الخارجية). جداول المعاملات لها خصائص ذرية ومتسقة وعزلة ودائمة (ACID). في Hive 2.x، الإصدار الأولي من معالجة معاملات ACID هو ACID v1. في Hive 3.x، ستكون الجداول الافتراضية مع ACID v2.

تنسيقات التخزين الأصلية وغير الأصلية

تعد تنسيقات التخزين عاملا في تغييرات الترقية إلى أنواع الجداول. يدعم Hive 2.x و3.x تنسيقات تخزين Hadoop الأصلية وغير الأصلية التالية

أصلي: جداول ذات دعم مضمن في Apache Hive، بتنسيقات الملفات التالية

  • نص
  • ملف التسلسل
  • ملف RC
  • ملف AVRO
  • ملف ORC
  • ملف Parquet

غير أصلي: الجداول التي تستخدم معالج تخزين، مثل DruidStorageHandler أو HBaseStorageHandler

تغييرات ترقية HDInsight 4.x إلى أنواع الجداول

يقارن الجدول التالي أنواع جداول Hive وعمليات ACID قبل الترقية من HDInsight 3.x وبعد الترقية إلى HDInsight 4.x. ملكية ملف جدول Hive هو عامل في تحديد أنواع الجداول وعمليات ACID بعد الترقية

مقارنة نوع جدول HDInsight 3.x وHDInsight 4.x

HDInsight 3.x - - - HDInsight 4.x -
نوع الجدول ACID v1 التنسيق مالك (مستخدم) ملف جدول Hive نوع الجدول ACID v2
خارجي لا أصلي أو غير أصلي Hive أو غير Hive خارجي لا
مُدار ‏‏نعم‬ ORC Hive أو غير Hive مدار وقابل للتحديث ‏‏نعم‬
مُدار لا ORC Hive مدار وقابل للتحديث ‏‏نعم‬
مُدار لا ORC غير Hive خارجي، مع حذف البيانات لا
مُدار لا أصلي (ولكن غير ORC) Hive مدار، إدراج فقط ‏‏نعم‬
مُدار لا أصلي (ولكن غير ORC) غير Hive خارجي، مع حذف البيانات لا
مُدار لا غير أصلي Hive أو غير Hive خارجي، مع حذف البيانات لا

انتحال شخصية الخلية

تم تمكين انتحال Hive بشكل افتراضي في Hive 2 (doAs=true)، وتم تعطيله بشكل افتراضي في Hive 3. يعمل انتحال Hive على تشغيل Hive كمستخدم، أو لا.

تغييرات ترقية HDInsight 4.x الأخرى

  1. جداول ACID المدارة غير المملوكة لمستخدم Apache Hive تظل جداول مدارة بعد الترقية، ولكن تصبح Apache Hive هي المالكة.
  2. بعد الترقية، يكون تنسيق جدول Hive هو نفسه كما كان قبل الترقية. على سبيل المثال، تظل الجداول الأصلية أو غير الأصلية أصلية أو غير أصلية، على التوالي.

تغييرات الموقع

بعد الترقية، لا يتغير موقع الجداول أو الأقسام المدارة ضمن أي من الشروط التالية:

  • لم يكن الجدول القديم أو دليل القسم في موقعه الافتراضي /apps/hive/warehouse قبل الترقية.
  • الجدول أو القسم القديم في نظام ملفات مختلف عن دليل المستودع الجديد.
  • يوجد الجدول القديم أو دليل القسم في منطقة تشفير مختلفة عن دليل المستودع الجديد.

وإلا، يتغير موقع الجداول أو الأقسام المدارة. تنقل عملية الترقية الملفات المدارة إلى /hive/warehouse/managed. بشكل افتراضي، يضع Hive أي جداول خارجية جديدة تقوم بإنشائها في HDInsight 4.x في /hive/warehouse/external

/apps/hive directoryقد يكون ، وهو الموقع السابق لمستودع Hive 2.x، موجودا أو غير موجود في HDInsight 4.x

السيناريو التالي موجود لتغييرات الموقع

السيناريو 1

إذا كان الجدول عبارة عن جدول مدار في HDInsight-3.x وإذا كان موجودا في الموقع /apps/hive/warehouse وتم تحويله كجدول خارجي في HDInsight-4.x، فإن الموقع هو نفسه /apps/hive/warehouse في HDInsight 4.x أيضا. لا يغير أي موقع. بعد هذه الخطوة، إذا كنت تقوم بتنفيذ أمر تغيير الجدول لتحويله كجدول مدار (acid) في ذلك الوقت موجود في نفس الموقع /apps/hive/warehouse.

السيناريو 2

إذا كان الجدول عبارة عن جدول مدار في HDInsight-3.x وإذا كان موجودا في الموقع /apps/hive/warehouse وتم تحويله إلى جدول مدار (ACID) في HDInsight 4.x، فإن الموقع هو /hive/warehouse/managed.

السيناريو 3 إذا كنت تقوم بإنشاء جدول خارجي، في HDInsight-4.x دون تحديد أي موقع، فإنه يقدم في الموقع /hive/warehouse/external.

تحويل الجدول

بعد الترقية، لتحويل جدول غير متعلق بالعمليات إلى جدول معاملات ACID v2، يمكنك استخدام ALTER TABLE الأمر وتعيين خصائص الجدول إلى

transaction'='true' and 'EXTERNAL'='false
  • سيتم تحويل الجدول المدار، غير ACID، تنسيق ORC والمملوك من قبل مستخدم غير Hive في HDInsight-3.x إلى جدول خارجي غير ACID في HDInsight-4.x.
  • إذا كان المستخدم يرغب في تغيير الجدول الخارجي (غير ACID) إلى ACID، فيجب عليه تغيير الجدول الخارجي إلى مدار و ACID أيضا. لأنه في HDInsight-4.x تكون جميع الجداول المدارة ACID بشكل افتراضي. لا يمكنك تحويل الجداول الخارجية (غير ACID) إلى جدول ACID.

إشعار

يجب أن يكون الجدول جدول ORC.

لتحويل جدول خارجي (غير ACID) إلى جدول مدار (ACID)،

  1. تحويل الجدول الخارجي إلى مدارة وحامض يساوي true باستخدام الأمر التالي:
    alter table <table name> set TBLPROPERTIES ('EXTERNAL'='false', 'transactional'='true');
    
  2. إذا حاولت تنفيذ الأمر التالي للجدول الخارجي، فستحصل على الخطأ أدناه.

السيناريو 1

ضع في اعتبارك أن الجدول rt هو جدول خارجي (غير ACID). إذا كان الجدول غير جدول ORC،

alter table rt set TBLPROPERTIES ('transactional'='true');
ERROR : FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. The table must be stored using an ACID compliant format (such as ORC): work.rt
The table must be ORC format

السيناريو 2

>>>> alter table rt set TBLPROPERTIES ('transactional'='true'); If the table is ORC table.
ERROR:
Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. work.rt can't be declared transactional because it's an external table (state=08S01,code=1)

يحدث هذا الخطأ لأن الجدول rt هو جدول خارجي ولا يمكنك تحويل جدول خارجي إلى ACID.

السيناريو 3

>>>> alter table rt set TBLPROPERTIES ('EXTERNAL'='false');
ERROR:
Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. Table work.rt failed strict managed table checks due to the following reason: Table is marked as a managed table but isn't transactional. (state=08S01,code=1)

هنا نحاول تغيير الجدول الخارجي أولا إلى جدول مدار. في HDInsight 4.x، يجب أن يكون جدولا مدارا بدقة (مما يعني أنه يجب أن يكون ACID). لذا، هنا تحصل على حالة توقف تام. الطريقة الوحيدة لتحويل الجدول الخارجي (NON_ACID) إلى مدار (ACID) يجب عليك اتباع الأمر :

alter table rt set TBLPROPERTIES ('EXTERNAL'='false', 'transactional'='true');

بناء الجملة ودلالاتها

  • إنشاء جدول لتحسين قابلية الاستخدام والوظائف، غير Hive 3 إنشاء الجدول. قامت Hive بتغيير إنشاء الجدول بالطرق التالية

    • إنشاء جدول متوافق مع ACID، وهو الجدول الافتراضي في HDP
    • يدعم عمليات الكتابة والإدراج البسيطة
    • الكتابة إلى أقسام متعددة
    • إدراج تحديثات بيانات متعددة في عبارة SELECT واحدة
    • يلغي الحاجة إلى المستودعات.

    إذا كان لديك مسار ETL يقوم بإنشاء جداول في Apache Hive، يتم إنشاء الجداول ك ACID. تتحكم Apache Hive الآن بإحكام في الوصول وتنفذ الضغط بشكل دوري على الجداول

    قبل الترقية في HDInsight 3.x، أنشأ CREATE TABLE جدولا غير ACID بشكل افتراضي.

    بعد الترقية بشكل افتراضي، ينشئ CREATE TABLE جدول معاملات ACID كاملا بتنسيق ORC.

    الإجراء المطلوب للوصول إلى جداول Hive ACID من Spark، يمكنك الاتصال ب Hive باستخدام مستودع Hive الاتصال or (HWC). لكتابة جداول ACID إلى Hive من Spark، يمكنك استخدام HWC وHWC API

  • مراجع الهروب db.table

    تحتاج إلى تغيير الاستعلامات التي تستخدم مراجع db.table لمنع Hive من تفسير سلسلة db.table بأكملها كاسم الجدول. يرفض db.table Hive 3.x في استعلامات SQL. لا يسمح بنقطة (.) في أسماء الجداول. تقوم بإحاطة اسم قاعدة البيانات واسم الجدول في backticks. ابحث عن جدول يحتوي على مرجع الجدول المسبب للمشاكل. math.students الذي يظهر في عبارة CREATE TABLE. قم بإحاطة اسم قاعدة البيانات واسم الجدول في backticks.

    TABLE `math`.`students` (name VARCHAR(64), age INT, gpa DECIMAL(3,2));
    
  • CASTING TIMESTAMPS تختلف نتائج التطبيقات التي تصب الأرقام إلى الطوابع الزمنية من Hive 2 إلى Hive 3. غير Apache Hive سلوك CAST للامتثال ل SQL Standard، والذي لا يربط منطقة زمنية بنوع TIMESTAMP.

    قبل ترقية تحويل قيمة نوع رقمي إلى طابع زمني يمكن استخدامها لإنتاج نتيجة تعكس المنطقة الزمنية للمجموعة. على سبيل المثال، 1597217764557 هو 2020-08-12 00:36:04 PDT. يؤدي تشغيل الاستعلام التالي إلى تحويل العدد إلى طابع زمني في PDT: SELECT CAST(1597217764557 AS TIMESTAMP); | 2020-08-12 00:36:04 |

    بعد ترقية تحويل قيمة نوع رقمي إلى طابع زمني ينتج نتيجة تعكس التوقيت العالمي المتفق عليه بدلا من المنطقة الزمنية للمجموعة. يؤدي تشغيل الاستعلام إلى تحويل العدد إلى طابع زمني في UTC. SELECT CAST(1597217764557 AS TIMESTAMP); | 2020-08-12 07:36:04.557 |

    إجراء مطلوب تغيير التطبيقات. لا تصب من رقم للحصول على منطقة زمنية محلية. يمكن استخدام الوظائف المضمنة from_utc_timestamp to_utc_timestamp لمحاكاة السلوك قبل الترقية.

  • التحقق من توافق تغييرات العمود يمكن أن يؤدي تغيير التكوين الافتراضي إلى فشل التطبيقات التي تغير أنواع الأعمدة.

    قبل الترقية في HDInsight 3.x Hive.metastore.disallow.incompatible.col.type.changes تكون خاطئة بشكل افتراضي للسماح بإجراء تغييرات على أنواع الأعمدة غير المتوافقة. على سبيل المثال، يمكنك تغيير عمود STRING إلى عمود من نوع غير متوافق، مثل MAP<STRING، STRING>. لا يحدث خطأ.

    بعد الترقية تكون hive.metastore.disallow.incompatible.col.type.changes صحيحة بشكل افتراضي. يمنع Hive إجراء تغييرات على أنواع الأعمدة غير المتوافقة. لا يتم حظر تغييرات نوع العمود المتوافقة، مثل INT و STRING و BIGINT.

    إجراء مطلوب تغيير التطبيقات لمنع تغييرات نوع العمود غير المتوافقة لمنع تلف البيانات المحتمل.

  • إسقاط الأقسام

    تتسبب الكلمات الأساسية غير المتصلة NO_DROP في عبارة CASCADE لإسقاط الأقسام في حدوث مشاكل في الأداء ولم تعد مدعومة.

    قبل الترقية ، يمكنك استخدام كلمات أساسية غير متصلة NO_DROP في عبارة CASCADE لمنع قراءة الأقسام أو إسقاطها.

    بعد الترقية دون اتصال NO_DROP غير مدعومة في عبارة CASCADE.

    إجراء مطلوب تغيير التطبيقات لإزالة غير متصل NO_DROP من عبارة CASCADE. استخدم نظام تخويل، مثل Ranger، لمنع إسقاط الأقسام أو قراءتها.

  • إعادة تسمية جدول بعد الترقية إعادة تسمية جدول مدار ينقل موقعه فقط إذا تم إنشاء الجدول بدون عبارة LOCATION وضمن دليل قاعدة البيانات الخاص به.

القيود المتعلقة ب CBO

  • نرى أن الإخراج المحدد يعطي صفر زائد في أعمدة قليلة. على سبيل المثال، إذا كان لدينا عمود جدول مع نوع البيانات كالأرقام العشرية (38،4) وإذا أدرجنا البيانات ك 38، فإنه يضيف الصفر اللاحق ويوفر النتيجة ك 38.0000 حسب https://issues.apache.org/jira/browse/HIVE-12063 و https://issues.apache.org/jira/browse/HIVE-24389، يتم الاحتفاظ بالفكرة بالمقياس والدقة بدلا من تشغيل برنامج تضمين في أعمدة عشرية. هذا هو السلوك الافتراضي من Hive 2. لإصلاح هذه المشكلة، يمكنك اتباع الخيار أدناه.

    1. تعديل نوع البيانات على مستوى المصدر لضبط الدقة ك col1(عشري(38,0)). توفر هذه القيمة النتيجة ك 38 دون صفر زائد. ولكن إذا قمت بإدراج البيانات ك 35.0005 فسيكون .0005 ويوفر القيمة فقط ك 38 1.إزالة الأصفار اللاحقة للأعمدة ذات المشكلة ثم تحويلها إلى سلسلة،
      1. استخدم select TRIM(cast(<column_name> AS STRING))+0 FROM <table_name>;
      2. استخدم regex.
  1. يفشل استعلام Apache Hive مع "تعبير الاستعلام الفرعي غير المدعوم" عندما نستخدم UNIX_TIMESTAMP في الاستعلام. على سبيل المثال، إذا قمنا بتشغيل استعلام، فإنه يطرح خطأ "تعبير الاستعلام الفرعي غير معتمد"

    select * from
    (SELECT col_1 from table1 where col_2 >= unix_timestamp('2020-03-07','yyyy-MM-dd'));
    

    الحالة الجذرية لهذه المشكلة هي أن قاعدة التعليمات البرمجية Hive الحالية تطرح استثناء يقوم بتحليل UNIX_TIMESTAMP لأنه لا يوجد تعيين دقيق للدقة HiveTypeSystemImpl.java codeUNIX_TIMESTAMP التي يتعرف عليها الكالسيت ك BIGINT. ولكن الاستعلام أدناه يعمل بشكل جيد select * from (SELECT col_1 from table1 where col_2 >= 1);

    يتم تنفيذ هذا الأمر بنجاح لأن col_2 عبارة عن عدد صحيح. تم تصحيح المشكلة أعلاه في hdi-3.1.2-4.1.12(مكدس 4.1) وhdi-3.1.2-5.0.8(مكدس 5.0)

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

1- إعداد البيانات

  • لا يدعم HDInsight 3.6 جداول ACID بشكل تلقائي. إذا كانت جداول ACID موجودة، فقم بتشغيل الضغط "الرئيسي" عليها. راجع دليل لغة Apatchi Hive للحصول على تفاصيل حول الضغط.

  • إذا كنت تستخدم Azure Data Lake Storage Gen1، فمن المحتمل أن تعتمد مواقع جدول Apatchi Hive على تكوينات HDFS للمجموعة. قم بتشغيل إجراء البرنامج النصي التالي لجعل هذه المواقع قابلة للنقل إلى مجموعات أخرى. راجع إجراء البرنامج النصي إلى نظام المجموعة قيد التشغيل.

    الخاصية القيمة
    عنوان URI النصي Bash https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/hive-adl-expand-location-v01.sh
    نوع العقدة (العقدات) الرأس
    المعلمات

2. انسخ قاعدة بيانات SQL

  • إذا كان نظام المجموعة يستخدم Hive Metastore افتراضيًّا، فاتبع هذا Guide لتصدير بيانات التعريف إلى قاعدة بيانات خارجية. ثم قم بإنشاء نسخة من Metastore الخارجي للترقية.

  • إذا كان نظام المجموعة يستخدم Hive Metastore خارجيّاً، فقم بإنشاء نسخة منه. تتضمن الخيارات Export/Import وpoint-in-time restore.

3. قم بترقية مخطط Metastore

تستخدم هذه الخطوة Hive Schema Tool من HDInsight 4.0 لترقية مخطط Metastore.

التحذير

هذه الخطوة غير قابلة للعكس. قم بتشغيل هذا فقط على نسخة من Metastore.

  1. قم بإنشاء نموذج مجموعة HDInsight 4.0 مؤقتة للوصول إلى 4.0 Hive schematool. يمكنك استخدام Default Hive metastore لهذه الخطوة.

  2. من مجموعة HDInsight 4.0، قم بتنفيذ schematool لتحسين HDInsight 3.6 metastore الهدف. حرّر البرنامج النصي للواجهة التالية لإضافة اسم وحدة الخدمة واسم لغة الاستعلامات المركبة واسم المستخدم وكلمة المرور. افتح جلسة SSH على عقدة الرأس ثم شغّلها.

    SERVER='servername.database.windows.net'  # replace with your SQL Server
    DATABASE='database'  # replace with your 3.6 metastore SQL Database
    USERNAME='username'  # replace with your 3.6 metastore username
    PASSWORD='password'  # replace with your 3.6 metastore password
    STACK_VERSION=$(hdp-select status hive-server2 | awk '{ print $3; }')
    /usr/hdp/$STACK_VERSION/hive/bin/schematool -upgradeSchema -url "jdbc:sqlserver://$SERVER;databaseName=$DATABASE;trustServerCertificate=false;encrypt=true;hostNameInCertificate=*.database.windows.net;" -userName "$USERNAME" -passWord "$PASSWORD" -dbType "mssql" --verbose
    

    إشعار

    يستخدم العميل هذه الأداة beeline لتنفيذ نصوص SQL في /usr/hdp/$STACK_VERSION/hive/scripts/metastore/upgrade/mssql/upgrade-*.mssql.sql.

    بناء جملة SQL في هذه البرامج النصية غير متوافق بالضرورة مع أدوات العميل الأخرى. على سبيل المثال، يتطلّب كل من Management Studio ومحرر الاستعلام في Azure Portal كلمة رئيسية GO بعد كل أمر.

    إذا فشل أي برنامج نصي بسبب سعة الموارد أو مهلات المعاملة، فقم بتوسيع قاعدة بيانات SQL.

  3. تحقق من النسخة النهائية مع الاستعلام select schema_version from dbo.version.

    يجب أن يتطابق الإخراج مع الأمر bash التالي من نموذج مجموعة HDInsight 4.0.

    grep . /usr/hdp/$(hdp-select --version)/hive/scripts/metastore/upgrade/mssql/upgrade.order.mssql | tail -n1 | rev | cut -d'-' -f1 | rev
    
  4. حذف نموذج مجموعة HDInsight 4.0 المؤقتة.

4. توزيع نظام مجموعة HDInsight 4.0 جديدة

أنشئ مجموعة HDInsight 4.0 جديدة، حدد Hive Metastore التي تمت ترقيتها ونفس حسابات التخزين.

  • نظام المجموعة الجديد لا يتطلّب وجود نفس نظام الملفات filesystem الافتراضي.

  • إذا كان Metastore يحتوي على جداول مقيمة في حسابات تخزين متعددة، فأنت بحاجة إلى إضافة حسابات التخزين هذه إلى المجموعة الجديدة للوصول إلى تلك الجداول. راجع إضافة حسابات تخزين إضافية إلى HDInsight.

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

    استخدم الأمر Hive التالي لتعريف موقع الجدول:

    SHOW CREATE TABLE ([db_name.]table_name|view_name);
    

5. تحويل جداول ACID للامتثال

يجب أن تكون الجداول المدارة متوافقة مع ACID على HDInsight 4.0. قم بتشغيل strictmanagedmigration على HDInsight 4.0 لتحويل جميع الجداول التي لا تخضع لـ ACID إلى جداول خارجية مع الخاصية 'external.table.purge'='true'. تخلص من العقدة الرئيسية:

sudo su - hive
STACK_VERSION=$(hdp-select status hive-server2 | awk '{ print $3; }')
/usr/hdp/$STACK_VERSION/hive/bin/hive --config /etc/hive/conf --service strictmanagedmigration --hiveconf hive.strict.managed.tables=true -m automatic --modifyManagedTables

6. لم يتم العثور على خطأ الفئة مع MultiDelimitSerDe

المشكله

في بعض الحالات عند تشغيل استعلام Apache Hive، قد تتلقى java.lang.ClassNotFoundException رسالة تفيد org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe بأنه لم يتم العثور على فئة. يحدث هذا الخطأ عند ترحيل العميل من HDInsight 3.6 إلى HDInsight 4.0. تتم إزالة فئة org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDeSerDe ، وهي جزء من hive-contrib-1.2.1000.2.6.5.3033-1.jar في HDInsight 3.6 ونحن نستخدم org.apache.hadoop.hive.serde2.MultiDelimitSerDe الفئة، وهي جزء من hive-exec jar HDI-4.0. hive-exec jar سيتم تحميل إلى HS2 بشكل افتراضي عند بدء تشغيل الخدمة.

خطوات لاستكشاف الأخطاء وإصلاحها

  1. تحقق مما إذا كان أي JAR ضمن مجلد (من المحتمل أن يكون ضمن مجلد مكتبات Hive، الموجود /usr/hdp/current/hive/lib في HDInsight) يحتوي على هذه الفئة أم لا.
  2. تحقق من الفئة org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe وكما org.apache.hadoop.hive.serde2.MultiDelimitSerDe هو مذكور في الحل.

الحل

  1. على الرغم من أن ملف JAR هو ملف ثنائي، فلا يزال بإمكانك استخدام grep الأمر مع -Hrni مفاتيح التبديل كما هو موضح أدناه للبحث عن اسم فئة معين

    grep -Hrni "org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe" /usr/hdp/current/hive/lib
    
  2. إذا لم تتمكن من العثور على الفئة، فلن ترجع أي إخراج. إذا عثر على الفئة في ملف JAR، فسيتم إرجاع الإخراج

  3. فيما يلي المثال الذي تم أخذه من مجموعة HDInsight 4.x

    sshuser@hn0-alters:~$ grep -Hrni "org.apache.hadoop.hive.serde2.MultiDelimitSerDe" /usr/hdp/4.1.9.7/hive/lib/
    Binary file /usr/hdp/4.1.9.7/hive/lib/hive-exec-3.1.0.4.1-SNAPSHOT.jar matches
    
  4. من الإخراج أعلاه، يمكننا التأكد من عدم وجود jar يحتوي على فئة org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe و hive-exec jar يحتوي على org.apache.hadoop.hive.serde2.MultiDelimitSerDe.

  5. حاول إنشاء الجدول بتنسيق الصف DerDe ك ROW FORMAT SERDE org.apache.hadoop.hive.serde2.MultiDelimitSerDe

  6. سيقوم هذا الأمر بإصلاح المشكلة. إذا كنت قد أنشأت الجدول بالفعل، يمكنك إعادة تسميته باستخدام الأوامر أدناه

    Hive => ALTER TABLE TABLE_NAME SET SERDE 'org.apache.hadoop.hive.serde2.MultiDelimitSerDe'
    Backend DB => UPDATE SERDES SET SLIB='org.apache.hadoop.hive.serde2.MultiDelimitSerDe' where SLIB='org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe';
    

أمر التحديث هو تحديث التفاصيل يدويا في قاعدة البيانات الخلفية ويتم استخدام الأمر alter لتغيير الجدول مع فئة SerDe الجديدة من beeline أو Hive.

مقارنة مخطط Hive Backend DB بين البرنامج النصي

يمكنك تشغيل البرنامج النصي التالي بعد إكمال الترحيل.

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

يحتوي المسار التالي على ملف schemacompare_final.py وtest.csv. البرنامج النصي موجود في ملف "schemacompare_final.py" ويحتوي الملف "test.csv" على كل اسم العمود و نوع البيانات لكافة الجداول، والتي يجب أن تكون موجودة في قاعدة بيانات الواجهة الخلفية للخلية.

https://hdiconfigactions2.blob.core.windows.net/hiveschemacompare/schemacompare_final.py

https://hdiconfigactions2.blob.core.windows.net/hiveschemacompare/test.csv

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

خطوات تنفيذ البرنامج النصي:

إنشاء دليل يسمى "schemacompare" ضمن دليل "/tmp".

ضع "schemacompare_final.py" و"test.csv" في المجلد "/tmp/schemacompare". قم "ls -ltrh /tmp/schemacompare/" وتحقق مما إذا كانت الملفات موجودة أم لا.

لتنفيذ البرنامج النصي Python، استخدم الأمر "python schemacompare_final.py". يبدأ هذا البرنامج النصي في تنفيذ البرنامج النصي ويستغرق إكماله أقل من خمس دقائق. يتصل البرنامج النصي أعلاه تلقائيا بقاعدة بيانات الواجهة الخلفية الخاصة بك ويجلب التفاصيل من كل جدول، والذي يستخدمه Hive ويحدث التفاصيل في ملف csv الجديد المسمى "return.csv". بعد إنشاء الملف return.csv، فإنه يقارن البيانات بالملف "test.csv" ويطبع اسم العمود أو نوع البيانات إذا كان هناك أي شيء مفقود تحت اسم الجدول.

بمجرد تنفيذ البرنامج النصي، يمكنك مشاهدة الأسطر التالية، والتي تشير إلى أنه يتم إحضار التفاصيل للجداول وأن البرنامج النصي قيد التقدم

KEY_CONSTRAINTS
Details Fetched
DELEGATION_TOKENS
Details Fetched
WRITE_SET
Details Fetched
SERDES
Details Fetched

ويمكنك مشاهدة تفاصيل الفرق ضمن سطر "تفاصيل الفرق:". إذا كان هناك أي اختلاف، فإنه يطبع

PART_COL_STATS;
('difference', ['BIT_VECTOR', 'varbinary'])
The line with semicolon PART_COL_STATS; is the table name. And under the table name you can find the differences as ('difference', ['BIT_VECTOR', 'varbinary']) if there are any difference in column or datatype.

إذا لم تكن هناك اختلافات في الجدول، فإن الإخراج هو

BUCKETING_COLS;
('difference', [])
PARTITIONS;
('difference', [])

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

SELECT * FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME = 'PART_COL_STATS';

في حالة فقدان أي من الأعمدة في الجدول، على سبيل المثال، إذا قمنا بتشغيل الاستعلامات مثل إدراج أو إدراج الكتابة فوقها، فسيتم حساب الإحصائيات تلقائيا ويحاول تحديث جدول الإحصائيات مثل PART_COL_STATS TAB_COL_STATS. وإذا كان العمود مثل "BIT_VECTOR" مفقودا في الجداول، فسيفشل مع خطأ "اسم العمود غير صالح". يمكنك إضافة العمود كما هو مذكور في الأوامر التالية. كحل بديل، يمكنك تعطيل الإحصائيات عن طريق تعيين الخصائص التالية، والتي لا يمكنها تحديث الإحصائيات في قاعدة البيانات الخلفية.

hive.stats.autogather=false;
hive.stats.column.autogather=false;
To Fix this issue, run the following two queries on backend SQL server (Hive metastore DB):

ALTER TABLE PART_COL_STATS ADD BIT_VECTOR VARBINARY(MAX);
ALTER TABLE TAB_COL_STATS ADD BIT_VECTOR VARBINARY(MAX);

تتجنب هذه الخطوة فشل الاستعلام، الذي يفشل مع "اسم العمود غير صالح" مرة واحدة بعد الترحيل.

Secure Hive عبر إصدارات HDInsight

يتكامل HDInsight اختياريا مع معرف Microsoft Entra باستخدام حزمة أمان المؤسسة HDInsight (ESP). يستخدم ESP Kerberos وApache Ranger لإدارة أذونات موارد محددة داخل المجموعة. يمكن ترحيل نُهج Ranger التي تم نشرها ضد Hive في HDInsight 3.6 إلى HDInsight 4.0 من خلال الخطوات التالية:

  1. انتقل إلى لوحة Ranger Service Manager في مجموعة HDInsight 3.6 الخاصة بك.
  2. انتقل إلى النهج المسمى HIVE وقم بتصدير النهج إلى ملف json.
  3. تأكد من وجود جميع المستخدمين المشار إليهم في نهج json المصدرة في المجموعة الجديدة. إذا تمت الإشارة إلى مستخدم في نهج json ولكن لم يكن موجوداً في المجموعة الجديدة، فقم إما بإضافة المستخدم إلى المجموعة الجديدة أو إزالة المرجع من النهج.
  4. انتقل إلى لوحة Ranger Service Manager في مجموعة HDInsight 4.0.
  5. انتقل إلى النهج المسماة HIVE واستورد json policy ranger من الخطوة 2.

تغييرات Apatchi Hive في HDInsight 4.0 والتي قد تتطلب تغييرات في التطبيق

راجع إعلان HDInsight 4.0 لتحصل على تغييرات إضافية.

نشر الترحيل

تأكد من اتباع هذه الخطوات بعد إكمال الترحيل.

سلامة الجدول

  1. أعد إنشاء الجداول في Hive 3.1 باستخدام CTAS أو IOW لتغيير نوع الجدول بدلا من تغيير خصائص الجدول.
  2. احتفظ ب doAs كخطأ.
  3. تأكد من أن ملكية الجدول/البيانات المدارة مع مستخدم "hive".
  4. استخدم جداول ACID المدارة إذا كان تنسيق الجدول ORC وغير ACID المدار للأنووع غير ORC.
  5. إعادة إنشاء الإحصائيات على الجداول المعاد إنشاؤها لأن الترحيل قد يتسبب في إحصائيات غير صحيحة.

صحة نظام المجموعة

إذا كانت مجموعات متعددة تشترك في نفس التخزين و HMS DB، فيجب علينا تمكين مؤشرات ترابط الضغط/الضغط التلقائي في مجموعة واحدة فقط وتعطيل كل مكان آخر.

ضبط Metastore لتقليل استخدام وحدة المعالجة المركزية الخاصة بهم.

  1. تعطيل مستمعي أحداث المعاملات.

    إشعار

    نفذ الخطوات التالية، فقط إذا لم يتم استخدام ميزة النسخ المتماثل للخلية.

    1. من واجهة مستخدم Ambari، قم بإزالة قيمة hive.metastore.transactional.event.listeners.
    2. القيمة الافتراضية: org.apache.hive.hcatalog.listener.DbNotificationListener
    3. قيمة جديدة: <Empty>
  2. تعطيل Hive PrivilegeSynchronizer

    1. من واجهة مستخدم Ambari، قم بتعيين hive.privilege.synchronizer = false.
    2. القيمة الافتراضية: true
    3. قيمة جديدة: false
  3. تحسين ميزة إصلاح القسم

  4. تعطيل إصلاح القسم - يتم استخدام هذه الميزة لمزامنة أقسام جداول Hive في موقع التخزين مع Hive metastore. يمكنك تعطيل هذه الميزة إذا تم استخدام "إصلاح msck" بعد استيعاب البيانات.

  5. لتعطيل الميزة ، أضف "discover.partitions=false" ضمن خصائص الجدول باستخدام ALTER TABLE. OR (إذا تعذر تعطيل الميزة)

  6. زيادة تكرار إصلاح القسم.

  7. من واجهة مستخدم Ambari، قم بزيادة قيمة "metastore.partition.management.task.frequency" (بالثوان).

    إشعار

    يمكن أن يؤدي هذا التغيير إلى تأخير رؤية بعض الأقسام التي تم استيعابها في التخزين.

    1. القيمة الافتراضية: 60
    2. القيمة المقترحة: 3600
  8. تحسينات متقدمة يجب اختبار الخيارات التالية في بيئة أقل (غير prod) قبل تطبيقها على الإنتاج.

    1. قم بإزالة وحدة الإصغاء ذات الصلة بالعرض المجسد إذا لم يتم استخدام طريقة العرض المجسدة.
    2. من واجهة مستخدم Ambari، أضف خاصية مخصصة (في hive-site.xml مخصص) وقم بإزالة مؤشرات ترابط metastore الخلفية غير المرغوب فيها.
    3. اسم الخاصية: metastore.task.threads.remote
    4. القيمة الافتراضية: N/A (it uses few class names internally)
    5. قيمة جديدة: org.apache.hadoop.hive.metastore.txn.AcidHouseKeeperService,org.apache.hadoop.hive.metastore.txn.AcidOpenTxnsCounterService,org.apache.hadoop.hive.metastore.txn.AcidCompactionHistoryService,org.apache.hadoop.hive.metastore.txn.AcidWriteSetService,org.apache.hadoop.hive.metastore.PartitionManagementTask
  9. تعطيل مؤشرات ترابط الخلفية إذا تم تعطيل النسخ المتماثل.

    1. من واجهة مستخدم Ambari، أضف خاصية مخصصة (في hive-site.xml مخصص) وقم بإزالة مؤشرات الترابط غير المرغوب فيها.
    2. اسم الخاصية: metastore.task.threads.always
    3. القيمة الافتراضية: N/A (it uses few class names internally)
    4. قيمة جديدة: org.apache.hadoop.hive.metastore.RuntimeStatsCleanerTask

ضبط الاستعلام

  1. احتفظ بالتكوينات الافتراضية ل Apache Hive لتشغيل الاستعلامات أثناء ضبطها لأحمال عمل TPC-DS. تحتاج إلى ضبط مستوى الاستعلام فقط إذا فشل أو كان يعمل ببطء.
  2. تأكد من أن الإحصائيات محدثة لتجنب خطة سيئة أو نتائج خاطئة.
  3. تجنب خلط جداول ACID الخارجية والمدارة في نوع الصلة من الاستعلامات. في مثل هذه الحالة، حاول تحويل جدول خارجي إلى جدول غير ACID مدار من خلال الترفيه.
  4. في Hive-3، حدث الكثير من العمل على المتجهات، CBO، الطابع الزمني مع المنطقة وما إلى ذلك، والتي قد تحتوي على أخطاء المنتج. لذلك، إذا كان أي استعلام يعطي نتائج خاطئة، فحاول تعطيل المتجهات، وCBO، وربط الخريطة وما إلى ذلك، لمعرفة ما إذا كان ذلك يساعد.

خطوات أخرى يجب اتباعها لإصلاح النتائج غير الصحيحة والأداء الضعيف بعد الترحيل

  1. إصدار استعلام Hive يعطي نتيجة غير صحيحة. حتى استعلام عدد التحديد (*) يعطي النتيجة غير الصحيحة.

    السبب في تعيين الخاصية "hive.compute.query.using.stats" إلى true، بشكل افتراضي. إذا قمنا بتعيينه إلى صحيح، فإنه يستخدم الإحصائيات، والتي يتم تخزينها في metastore لتنفيذ الاستعلام. إذا لم تكن الإحصائيات محدثة، فعندئذ ينتج عنها نتائج غير صحيحة.

    تقوم الدقة بتجميع الإحصائيات للجداول المدارة باستخدام alter table <table_name> compute statics; الأمر على مستوى الجدول ومستوى العمود. ارتباط المرجع - https://cwiki.apache.org/confluence/display/hive/statsdev#StatsDev-TableandPartitionStatistics

  2. يستغرق تنفيذ استعلامات Apache Hive المشكلة وقتا طويلا.

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

    الدقة تأكد من تعيين الخاصية "hive.auto.convert.join=true" وهي القيمة الافتراضية. يؤدي تعيينه إلى خطأ إلى استخدام صلة الدمج وقد يؤدي إلى أداء ضعيف. يقرر Hive ما إذا كان سيتم استخدام ربط الخريطة أم لا استنادا إلى الخصائص التالية، والتي تم تعيينها في نظام المجموعة

    set hive.auto.convert.join=true;
    set hive.auto.convert.join.noconditionaltask=true;
    set hive.auto.convert.join.noconditionaltask.size=<value>;
    set hive.mapjoin.smalltable.filesize = <value>;
    

    يمكن تحويل الصلة الشائعة إلى ربط الخريطة تلقائيا، عندما hive.auto.convert.join.noconditionaltask=true، إذا كان الحجم المقدر للجداول (الجداول) الصغيرة أصغر من الخلية.auto.convert.join.noconditionaltask.size (القيمة الافتراضية هي 10000000 ميغابايت).

    إذا واجهت أي مشكلة تتعلق ب OOM عن طريق تعيين الخاصية hive.auto.convert.join إلى true، فمن المستحسن تعيينها على false فقط لهذا الاستعلام المحدد على مستوى الجلسة وليس على مستوى نظام المجموعة. قد تحدث هذه المشكلة إذا كانت الإحصائيات خاطئة وقررت Apache Hive استخدام ربط الخريطة استنادا إلى الإحصائيات.

  • إصدار استعلام Apache Hive يعطي نتيجة غير صحيحة إذا كان الاستعلام يحتوي على شرط صلة وكانت الجداول المعنية تحتوي على قيم فارغة أو خالية.

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

    الحل نوصي بتجربة تعيين الخاصية set hive.cbo.returnpath.hiveop=true على مستوى جلسة العمل إذا حصلت على أي نتائج غير صحيحة. يقدم هذا التكوين تصفية غير خالية على مفاتيح الانضمام. إذا كانت الجداول تحتوي على العديد من القيم الخالية، لتحسين عملية الربط بين جداول متعددة، يمكننا تمكين هذا التكوين بحيث يعتبر القيم غير الفارغة فقط.

  • إصدار استعلام Apache Hive يعطي نتيجة غير صحيحة إذا كان الاستعلام يحتوي على شروط صلة متعددة.

    يتسبب Tez في وقت ما في إنتاج خطط وقت تشغيل غير صحيحة كلما كانت هناك نفس الصلات عدة مرات مع عمليات ربط الخريطة.

    الحل هناك فرصة للحصول على نتائج غير صحيحة عندما نضبط hive.merge.nway.joins على خطأ. حاول تعيينه إلى صحيح فقط للاستعلام، الذي تأثر. يساعد هذا الاستعلام مع الصلات المتعددة على نفس الشرط، وينضم الدمج معا في عامل تشغيل صلة واحد. هذه الطريقة مفيدة إذا كان التبديل العشوائي الكبير ينضم لتجنب مرحلة إعادة التبديل.

  • المشكلة' هناك زيادة في وقت تنفيذ الاستعلام يوما بعد يوم بالمقارنة مع عمليات التشغيل السابقة.

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

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

    رابط المرجع: معاملات Hive - Apache Hive - Apache Software Foundation.

  • إصدار استعلام Apache Hive يعطي نتيجة غير صحيحة عندما يستخدم العميل شرط صلة على جدول حامض أورك مدار وجدول غير ACID orc مدار.

    السبب من HIVE 3 فصاعدا، يطلب منه بشدة الاحتفاظ بجميع الجداول المدارة كجدول حمض. وإذا أردنا الاحتفاظ به كجدول حمض ثم يجب أن يكون تنسيق الجدول orc وهذا هو المعيار الرئيسي. ولكن إذا قمنا بتعطيل خاصية الجدول المدارة الصارمة "hive.strict.managed.tables" إلى false، يمكننا إنشاء جدول غير ACID مدار. يقوم عميل حالة ما بإنشاء جدول ORC خارجي أو بعد الترحيل تم تحويل الجدول إلى جدول خارجي وتعطيل خاصية الجدول المدارة الصارمة وتحويله إلى جدول مدار. عند هذه النقطة، تم تحويل الجدول إلى تنسيق orc غير ACID المدار.

    يحدث تحسين تحليل Apache Hive بشكل خاطئ إذا قمت بضم جدول مع جدول ORC غير مدار بواسطة ACID مع جدول orc المدار من acid.

    إذا كنت تقوم بتحويل جدول خارجي إلى جدول مدار،

    1. لا تقم بتعيين الخاصية "hive.strict.managed.tables" إلى false. إذا قمت بتعيين ثم يمكنك إنشاء جدول غير ACID المدارة ولكن لا يطلب في HIVE-3
    2. تحويل الجدول الخارجي إلى جدول مدار باستخدام الأمر البديل التالي بدلا من alter table <table_name> set TBLPROPERTIES ('EXTERNAL'='false');
    alter table rt set TBLPROPERTIES ('EXTERNAL'='false', 'transactional'='true');
    

دليل استكشاف الأخطاء وإصلاحها

يوفر دليل استكشاف الأخطاء وإصلاحها لـ HDInsight 3.6 إلى 4.0 لحمل عمل Hive إجابات للمشكلات الشائعة التي تمت مواجهتها عند ترحيل حمل عمل Hive من HDInsight 3.6 إلى HDInsight 4.0.

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