Verschillende problemen met Apache Hive metastore oplossen

Probleem 1: Externe metastore-tabellen zijn niet beschikbaar

Wanneer u de logboeken van het stuurprogramma inspecteert, ziet u een stack-trace met de fout 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)

Oorzaak

De database is aanwezig, maar er zijn geen metastore-tabellen.

Oplossing

Als de externe metastoreversie Hive 2.0 of hoger is, gebruikt u het hive-schemahulpprogramma om de metastore-tabellen te maken. Voor versies onder Hive 2.0 voegt u de metastore-tabellen met de volgende configuraties toe aan uw bestaande init-script:

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

U kunt deze configuraties ook rechtstreeks in de Apache Spark-configuratie instellen:

datanucleus.autoCreateSchema true
datanucleus.fixedDatastore false

Probleem 2: Verificatie van Hive-metastore is mislukt

Wanneer u de logboeken van het stuurprogramma inspecteert, ziet u een stack-trace die een fout bevat die er als volgt uit ziet:

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)

Oorzaak

De VERSION tabel in de metastore is leeg.

Oplossing

Voer een van de volgende handelingen uit:

  • Vul de tabel VERSION met de juiste versiewaarden met behulp van een INSERT query.

  • Stel de volgende configuraties in om de metastore-verificatie in de Spark-configuratie van het cluster uit te schakelen:

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

Probleem 3: Metastore-verbindingslimiet overschreden

Opdrachten die op het cluster worden uitgevoerd, mislukken met de volgende stack-trace in de stuurprogrammalogboeken:

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)

Oorzaak

De metastore-configuratie staat slechts 100 verbindingen toe. Wanneer de verbindingslimiet is bereikt, zijn nieuwe verbindingen niet toegestaan en mislukken opdrachten met deze fout. Elk cluster in de Azure Databricks maakt een verbinding met de metastore. Als er een groot aantal clusters wordt uitgevoerd, kan dit probleem optreden. Bovendien kunnen onjuiste configuraties een verbindingslek veroorzaken, waardoor het aantal verbindingen blijft toenemen totdat de limiet is bereikt.

Oplossing

Corrigeert het probleem met een van de volgende acties:

  • Als u een externe metastore gebruikt en u een groot aantal clusters actief hebt, verhoogt u de verbindingslimiet voor uw externe metastore.
  • Als u geen externe metastore gebruikt, moet u ervoor zorgen dat uw cluster geen aangepaste Hive-metastoreconfiguraties heeft. Wanneer u de metastore van Azure Databricks gebruikt, moet u de standaardconfiguraties op het cluster gebruiken voor de Hive-metastore.
  • Als u de standaardconfiguratie gebruikt en dit probleem zich nog steeds voordeed, neem dan contact op met Azure Databricks ondersteuning. Afhankelijk van de configuratie van uw Azure Databricks werkruimte, is het mogelijk om het aantal verbindingen naar de interne metastore te verhogen.

Probleem 4: Tabelacties mislukken omdat kolom te veel metagegevens bevat

Wanneer het aantal metagegevens voor één kolom groter is dan 4000 tekens, mislukken tabelacties met een fout als deze:

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_

Oorzaak

Dit is een fout die is opgelost in Hive Metastore versie 2.3.0(HIVE-12274). Azure Databricks maakt gebruik van een eerdere versie van Hive Metastore (versie 0.13), dus deze fout treedt op wanneer er te veel metagegevens zijn voor een kolom, zoals een geïmporteerd JSON-schema.

Oplossing

Als tijdelijke oplossing stelt u een externe Hive-metastore in die gebruikmaakt van versie 2.3.0 of hoger. Verwijder vervolgens de bestaande tabel met de volgende opdracht:

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