La mise à l’échelle automatique est lente avec un metastore externe

Problème

Une banque externe est configurée sur votre cluster et la mise à l’échelle automatique est activée, mais le cluster n’est pas mis à l’échelle de manière efficace.

Cause

Vous copiez les fichiers jar du magasin sur chaque exécuteur, lorsqu’ils sont uniquement nécessaires dans le pilote.

Il faut du temps pour initialiser et exécuter les fichiers jar chaque fois qu’un nouvel exécuteur tourne. Par conséquent, l’ajout de plusieurs exécuteurs prend plus de temps qu’il ne le devrait.

Solution

Vous devez configurer votre cluster de façon à ce que les fichiers jar de l’emplacement de stockage soient copiés uniquement vers le pilote.

Option 1 : Utilisez un script init pour copier les fichiers jar du magasin.

  1. Créez un cluster avec spark.sql.hive.metastore.jars défini sur maven et spark.sql.hive.metastore.version pour qu’il corresponde à la version de votre magasin.

  2. Démarrez le cluster et recherchez dans les journaux de pilotes une ligne qui comprend Downloaded metastore jars to .

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

    <path> emplacement des fichiers jar téléchargés dans le nœud du pilote du cluster.

  3. Copiez les fichiers jar sur un emplacement DBFS.

    cp -r <path> /dbfs/ExternalMetaStore_jar_location
    
  4. Créez le script init.

    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. Installez le script init que vous venez de créer en tant que script init de niveau de cluster.

    Vous aurez besoin du chemin d’accès complet à l’emplacement du script ( dbfs:/databricks/<init-script-folder>/external-metastore-jars-to-driver.sh ).

  6. Redémarrez le cluster.

Option 2 : Utilisez les paramètres de configuration de Apache Spark pour copier les fichiers jar du magasin sur le pilote.

  • Entrez les paramètres suivants dans votre configuration Spark:

    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/*
    
  • Le chemin source peut être un stockage monté externe ou un DBFS.

  • La configuration de la mémoire de stockage peut être appliquée globalement dans l’espace de travail à l’aide de stratégies de cluster.

Option 3 : Créez un conteneur de Azure Databricks personnalisé avec des fichiers jar préchargés.