Skripty inicializace uzlů clusteru

Inicializační skript je skript prostředí, který se spouští při spuštění každého uzlu clusteru před spuštěním ovladače Apache Sparku nebo pracovního prostředí JVM.

Mezi příklady úloh provedených inicializačními skripty patří:

  • Nainstalujte balíčky a knihovny, které nejsou součástí modulu Databricks Runtime. Pokud chcete nainstalovat balíčky Pythonu, použijte binární soubor Azure Databricks pip umístěný na /databricks/python/bin/pip místě, aby se balíčky Pythonu nainstalovaly do virtuálního prostředí Azure Databricks Python, a ne do systémového prostředí Pythonu. Například, /databricks/python/bin/pip install <package-name>.
  • Upravte cestu třídy systému JVM ve speciálních případech.
  • Nastavte systémové vlastnosti a proměnné prostředí používané prostředím JVM.
  • Upravte parametry konfigurace Sparku.

Upozornění

Azure Databricks vyhledá rezervované umístění /databricks/init pro starší globální inicializační skripty , které jsou ve výchozím nastavení povolené v nových pracovních prostorech. Databricks doporučuje vyhnout se ukládání inicializačních skriptů v tomto umístění, aby se zabránilo neočekávanému chování.

Typy inicializačních skriptů

Azure Databricks podporuje dva druhy inicializačních skriptů: clusterově vymezený a globální.

  • Obor clusteru: Spusťte na každém clusteru nakonfigurovaného pomocí skriptu. Toto je doporučený způsob spuštění inicializačního skriptu.
  • Globální: Spusťte na každém clusteru v pracovním prostoru. Můžou vám pomoct vynutit konzistentní konfigurace clusteru v rámci vašeho pracovního prostoru. Používejte je pečlivě, protože můžou způsobit neočekávané dopady, jako jsou konflikty knihoven. Globální inicializační skripty můžou vytvářet jenom uživatelé správce. Globální inicializační skripty se nespouštějí v modelech obsluhujících clustery.

Poznámka

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

  • Pojmenovaný cluster: spusťte v clusteru se stejným názvem jako skript. Inicializační skripty s názvem clusteru jsou nejlepší (bezobslužné ignorování selhání) a pokus o pokračování procesu spuštění clusteru. Místo toho by se měly používat inicializační skripty s oborem clusteru a představují úplnou náhradu.
  • Starší globální verze: spusťte na každém clusteru. Jsou méně zabezpečené než nová globální architektura inicializačních skriptů, bezobslužné ignorování selhání a nemohou odkazovat na proměnné prostředí. Stávající globální inicializační skripty byste měli migrovat do nové globální architektury inicializačních skriptů. Viz Migrace ze starší verze do nových globálních inicializačních skriptů.

Kdykoli změníte libovolný typ inicializačního skriptu, musíte restartovat všechny clustery ovlivněné skriptem.

Pořadí provádění inicializačních skriptů

Pořadí provádění inicializačních skriptů je:

  1. Starší verze globální (zastaralé)
  2. Pojmenovaný cluster (zastaralé)
  3. Globální (nové)
  4. Obor clusteru

Proměnné prostředí

Skripty s oborem clusteru a globální inicializační skripty podporují následující proměnné prostředí:

  • DB_CLUSTER_ID: ID clusteru, na kterém je skript spuštěný. Viz rozhraní API clusterů 2.0.
  • DB_CONTAINER_IP: privátní IP adresa kontejneru, ve kterém běží Spark. Inicializační skript se spustí uvnitř tohoto kontejneru. Viz SparkNode.
  • DB_IS_DRIVER: zda 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, na který se skript spouští.
  • DB_IS_JOB_CLUSTER: zda byl cluster vytvořen pro spuštění úlohy. Viz Vytvoření úlohy.

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

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>

Můžete také nakonfigurovat vlastní proměnné prostředí pro cluster a odkazovat na tyto proměnné v inicializačních skriptech.

Použití tajných kódů v proměnných prostředí

Pokud odkazujete na tajný kód, můžete použít libovolný platný název proměnné. Přístup k tajným kódům odkazovaným v proměnných prostředí je určen oprávněními uživatele, který cluster nakonfiguroval. Tajné kódy uložené v proměnných prostředí jsou přístupné všem uživatelům clusteru, ale jsou redactovány z prostého textu v normálním režimu jako tajné kódy odkazované jinde.

Další podrobnosti najdete v tématu Odkaz na tajný kód v proměnné prostředí.

protokolování

Události spuštění a dokončení inicializačního skriptu se zaznamenávají v protokolech událostí clusteru. Podrobnosti se zaznamenávají v protokolech clusteru. Události vytváření, úprav a odstraňování globálního inicializačního skriptu se zaznamenávají také v diagnostických protokolech na úrovni účtu.

Události inicializačních skriptů

Protokoly událostí clusteru zaznamenávají dvě události inicializačních skriptů: INIT_SCRIPTS_STARTED a INIT_SCRIPTS_FINISHEDoznačující, které skripty jsou naplánované pro spuštění a které se úspěšně dokončily. INIT_SCRIPTS_FINISHED zaznamenává také dobu trvání provádění.

Globální inicializační skripty jsou uvedené v podrobnostech událostí protokolu klíčem "global" a inicializačními skripty s oborem clusteru jsou označeny klíčem "cluster".

Poznámka

Protokoly událostí clusteru nepřihlašují události inicializačního skriptu pro každý uzel clusteru; Je vybrán pouze jeden uzel, který je bude představovat všechny.

Protokoly inicializačních skriptů

Pokud je pro cluster nakonfigurované doručování protokolů clusteru , zapisují se protokoly inicializačních skriptů do /<cluster-log-path>/<cluster-id>/init_scripts. Protokoly pro každý kontejner v clusteru se zapisují do podadresáře s názvem init_scripts/<cluster_id>_<container_ip>. Pokud cluster-log-path je například nastavená hodnota cluster-logs, cesta k 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 zobrazit protokoly pomocí nástroje systému souborů (dbutils.fs) nebo rozhraní příkazového řádku DBFS. Pokud je 1001-234039-abcde739například ID clusteru:

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 zapisují do /databricks/init_scripts. Pomocí standardních příkazů prostředí v poznámkovém bloku můžete zobrazit a zobrazit protokoly:

%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 inicializačních skriptů.

Důležité

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

Diagnostické protokoly

Protokolování diagnostiky Azure Databricks zaznamenává globální inicializační skript vytvoření, úpravy a odstranění událostí pod typem globalInitScriptsudálosti . Viz Diagnostické protokolování v Azure Databricks.

Inicializační skripty omezené na cluster

Inicializační skripty s oborem clusteru jsou inicializační skripty definované v konfiguraci clusteru. Inicializační skripty s oborem clusteru se vztahují na clustery, které vytvoříte, a ty, které jste vytvořili pro spouštění úloh. Vzhledem k tomu, že skripty jsou součástí konfigurace clusteru, umožňuje řízení přístupu ke clusteru určit, kdo může skripty změnit.

Inicializační skripty s oborem 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ů 2.0.

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

Pokud inicializační skript s oborem clusteru vrátí nenulový ukončovací kód, spuštění clusteru selže. Inicializační skripty s oborem clusteru můžete řešit konfigurací doručování protokolů clusteru a zkoumáním protokolu inicializačních skriptů.

Umístění inicializačních skriptů v oboru clusteru

Inicializační skripty můžete umístit do adresáře DBFS nebo ADLS přístupného clusterem. Inicializační skripty uzlů clusteru v DBFS musí být uloženy v kořenovém adresáři DBFS. Azure Databricks nepodporuje ukládání inicializačních skriptů do adresáře DBFS vytvořeného připojením úložiště objektů.

Příklad inicializačních skriptů s oborem clusteru

V této části jsou uvedeny dva příklady inicializační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ří inicializační skript, který nainstaluje ovladač PostgreSQL JDBC.

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

    dbutils.fs.mkdirs("dbfs:/databricks/scripts/")
    
  2. Vytvořte skript s názvem postgresql-install.sh v daném adresáři:

    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, jestli skript existuje.

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

Případně můžete inicializační skript postgresql-install.sh vytvořit 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 rozhraní příkazového řádku DBFS:

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

Příklad: Použití conda k instalaci knihoven Pythonu

S Modulem Databricks Runtime 9.0 a novějším není možné nainstalovat knihovny Pythonu pomocí Conda. Pokyny k instalaci balíčků Pythonu do clusteru najdete v tématu Knihovny.

Důležité

Anaconda Inc. aktualizovala své podmínky poskytování služeb pro anaconda.org kanály v září 2020. Na základě nových podmínek poskytování služeb můžete vyžadovat komerční licenci, pokud spoléháte na balení a distribuci Anaconda. Další informace najdete v tématu Anaconda Commercial Edition – nejčastější dotazy . Používání všech kanálů Anaconda se řídí jejich podmínkami služby.

V důsledku této změny služba Databricks odebrala výchozí konfiguraci kanálu pro správce balíčků Conda. Jedná se o zásadní změnu. Je nutné aktualizovat použití příkazů conda v init-scripts k určení kanálu pomocí -c. Pokud nezadáte kanál, příkazy conda selžou s PackagesNotFoundError.

V Databricks Runtime 8.4 ML a níže použijete správce balíčků Conda k instalaci balíčků Python. Pokud chcete nainstalovat knihovnu Pythonu při inicializaci clusteru, můžete použít skript podobný následujícímu:

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

Konfigurace inicializačního skriptu s oborem clusteru

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

Důležité

  • Skript musí existovat v nakonfigurované lokalitě. Pokud skript neexistuje, cluster se nepodaří spustit nebo se automaticky škálovat.
  • Inicializační skript nemůže být větší než 64 kB. Pokud skript tuto velikost překročí, cluster se nepodaří spustit a v protokolu clusteru se zobrazí chybová zpráva.

Konfigurace inicializačního skriptu s oborem clusteru pomocí uživatelského rozhraní

Použití stránky konfigurace clusteru ke konfiguraci clusteru pro spuštění inicializační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 Inicializační skripty .

    Karta Inicializační skripty

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

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

  5. Klikněte na Přidat.

Pokud chcete odebrat skript z konfigurace clusteru, klikněte na ikonu 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 něhož jste ho nahráli.

Konfigurace inicializačního skriptu s oborem clusteru pomocí rozhraní REST API DBFS

Pokud chcete použít rozhraní API clusterů 2.0 ke konfiguraci clusteru s ID 1202-211320-brick1 pro spuštění inicializačního skriptu v předchozí čá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í inicializační skript se spouští na každém clusteru vytvořeném ve vašem pracovním prostoru. Globální inicializační skripty jsou užitečné, když chcete vynutit konfigurace knihoven pro celou organizaci nebo obrazovky zabezpečení. Globální inicializační skripty můžou vytvářet jenom správci. Můžete je vytvořit pomocí uživatelského rozhraní nebo rozhraní REST API.

Důležité

Globální inicializační skripty používejte pečlivě:

  • Přidávání knihoven nebo provádění dalších úprav, které způsobují neočekávané dopady, je snadné. Kdykoli je to možné, použijte místo toho inicializační skripty s oborem clusteru.
  • Každý uživatel, který vytvoří cluster a povolí doručování protokolů clusteru, může zobrazit stderr a stdout výstup z globálních inicializačních skriptů. Měli byste zajistit, aby globální inicializační skripty nevytvádaly žádné citlivé informace.

Globální inicializační skripty můžete řešit konfigurací doručování protokolů clusteru a prozkoumáním protokolu inicializačních skriptů.

Přidání globálního inicializačního skriptu pomocí uživatelského rozhraní

Konfigurace globálních inicializačních skriptů pomocí konzoly Správa:

  1. Přejděte do konzoly Správa a klikněte na kartu Globální inicializační skripty.

    Karta Globální inicializační skripty

  2. Klikněte na + Přidat.

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

    Přidání globálního inicializačního skriptu

    Poznámka

    Inicializační skript nemůže 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 pracovní prostor nakonfigurovaný více než jeden globální inicializační skript, 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 povoleno.

    Důležité

    Když přidáte globální inicializační skript nebo provedete změny názvu, pořadí spuštění nebo povolení inicializačních skriptů, tyto změny se neprojeví, dokud cluster nerestartujete.

  6. Klikněte na Přidat.

Přidání globálního inicializačního skriptu pomocí Terraformu

Globální inicializační skript můžete přidat pomocí poskytovatele Terraformu Databricks a databricks_global_init_script.

Úprava globálního inicializačního skriptu pomocí uživatelského rozhraní

  1. Přejděte do konzoly Správa a klikněte na kartu Globální inicializační skripty.
  2. Klikněte na skript.
  3. Upravte skript.
  4. Klikněte na Confirm (Potvrdit).

Konfigurace globálního inicializačního skriptu pomocí rozhraní API

Správci můžou přidávat, odstraňovat, znovu seřadit a získávat informace o globálních inicializačních skriptech ve vašem pracovním prostoru pomocí rozhraní API globálních inicializačních skriptů 2.0.

Migrace ze starší verze na nové globální inicializační skripty

Pokud se váš pracovní prostor Azure Databricks spustil před srpnem 2020, možná máte starší globální inicializační skripty. Měli byste je migrovat do nové globální architektury inicializačních skriptů, abyste mohli využívat funkce zabezpečení, konzistence a viditelnosti, které jsou součástí nové architektury skriptů.

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

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

  2. Zakažte všechny starší globální inicializační skripty.

    V konzole Správa přejděte na kartu Globální inicializační skripty a vypněte přepínač Starší globální inicializační skripty.

    Zakázání starších globálních inicializačních skriptů

  3. Povolte nové globální inicializační skripty.

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

    Povolení globálních skriptů

  4. Restartujte všechny clustery.

    • Starší skripty se nespustí na nových uzlech přidaných během automatizovaného vertikálního navýšení kapacity spuštěných clusterů. Na těchto nových uzlech se nespustí ani nové globální inicializační skripty. Je nutné restartovat všechny clustery, aby se zajistilo, že se na nich nové skripty spustí a že se žádné existující clustery nepokusí přidávat nové uzly bez globálních skriptů spuštěných na nich vůbec.
    • Při migraci na novou globální architekturu inicializačních skriptů a zakázání starších skriptů může být potřeba upravit ne idempotentní skripty.