Automatisch schalen is traag met een externe metastore

Probleem

U hebt een externe metastore geconfigureerd in uw cluster en automatisch schalen is ingeschakeld, maar het cluster wordt niet effectief automatisch geschalen.

Oorzaak

U kopieert de metastore-jars naar elke uitvoerder, wanneer deze alleen nodig zijn in het stuurprogramma.

Het kost tijd om de JAR's te initialiseren en uit te voeren telkens als er een nieuwe uitvoerder wordt aan het werk. Als gevolg hiervan duurt het toevoegen van meer uitvoerders langer dan nodig is.

Oplossing

U moet uw cluster zo configureren dat de jar-gegevens van de metastore alleen naar het stuurprogramma worden gekopieerd.

Optie 1: Gebruik een init-script om de metastore-jars te kopiƫren.

  1. Maak een cluster met spark.sql.hive.metastore.jars ingesteld op en om overeen te komen met de versie van uw maven spark.sql.hive.metastore.version metastore.

  2. Start het cluster en zoek in de logboeken van het stuurprogramma naar een regel met Downloaded metastore jars to .

    17/11/18 22:41:19 INFO IsolatedClientLoader: Downloaded metastore jars to <path>
    

    <path> is de locatie van de gedownloade JAR's in het stuurprogrammaknooppunt van het cluster.

  3. Kopieer de JAR-bestanden naar een DBFS-locatie.

    cp -r <path> /dbfs/ExternalMetaStore_jar_location
    
  4. Maak het init-script.

    dbutils.fs.put("dbfs:/databricks/<init-script-folder>/external-metastore-jars-to-driver.sh",
    """
    #!/bin/bash
    if [[ $DB_IS_DRIVER = "TRUE" ]]; then
    mkdir -p /databricks/metastorejars/
    cp -r /dbfs/ExternalMetaStore_jar_location/* /databricks/metastorejars/
    fi""", True)
    
  5. Installeer het init-script dat u zojuist hebt gemaakt als een init-script met clusterbereik.

    U hebt het volledige pad nodig naar de locatie van het script ( dbfs:/databricks/<init-script-folder>/external-metastore-jars-to-driver.sh ).

  6. Start het cluster opnieuw op.

Optie 2: Gebruik de Apache Spark om de metastore jars naar het stuurprogramma te kopiƫren.

  • Voer de volgende instellingen in uw Spark-configuratie in:

    spark.hadoop.javax.jdo.option.ConnectionURL jdbc:mysql://<mysql-host>:<mysql-port>/<metastore-db>
    spark.hadoop.javax.jdo.option.ConnectionDriverName <driver>
    spark.hadoop.javax.jdo.option.ConnectionUserName <mysql-username>
    spark.hadoop.javax.jdo.option.ConnectionPassword <mysql-password>
    spark.sql.hive.metastore.version <hive-version>
    spark.sql.hive.metastore.jars /dbfs/metastore/jars/*
    
  • Het bronpad kan externe, aaneengeste opslag of DBFS zijn.

  • De metastore-configuratie kan globaal worden toegepast in de werkruimte met behulp van clusterbeleid.

Optie 3: Bouw een aangepaste Azure Databricks container met vooraf geladen JAR's.