Skripty pro inicializaci uzlů clusteru

Iniťovací skript je skript prostředí, který se spustí při spuštění každého uzlu clusteru před spuštěním Apache Spark nebo pracovního procesu JVM.

Mezi příklady úloh prováděných initimativními skripty patří:

  • Nainstalujte balíčky a knihovny, které nejsou součástí Databricks Runtime. Pokud chcete nainstalovat balíčky Pythonu, použijte binární soubor Azure Databricks umístěný v , abyste zajistili, že se balíčky Pythonu nainstalují do virtuálního prostředí Azure Databricks Pythonu, a ne do systémového prostředí pip /databricks/python/bin/pip Pythonu. Například, /databricks/python/bin/pip install <package-name>.
  • Ve speciálních případech upravte systémové cesty ke třídámprostředí JVM.
  • Nastavte systémové vlastnosti a proměnné prostředí používané prostředím JVM.
  • Úprava parametrů konfigurace Sparku

Typy inicializačních skriptů

Azure Databricks podporuje dva druhy initimativních skriptů: clusterové a globální.

  • Vymezený clusterem: Spuštění na každém clusteru nakonfigurovaného pomocí skriptu. Jedná se o doporučený způsob spuštění initimativního skriptu.
  • Globální: Běží na každém clusteru v pracovním prostoru. Můžou vám pomoct vynutit konzistentní konfigurace clusteru v celém pracovním prostoru. Používejte je pečlivě, protože mohou způsobovat neočekávané dopady, jako jsou konflikty knihoven. Globální initimativní skripty mohou vytvářet jenom uživatelé s rolí správce. Globální initimativní skripty se nespouštěly na modelu obsluhujícím clustery.

Poznámka

Existují dva druhy initimativních skriptů, které jsou zastaralé. Initimativní skripty těchto typů byste měli migrovat na výše uvedené skripty:

  • Název clusteru: Spusťte v clusteru se stejným názvem jako skript. Initimativní skripty pojmenované podle clusteru jsou velmi snadné (bez upozornění ignorují selhání) a pokouší se pokračovat v procesu spuštění clusteru. Místo toho by se měly použít initimativní skripty v rámci clusteru a jsou úplnou náhradou.
  • Starší verze globální: Běží na každém clusteru. Jsou méně bezpečné než nové rozhraní globálních initeových skriptů, bezobslužně ignorují selhání a nemohou odkazovat na proměnné prostředí. Stávající starší verze globálních initimativních skriptů byste měli migrovat do nové globální architektury initimátoru. Viz Migrace ze starší verze na nové globální initimativní skripty.

Kdykoli změníte jakýkoli typ initimativního skriptu, musíte restartovat všechny clustery ovlivněné tímto skriptem.

Pořadí provádění initimátoru skriptu

Pořadí provádění initimativních skriptů je následující:

  1. Globální starší verze (zastaralé)
  2. Název clusteru (zastaralé)
  3. Globální (nové)
  4. Vymezené clustery

Proměnné prostředí

Clusterové a globální initimativní skripty (nové generace) podporují následující proměnné prostředí:

  • DB_CLUSTER_ID: ID clusteru, na kterém je skript spuštěný. Viz Rozhraní API pro clustery.
  • DB_CONTAINER_IP: privátní IP adresa kontejneru, ve kterém běží Spark. Initimativní skript se spustí uvnitř tohoto kontejneru. Viz SparkNode.
  • DB_IS_DRIVER: určuje, jestli je skript spuštěný na uzlu ovladače.
  • DB_DRIVER_IP: IP adresa uzlu ovladače.
  • DB_INSTANCE_TYPE: typ instance hostitelského virtuálního počítače.
  • DB_CLUSTER_NAME: Název clusteru, ve které se skript spouští.
  • DB_PYTHON_VERSION: verze Pythonu použitá v clusteru. Viz Python verze.
  • DB_IS_JOB_CLUSTER: určuje, jestli se cluster vytvořil pro spuštění úlohy. Viz Vytvoření úlohy.
  • SPARKPASSWORD: cesta k tajnému klíči.

Pokud například chcete spustit část skriptu pouze na uzlu ovladače, můžete napsat skript, jako je:

echo $DB_IS_DRIVER
if [[ $DB_IS_DRIVER = "TRUE" ]]; then
  <run this part only on driver>
else
  <run this part only on workers>
fi
<run this part on both driver and workers>

protokolování

Události spuštění a dokončení initinárního skriptu se zachycuje v protokolech událostí clusteru. Podrobnosti se zachycuje v protokolech clusteru. Události vytvoření, úpravy a odstranění globálního initinárního skriptu se také zachycuje v diagnostických protokolech na úrovni účtu.

Události initimátoru skriptu

Protokoly událostí clusteru zachycuje dvě události iniťovacího skriptu: a , které indikující, které skripty jsou naplánované na spuštění a INIT_SCRIPTS_STARTED INIT_SCRIPTS_FINISHED které se úspěšně dokončily. INIT_SCRIPTS_FINISHED zachycuje také dobu trvání provádění.

Globální initinní skripty jsou v podrobnostech události protokolu označeny klíčem a initimativní skripty v rámci clusteru jsou "global" označeny klíčem "cluster" .

Poznámka

Protokoly událostí clusteru nehlásí události initimátoru pro každý uzel clusteru. Je vybraný jenom jeden uzel, který je bude všechny reprezentovat.

Protokoly initinárních skriptů

Pokud je pro cluster nakonfigurované doručování protokolů clusteru, zapisou se do . /<cluster-log-path>/<cluster-id>/init_scripts Protokoly pro každý kontejner v clusteru se zapisou do podadresáře s názvem init_scripts/<cluster_id>_<container_ip> . Pokud je například nastavená na , cesta k cluster-log-path cluster-logs protokolům pro konkrétní kontejner by byla: dbfs:/cluster-logs/<cluster-id>/init_scripts/<cluster_id>_<container_ip> .

Pokud je cluster nakonfigurovaný tak, aby zapisoval protokoly do DBFS, můžete je zobrazit pomocí nástroje systému souborů (dbutils.fs) nebo rozhraní příkazového řádku DBFS. Pokud je například ID clusteru 1001-234039-abcde739 :

dbfs ls dbfs:/cluster-logs/1001-234039-abcde739/init_scripts
1001-234039-abcde739_10_97_225_166
1001-234039-abcde739_10_97_231_88
1001-234039-abcde739_10_97_244_199
dbfs ls dbfs:/cluster-logs/1001-234039-abcde739/init_scripts/1001-234039-abcde739_10_97_225_166
<timestamp>_<log-id>_<init-script-name>.sh.stderr.log
<timestamp>_<log-id>_<init-script-name>.sh.stdout.log

Pokud není nakonfigurované doručování protokolů clusteru, protokoly se zapisou do /databricks/init_scripts . K zobrazení a zobrazení protokolů můžete v poznámkovém bloku použít standardní příkazy prostředí:

%sh
ls /databricks/init_scripts/
cat /databricks/init_scripts/<timestamp>_<log-id>_<init-script-name>.sh.stdout.log

Pokaždé, když se cluster spustí, zapíše protokol do složky protokolu ini tovacího skriptu.

Důležité

Každý uživatel, který vytvoří cluster a povolí doručování protokolů clusteru, může zobrazit a stderr stdout výstup z globálních initimativních skriptů. Měli byste zajistit, aby vaše globální initimativní skripty nevy výstupem žádných citlivých informací.

Diagnostické protokoly

Azure Databricks protokolování zachycuje události vytvoření, úpravy a odstranění globálního iniťovacího skriptu v rámci typu události globalInitScripts . Viz Diagnostické protokolování v Azure Databricks.

Inicializační skripty omezené na cluster

Initimativní skripty vymezené clusterem jsou initimativní skripty definované v konfiguraci clusteru. Initimativní skripty vymezené clusterem se vztahují na clustery, které vytvoříte, i na clustery vytvořené ke spouštění úloh. Vzhledem k tomu, že skripty jsou součástí konfigurace clusteru, umožňuje řízení přístupu ke clusteru řídit, kdo může skripty změnit.

Inividovací skripty v rámci clusteru můžete nakonfigurovat pomocí uživatelského rozhraní, rozhraní příkazového řádku a vyvoláním rozhraní API clusterů. Tato část se zaměřuje na provádění těchto úloh pomocí uživatelského rozhraní. Další metody najdete v tématu Rozhraní příkazového řádku Databricks a rozhraní API clusterů.

Můžete přidat libovolný počet skriptů a skripty se spouštěly postupně v zadaném pořadí.

Pokud initimativní skript v rámci clusteru vrátí nenulový ukončovací kód, spuštění clusteru selže. Potíže s initimativními skripty v rámci clusteru můžete řešit tak, že nakonfigurujete doručování protokolů clusteru a prozkoumáte protokol initimátorových skriptů.

Umístění initimativních skriptů v rámci clusteru

Initimativní skripty můžete umístit do adresáře DBFS nebo ADLS, ke které má přístup cluster. Initimativní skripty uzlů clusteru v DBFS musí být uložené v kořenovém adresáři DBFS. Azure Databricks nepodporuje ukládání initimativních skriptů do adresáře DBFS vytvořeného připojením úložiště objektů.

Příklady initimativních skriptů v oboru clusteru

V této části jsou uvedeny dva příklady initimových skriptů.

Příklad: Instalace ovladače PostgreSQL JDBC

Následující fragmenty kódu se spustí v poznámkovém bloku Pythonu a vytvoří initimativní skript, který nainstaluje ovladač PostgreSQL JDBC.

  1. Vytvořte adresář DBFS, do kterého chcete initimativní skript uložit. Tento příklad používá dbfs:/databricks/scripts.

    dbutils.fs.mkdirs("dbfs:/databricks/scripts/")
    
  2. V tomto adresáři postgresql-install.sh vytvořte skript s názvem :

    dbutils.fs.put("/databricks/scripts/postgresql-install.sh","""
    #!/bin/bash
    wget --quiet -O /mnt/driver-daemon/jars/postgresql-42.2.2.jar https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.2/postgresql-42.2.2.jar""", True)
    
  3. Zkontrolujte, že skript existuje.

    display(dbutils.fs.ls("dbfs:/databricks/scripts/postgresql-install.sh"))
    

Případně můžete initimativní skript vytvořit postgresql-install.sh místně:

#!/bin/bash
wget --quiet -O /mnt/driver-daemon/jars/postgresql-42.2.2.jar https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.2/postgresql-42.2.2.jar

a zkopírujte ho do dbfs:/databricks/scripts souboru pomocí rozhraní příkazového řádku SYSTÉMU souborů DBFS:

dbfs cp postgresql-install.sh dbfs:/databricks/scripts/postgresql-install.sh

Příklad: Instalace knihoven Pythonu pomocí conda

V Databricks Runtime ML nainstalujete balíčky Pythonu pomocí správce balíčků Conda. Pokud chcete při inicializaci clusteru nainstalovat knihovnu Pythonu, můžete použít skript, jako je tento:

#!/bin/bash
set -ex
/databricks/python/bin/python -V
. /databricks/conda/etc/profile.d/conda.sh
conda activate /databricks/python
conda install -y astropy

Poznámka

Další způsoby instalace balíčků Pythonu v clusteru najdete v tématu Knihovny.

Konfigurace initimativního skriptu s oborem clusteru

Cluster můžete nakonfigurovat tak, aby spouštěl initimativní skript pomocí uživatelského rozhraní nebo rozhraní API.

Důležité

  • Skript musí existovat v nakonfigurovaných umístěních. Pokud skript neexistuje, spuštění clusteru nebo automatické škálování clusteru se nezdaří.
  • Initimativní skript nesmí být větší než 64 kB. Pokud skript překročí tuto velikost, cluster se nepodaří spustit a v protokolu clusteru se zobrazí zpráva o selhání.

Konfigurace initimativního skriptu s oborem clusteru pomocí uživatelského rozhraní

Pokud chcete použít stránku konfigurace clusteru ke konfiguraci clusteru pro spuštění initimativního skriptu:

  1. Na stránce konfigurace clusteru klikněte na přepínač Upřesnit možnosti.

  2. V dolní části stránky klikněte na kartu Initimální skripty.

    Karta Initimativní skripty

  3. V rozevíracím seznamu Cíl vyberte typ cíle. V příkladu v předchozí části je cílem DBFS .

  4. Zadejte cestu k initimativnímu skriptu. V příkladu v předchozí části je cesta dbfs:/databricks/scripts/postgresql-install.sh . Cesta musí začínat dbfs:/ na .

  5. Klikněte na Přidat.

Pokud chcete z konfigurace clusteru odebrat skript, klikněte na ikonu Ikona Odstranit napravo od skriptu. Po potvrzení odstranění se zobrazí výzva k restartování clusteru. Volitelně můžete soubor skriptu odstranit z umístění, do které jste ho nahráli.

Konfigurace initimativního skriptu s oborem clusteru pomocí souboru DBFS REST API

Pokud chcete pomocí rozhraní API pro clustery nakonfigurovat cluster s ID pro spuštění initimativního skriptu v předchozí 1202-211320-brick1 části, spusťte následující příkaz:

curl -n -X POST -H 'Content-Type: application/json' -d '{
  "cluster_id": "1202-211320-brick1",
  "num_workers": 1,
  "spark_version": "7.3.x-scala2.12",
  "node_type_id": "Standard_D3_v2",
  "cluster_log_conf": {
    "dbfs" : {
      "destination": "dbfs:/cluster-logs"
    }
  },
  "init_scripts": [ {
    "dbfs": {
      "destination": "dbfs:/databricks/scripts/postgresql-install.sh"
    }
  } ]
}' https://<databricks-instance>/api/2.0/clusters/edit

Globální inicializační skripty

Globální initimátor se spouští v každém clusteru vytvořeném ve vašem pracovním prostoru. Globální initimativní skripty jsou užitečné, když chcete vynucovat konfigurace knihoven pro celou organizaci nebo obrazovky zabezpečení. Globální initimativní skripty mohou vytvářet jenom správci. Můžete je vytvořit pomocí uživatelského rozhraní nebo REST API.

Důležité

Globální initimativní skripty používejte opatrně:

  • Knihovny můžete snadno přidávat nebo provádět další úpravy, které mají neočekávané dopady. Pokud je to možné, používejte místo toho initimní skripty vymezené clusterem.
  • Každý uživatel, který vytvoří cluster a povolí doručování protokolů clusteru, může zobrazit a stderr stdout výstup z globálních initimativních skriptů. Měli byste zajistit, aby vaše globální initimativní skripty nevy výstupem žádných citlivých informací.

Globální initimativní skripty můžete řešit tak, že nakonfigurujete doručování protokolů clusteru a prozkoumáte protokol initimátorových skriptů.

Přidání globálního initimátoru pomocí uživatelského rozhraní

Konfigurace globálních initimativních skriptů pomocí konzoly pro správu:

  1. Přejděte do konzoly pro správu a klikněte na kartu Globální initimativní skripty.

    Karta Globální initimativní skripty

  2. Klikněte na tlačítko +Přidat.

  3. Pojmenuje skript a zadá ho zadáním, vložením nebo přetažením textového souboru do pole Skript.

    Přidání globálního initimátoru skriptu

    Poznámka

    Initimativní skript nesmí být větší než 64 kB. Pokud skript tuto velikost překročí, zobrazí se při pokusu o uložení chybová zpráva.

  4. Pokud máte pro svůj pracovní prostor nakonfigurovaný více než jeden globální initimátor, nastavte pořadí, ve kterém se nový skript spustí.

  5. Pokud chcete, aby byl skript po uložení povolený pro všechny nové a restartované clustery, přepněte přepínač Povoleno.

    Důležité

    Aby se změny globálních inimentových skriptů projeví, včetně změn pořadí spuštění, názvu a stavu povolení, musíte restartovat spuštěné clustery.

  6. Klikněte na Přidat.

Úprava globálního initimátoru pomocí uživatelského rozhraní

  1. Přejděte do konzoly pro správu a klikněte na kartu Globální initimativní skripty.
  2. Klikněte na skript.
  3. Upravte skript.
  4. Klikněte na Confirm (Potvrdit).

Konfigurace globálního initimátoru pomocí rozhraní API

Správci mohou přidat, odstranit, změnit pořadí a získat informace o globálních initimativních skriptech ve vašem pracovním prostoru pomocí rozhraní API globálních initimativních skriptů.

Migrace ze starší verze na nové globální initimativní skripty

Pokud se Azure Databricks váš pracovní prostor spustil před srpnem 2020, můžete mít stále starší globální initimativní skripty. Měli byste je migrovat do nové globální architektury inividovaných skriptů, abyste využili výhod funkcí zabezpečení, konzistence a viditelnosti, které jsou součástí nové architektury skriptů.

  1. Zkopírujte stávající starší verze globálních initimativních skriptů a přidejte je do nové globální architektury initimátoru pomocí uživatelského rozhraní nebo REST API.

    Nechte je zakázané, dokud nedokončíte další krok.

  2. Zakažte všechny starší verze globálních initimativních skriptů.

    V konzole pro správu přejděte na kartu Globální initimativní skripty a vypněte přepínač Starší verze globálních initimativních skriptů.

    Zákaz starších globálních initimativních skriptů

  3. Povolte nové globální initimativní skripty.

    Na kartě Globální initimativní skripty přepněte přepínač Povoleno pro každý initimativní skript, který chcete povolit.

    Povolení globálních skriptů

  4. Restartujte všechny clustery.

    • Starší skripty se nebudou spouštět na nových uzlech přidaných během automatizovaného škálování spuštěných clusterů. Na těchto nových uzlech se nebudou spouštět ani nové globální initimativní skripty. Je nutné restartovat všechny clustery, abyste zajistili, že se na nich spustí nové skripty a že se žádné existující clustery nepokusí přidat nové uzly, které na nich vůbec nejsou spuštěné globální skripty.
    • Ne idempotentní skripty může být potřeba upravit při migraci na novou globální rozhraní initimativních skriptů a zakázání starších skriptů.