Så här felsöker du flera Apache Hive metaarkiv-problem

Problem 1: externa metaarkiv-tabeller är inte tillgängliga

När du inspekterar driv rutins loggarna visas en stack spårning som innehåller felet 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)

Orsak

Databasen finns, men det finns inga metaarkiv-tabeller.

Lösning

Om den externa metaarkiv-versionen är Hive 2,0 eller senare, använder du Hive schema verktyget för att skapa metaarkiv-tabellerna. För versioner under Hive 2,0 lägger du till metaarkiv-tabellerna med följande konfigurationer i det befintliga init-skriptet:

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

Du kan också ställa in dessa konfigurationer i Apache Spark-konfigurationen direkt:

datanucleus.autoCreateSchema true
datanucleus.fixedDatastore false

Problem 2: det gick inte att verifiera Hive-metaarkiv

När du inspekterar driv rutins loggarna visas en stack spårning som innehåller ett fel som liknar följande:

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)

Orsak

VERSIONTabellen i metaarkiv är tom.

Lösning

Gör något av följande:

  • Fyll i VERSION tabellen med rätt versions värden med hjälp av en INSERT fråga.

  • Ange följande konfigurationer för att inaktivera metaarkiv-verifieringen i Spark-konfigurationen för klustret:

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

Problem 3: anslutnings gränsen för Metaarkiv har överskridits

Kommandon som körs i klustret slutar fungera med följande stack spårning i driv rutins loggarna:

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)

Orsak

Metaarkiv-konfigurationen tillåter endast 100 anslutningar. När anslutnings gränsen nås tillåts inte nya anslutningar och kommandon fungerar inte med det här felet. Varje kluster i arbets ytan Azure Databricks upprättar en anslutning med metaarkiv. Det här problemet kan inträffa om du har ett stort antal kluster som körs. Dessutom kan felaktiga konfigurationer orsaka en anslutnings läcka, vilket gör att antalet anslutningar håller på att öka tills gränsen har uppnåtts.

Lösning

Åtgärda problemet med någon av följande åtgärder:

  • Om du använder en extern metaarkiv och har ett stort antal kluster som kör, ökar du anslutnings gränsen för den externa metaarkiv.
  • Om du inte använder en extern metaarkiv, se till att du inte har några anpassade Hive-metaarkiv-konfigurationer i klustret. När du använder metaarkiv som tillhandahålls av Azure Databricks bör du använda standardkonfigurationerna i klustret för Hive-metaarkiv.
  • Kontakta Azure Databricks support om du använder standard konfigurationen och fortfarande stöter på problemet. Beroende på konfigurationen av din Azure Databricks-arbetsyta kan det vara möjligt att öka antalet anslutningar som tillåts till den interna metaarkiv.

Problem 4: tabell åtgärder misslyckades eftersom kolumnen innehåller för många metadata

När antalet metadata för en enskild kolumn överskrider 4000 tecken, så kan tabell åtgärder inte utföras med följande fel:

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_

Orsak

Detta är ett fel som korrigerades i Hive Metaarkiv version 2.3.0 (Hive-12274). Azure Databricks använder en tidigare version av Hive-Metaarkiv (version 0,13), så den här buggen inträffar när det finns för många metadata för en kolumn, till exempel ett importerat JSON-schema.

Lösning

Som en lösning kan du konfigurera en extern Hive-metaarkiv som använder version 2.3.0 eller senare. Ta sedan bort den befintliga tabellen med följande kommando:

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