Beheben von Problemen mit mehreren Apache Hive metastoresHow to troubleshoot several Apache Hive metastore problems

Problem 1: externe metastore-Tabellen nicht verfügbarProblem 1: External metastore tables not available

Wenn Sie die Treiber Protokolle überprüfen, wird eine Stapel Überwachung angezeigt, die den Fehler enthält Required table missing :When you inspect the driver logs, you see a stack trace that includes the error 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)

UrsacheCause

Die Datenbank ist vorhanden, aber es sind keine metastore-Tabellen vorhanden.The database is present, but there are no metastore tables.

LösungSolution

Wenn die externe metastore-Version Hive 2,0 oder höher ist, verwenden Sie das Hive-Schema Tool , um die metastore-Tabellen zu erstellen.If the external metastore version is Hive 2.0 or above, use the Hive Schema Tool to create the metastore tables. Fügen Sie für Versionen unterhalb von Hive 2,0 die metastore-Tabellen mit den folgenden Konfigurationen in Ihrem vorhandenen init-Skript hinzu:For versions below Hive 2.0, add the metastore tables with the following configurations in your existing init script:

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

Sie können diese Konfigurationen auch direkt in der Apache Spark-Konfiguration festlegen:You can also set these configurations in the Apache Spark configuration directly:

datanucleus.autoCreateSchema true
datanucleus.fixedDatastore false

Problem 2: Hive-metastore Überprüfung fehlgeschlagenProblem 2: Hive metastore verification failed

Wenn Sie die Treiber Protokolle überprüfen, wird eine Stapel Überwachung mit einem Fehler wie dem folgenden angezeigt:When you inspect the driver logs, you see a stack trace that includes an error like the following:

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)

UrsacheCause

Die VERSION Tabelle im metastore ist leer.The VERSION table in the metastore is empty.

LösungSolution

Führen Sie einen der folgenden Schritte aus:Do one of the following:

  • Füllen Sie die VERSION Tabelle mit den richtigen Versions Werten mithilfe einer- INSERT Abfrage auf.Populate the VERSION table with the correct version values using an INSERT query.

  • Legen Sie die folgenden Konfigurationen fest, um die metastore-Überprüfung in der Spark-Konfiguration des Clusters zu deaktivieren:Set the following configurations to turn off the metastore verification in the Spark configuration of the cluster:

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

Problem 3: Grenze für metastore-Verbindung überschrittenProblem 3: Metastore connection limit exceeded

Befehle, die auf dem Cluster ausgeführt werden, schlagen mit der folgenden Stapel Überwachung in den Treiber Protokollen fehl:Commands run on the cluster fail with the following stack trace in the driver logs:

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)

UrsacheCause

Die metastore-Konfiguration lässt nur 100-Verbindungen zu.The metastore configuration allows only 100 connections. Wenn das Verbindungs Limit erreicht ist, sind keine neuen Verbindungen zulässig, und Befehle können mit diesem Fehler nicht mehr ausgeführt werden.When the connection limit is reached, new connections are not allowed, and commands fail with this error. Jeder Cluster im Azure Databricks Arbeitsbereich stellt eine Verbindung mit dem metastore her.Each cluster in the Azure Databricks workspace establishes a connection with the metastore. Wenn Sie über eine große Anzahl von Clustern verfügen, die ausgeführt werden, kann dieses Problem auftreten.If you have a large number of clusters running, then this issue can occur. Außerdem können falsche Konfigurationen zu einem Verbindungsfehler führen, wodurch die Anzahl der Verbindungen erhöht wird, bis der Grenzwert erreicht ist.Additionally, incorrect configurations can cause a connection leak, causing the number of connections to keep increasing until the limit is reached.

LösungSolution

Beheben Sie das Problem mit einer der folgenden Aktionen:Correct the problem with one of the following actions:

  • Wenn Sie einen externen metastore verwenden und eine große Anzahl von Clustern ausgeführt wird, erhöhen Sie das Verbindungs Limit für Ihren externen metastore.If you are using an external metastore and you have a large number of clusters running, then increase the connection limit on your external metastore.
  • Wenn Sie keinen externen metastore verwenden, stellen Sie sicher, dass in Ihrem Cluster keine benutzerdefinierten Hive-metastore Konfigurationen vorhanden sind.If you are not using an external metastore, ensure that you do not have any custom Hive metastore configurations on your cluster. Wenn Sie den von Azure Databricks bereitgestellten metastore verwenden, sollten Sie die Standardkonfigurationen im Cluster für die Hive-metastore verwenden.When using the metastore provided by Azure Databricks, you should use the default configurations on the cluster for the Hive metastore.
  • Wenn Sie die Standardkonfiguration verwenden und dieses Problem weiterhin auftritt, wenden Sie sich an Azure Databricks Support.If you are using the default configuration and still encounter this issue, contact Azure Databricks Support. Abhängig von der Konfiguration Ihres Azure Databricks Arbeitsbereichs kann es möglich sein, die Anzahl der zulässigen Verbindungen mit dem internen metastore zu erhöhen.Depending on the configuration of your Azure Databricks workspace, it might be possible to increase the number of connections allowed to the internal metastore.

Problem 4: Tabellen Aktionen schlagen fehl, da die Spalte zu viele Metadaten aufweist.Problem 4: Table actions fail because column has too much metadata

Wenn die Menge der Metadaten für eine einzelne Spalte 4000 Zeichen überschreitet, schlagen Tabellen Aktionen mit einem Fehler wie dem folgenden fehl:When the quantity of metadata for a single column exceeds 4000 characters, table actions fail with an error like this:

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_

UrsacheCause

Dies ist ein Fehler, der in der Hive-metastore-Version 2.3.0 (Hive-12274) korrigiert wurde.This is a bug that was fixed in Hive Metastore version 2.3.0 (HIVE-12274). Azure Databricks verwendet eine frühere Version des Hive-metastores (Version 0,13). Daher tritt dieser Fehler auf, wenn zu viele Metadaten für eine Spalte vorhanden sind, z. b. ein importiertes JSON-Schema.Azure Databricks uses an earlier version of Hive Metastore (version 0.13), so this bug occurs when there is too much metadata for a column, such as an imported JSON schema.

LösungSolution

Um dieses Problem zu umgehen, richten Sie eine externe Hive-metastore ein, die Version 2.3.0 oder höher verwendet.As a workaround, set up an external Hive metastore that uses version 2.3.0 or above. Löschen Sie dann die vorhandene Tabelle mit dem folgenden Befehl:Then delete the existing table with the following command:

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