Autoskalning går långsamt med ett externt metaarkiv

Problem

Du har ett externt metaarkiv konfigurerat i klustret och autoskalning är aktiverat, men klustret är inte autoskalning effektivt.

Orsak

Du kopierar metaarkiv-jar-filer till varje utförare när de bara behövs i drivrutinen.

Det tar tid att initiera och köra jar-filer varje gång en ny utförare körs. Därför tar det längre tid att lägga till fler utförare än det borde.

Lösning

Du bör konfigurera klustret så att metaarkiv-jar-filer endast kopieras till drivrutinen.

Alternativ 1: Använd ett init-skript för att kopiera jar-filer för metaarkivet.

  1. Skapa ett kluster med spark.sql.hive.metastore.jars inställt maven på och som matchar versionen av ditt spark.sql.hive.metastore.version metaarkiv.

  2. Starta klustret och sök i drivrutinsloggarna efter en rad som innehåller Downloaded metastore jars to .

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

    <path> är platsen för de nedladdade jar-filarna i drivrutinsnoden i klustret.

  3. Kopiera jar-filerna till en DBFS-plats.

    cp -r <path> /dbfs/ExternalMetaStore_jar_location
    
  4. Skapa init-skriptet.

    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. Installera det init-skript som du nyss skapade som ett init-skript med klusteromfång.

    Du behöver den fullständiga sökvägen till platsen för skriptet ( dbfs:/databricks/<init-script-folder>/external-metastore-jars-to-driver.sh ).

  6. Starta om klustret.

Alternativ 2: Använd Apache Spark för att kopiera jar-filer för metaarkiv till drivrutinen.

  • Ange följande inställningar i Din Spark-konfiguration:

    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/*
    
  • Källsökvägen kan vara extern monterad lagring eller DBFS.

  • Metaarkivkonfigurationen kan tillämpas globalt på arbetsytan med hjälp av klusterprinciper.

Alternativ 3: Skapa en anpassad Azure Databricks container med förinstallerade jars.