كيفية استكشاف أخطاء عدة مشاكل أباتشي خلية metastore

المشكلة 1: جداول metastore الخارجية غير متوفرة

عند فحص سجلات برنامج التشغيل، تشاهد تتبع مكدس يتضمن Required table missing الخطأ:

WARN Query: Query for candidates of org.apache.hadoop.hive.metastore.model.MDatabase and subclasses resulted in no possible candidates

Required table missing: "DBS" in Catalog "" Schema "". DataNucleus requires this table to perform its
persistence operations. Either your MetaData is incorrect, or you need to enable
"datanucleus.schema.autoCreateTables"

org.datanucleus.store.rdbms.exceptions.MissingTableException: Required table missing : "DBS" in Catalog ""  Schema "". DataNucleus requires this table to perform its persistence operations. Either your MetaData is incorrect, or you need to enable
"datanucleus.schema.autoCreateTables"

   at

org.datanucleus.store.rdbms.table.AbstractTable.exists(AbstractTable.java:606)

   at

org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.performTablesValidation(RDBMSStoreManager.java:33
85)

السبب

قاعدة البيانات موجودة، ولكن لا توجد جداول metastore.

حل

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

spark.hadoop.datanucleus.autoCreateSchema=true
spark.hadoop.datanucleus.fixedDatastore=false

يمكنك أيضا تعيين هذه التكوينات في تكوين أباتشي سبارك مباشرة:

datanucleus.autoCreateSchema true
datanucleus.fixedDatastore false

المشكلة 2: فشل التحقق من مخزن خلية

عند فحص سجلات برنامج التشغيل، تشاهد تتبع مكدس يتضمن خطأ كما يلي:

18/09/24 14:51:07 ERROR RetryingHMSHandler: HMSHandler Fatal error:
MetaException(message:Version information not found in metastore. )

   at
org.apache.hadoop.hive.metastore.ObjectStore.checkSchema(ObjectStore
.java:7564)

   at
org.apache.hadoop.hive.metastore.ObjectStore.verifySchema(ObjectStore.
java:7542)

   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

السبب

VERSIONالجدول في المخزن فارغ.

حل

قم بتنفيذ أحد الإجراءات الآتية:

  • تعبئة VERSION الجدول مع قيم الإصدار الصحيح باستخدام INSERT استعلام.

  • تعيين التكوينات التالية لإيقاف التحقق metastore في تكوين Spark الكتلة:

    hive.metastore.schema.verification false
    hive.metastore.schema.verification.record.version false
    

المشكلة 3: تجاوز حد اتصال Metastore

تفشل الأوامر التي تعمل على الكتلة مع تتبع المكدس التالي في سجلات برنامج التشغيل:

Unable to open a test connection to the given
database. JDBC url =
jdbc:<jdbcURL>?trustServerCertificate=true&useSS
L=true, username = <REDACTED>. Terminating
connection pool (set lazyInit to true if you
expect to start your database after your app).
Original Exception: ------

java.sql.SQLSyntaxErrorException: User
'<userId>' has exceeded the
'max_user_connections' resource (current value:
100)
at
org.mariadb.jdbc.internal.util.exceptions.Except
ionMapper.get(ExceptionMapper.java:163)
at
org.mariadb.jdbc.internal.util.exceptions.Except
ionMapper.getException(ExceptionMapper.java:106)
at
org.mariadb.jdbc.internal.protocol.AbstractConne
ctProtocol.connectWithoutProxy(AbstractConnectPr
otocol.java:1036)

السبب

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

حل

تصحيح المشكلة بأحد الإجراءات التالية:

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

المشكلة 4: تفشل إجراءات الجدول لأن العمود يحتوي على بيانات تعريف أكثر من اللازم

عندما تتجاوز كمية بيانات التعريف لعمود واحد 4000 حرف، تفشل إجراءات الجدول مع حدوث خطأ مثل هذا:

Error in SQL statement: IllegalArgumentException:
Error: type expected at the position 3998 of 'struct<num_ad_accounts:bigint,num_benchmarks:bigint,num_days_range:string,num_days_in_history:string,num_fb_pages:bigint,num_g_profiles:bigint,num_ga_views:bigint,num_groups:bigint,num_ig_profiles:bigint,num_li_pages:bigint,num_labels:string,num_labels_added:bigint,num_labels_

السبب

هذا هو الخطأ الذي تم إصلاحه في خلية ميتاستور الإصدار 2.3.0(HIVE-12274). يستخدم Azure Databricks إصدار سابق من Metastore الخلية (الإصدار 0.13) ، لذلك يحدث هذا الخطأ عند وجود بيانات تعريف كثيرة جدا لعمود، مثل مخطط JSON المستوردة.

حل

كحل بديل، قم بإعداد metastore خلية خارجية يستخدم الإصدار 2.3.0 أو أعلى. ثم حذف الجدول الموجود مع الأمر التالي:

spark.sessionState
  .catalog
  .externalCatalog
  .dropTable("default", "test_table_tabledrop_1", ignoreIfNotExists = false, purge = false)