Autoskalowanie jest powolne w przypadku zewnętrznego magazynu metadanych

Problem

W klastrze skonfigurowano zewnętrzny magazyn metadanych, a skalowanie automatyczne jest włączone, ale klaster nie jest efektywnie skalowany automatycznie.

Przyczyna

Pliki jar magazynu metadanych są kopiowane do każdego wykonawcy, gdy są potrzebne tylko w sterowniku.

Inicjowanie i uruchamianie plików jar za każdym razem, gdy uruchamia się nowy wykonawca, zajmuje trochę czasu. W związku z tym dodawanie większej liczby funkcji wykonawczych trwa dłużej niż powinno.

Rozwiązanie

Należy skonfigurować klaster tak, aby pliki jar magazynu metadanych zostały skopiowane tylko do sterownika.

Opcja 1: Użyj skryptu init, aby skopiować jar magazynu metadanych.

  1. Utwórz klaster z spark.sql.hive.metastore.jars ustawionymi maven na i , spark.sql.hive.metastore.version aby dopasować wersję magazynu metadanych.

  2. Uruchom klaster i wyszukaj w dziennikach sterowników wiersz, który zawiera Downloaded metastore jars to .

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

    <path> to lokalizacja pobranych plików jar w węźle sterownika klastra.

  3. Skopiuj pliki jar do lokalizacji dbfs.

    cp -r <path> /dbfs/ExternalMetaStore_jar_location
    
  4. Utwórz skrypt 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. Zainstaluj właśnie utworzony skrypt init jako skrypt inito zakresie klastra .

    Potrzebna będzie pełna ścieżka do lokalizacji skryptu ( dbfs:/databricks/<init-script-folder>/external-metastore-jars-to-driver.sh ).

  6. Uruchom ponownie klaster.

Opcja 2: Użyj ustawień Apache Spark, aby skopiować pliki JAR magazynu metadanych do sterownika.

  • Wprowadź następujące ustawienia w konfiguracji platformy 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/*
    
  • Ścieżką źródłową może być zainstalowany zewnętrznie magazyn lub system plików DBFS.

  • Konfigurację magazynu metadanych można zastosować globalnie w obszarze roboczym przy użyciu zasad klastra.

Opcja 3: Skompilowanie niestandardowego Azure Databricks za pomocą wstępnie załadowanych jars.