Fürtcsomópont inicializálási szkriptjei

Az init-szkript olyan rendszerhéjszkript, amely az egyes fürtcsomópontok indításakor fut, mielőtt az Apache Spark-illesztőprogram vagy a feldolgozó JVM elindul.

Néhány példa az init-szkriptek által végrehajtott feladatokra:

  • Telepítse a Databricks Runtime-ban nem szereplő csomagokat és kódtárakat. Python-csomagok telepítéséhez használja a következő helyen /databricks/python/bin/pip található Azure Databricks pip bináris fájlt, hogy a Python-csomagok a rendszer Python-környezet helyett az Azure Databricks Python virtuális környezetébe telepítsenek. Például: /databricks/python/bin/pip install <package-name>.
  • Speciális esetekben módosítsa a JVM rendszerosztályútvonalát.
  • Állítsa be a JVM által használt rendszertulajdonságokat és környezeti változókat.
  • Módosítsa a Spark konfigurációs paramétereit.

Figyelmeztetés

Az Azure Databricks az új munkaterületeken alapértelmezés szerint engedélyezett örökölt globális init-szkriptek fenntartott helyét /databricks/init vizsgálja. A Databricks azt javasolja, hogy a váratlan viselkedés elkerülése érdekében ne tároljon init-szkripteket ezen a helyen.

Init szkripttípusok

Az Azure Databricks kétféle init-szkriptet támogat: fürt hatókörű és globális.

  • Fürt hatóköre: futtassa a parancsprogrammal konfigurált összes fürtön. Ez az init-szkriptek futtatásának ajánlott módja.
  • Globális: futtassa a munkaterület minden fürtjén. Ezek segítségével konzisztens fürtkonfigurációkat kényszeríthet ki a munkaterületen. Óvatosan használja őket, mert váratlan hatásokat okozhatnak, például kódtárütközéseket. Globális init-szkripteket csak rendszergazdai felhasználók hozhatnak létre. A globális init szkriptek nem futtathatók modellkiszolgáló fürtökön.

Megjegyzés

Kétféle init-szkript létezik, amelyek elavultak. Az ilyen típusú init-szkripteket a fent felsoroltakra kell migrálnia:

  • Fürt neve: futtassa a parancsprogrammal azonos nevű fürtön. A fürtnevű init-szkriptek a legjobbak (csendesen figyelmen kívül hagyják a hibákat), és megpróbálják folytatni a fürtindítási folyamatot. Ehelyett fürt hatókörű init-szkripteket kell használni, és teljes csereként szolgálnak.
  • Örökölt globális: futtassa az összes fürtöt. Kevésbé biztonságosak, mint az új globális init szkript-keretrendszer, csendesen figyelmen kívül hagyják a hibákat, és nem hivatkozhatnak környezeti változókra. A meglévő örökölt globális init-szkripteket át kell telepítenie az új globális init szkript-keretrendszerbe. Lásd: Migrálás örököltről új globális init-szkriptekre.

Amikor bármilyen típusú init-szkriptet módosít, újra kell indítania a szkript által érintett összes fürtöt.

Init-szkript végrehajtási sorrendje

Az init szkriptek végrehajtásának sorrendje a következő:

  1. Örökölt globális (elavult)
  2. Fürt neve (elavult)
  3. Globális (új)
  4. Fürt hatóköre

Környezeti változók

A fürt hatókörű és globális init-szkriptjei a következő környezeti változókat támogatják:

  • DB_CLUSTER_ID: annak a fürtnek az azonosítója, amelyen a szkript fut. Lásd: Clusters API 2.0.
  • DB_CONTAINER_IP: annak a tárolónak a magánhálózati IP-címe, amelyben a Spark fut. Az init szkript ebben a tárolóban fut. Lásd: SparkNode.
  • DB_IS_DRIVER: azt jelzi, hogy a szkript egy illesztőprogram-csomóponton fut-e.
  • DB_DRIVER_IP: az illesztőprogram-csomópont IP-címe.
  • DB_INSTANCE_TYPE: a gazdagép virtuális gépének példánytípusa.
  • DB_CLUSTER_NAME: annak a fürtnek a neve, amelyen a szkript fut.
  • DB_IS_JOB_CLUSTER: a fürt egy feladat futtatásához lett-e létrehozva. Lásd: Feladat létrehozása.

Ha például egy szkript egy részét csak egy illesztőprogram-csomóponton szeretné futtatni, a következőhöz hasonló szkriptet írhat:

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>

Egyéni környezeti változókat is konfigurálhat egy fürthöz, és hivatkozhat ezekre a változókra init-szkriptekben.

Titkos kódok használata környezeti változókban

Bármilyen érvényes változónevet használhat, ha titkos kódra hivatkozik. A környezeti változókban hivatkozott titkos kódokhoz való hozzáférést a fürtöt konfiguráló felhasználó engedélyei határozzák meg. A környezeti változókban tárolt titkos kódokat a fürt összes felhasználója elérheti, de a normál módon, máshol hivatkozott titkos kódokként, egyszerű szöveges megjelenítésből újra ki van osztva.

További részletekért lásd: Titkos kód hivatkozása környezeti változókban.

Naplózás

Az Init-szkript indítási és befejezési eseményeit a fürt eseménynaplói rögzítik. A részleteket a fürtnaplók rögzítik. A globális init-szkriptek létrehozása, szerkesztése és törlése a fiókszintű diagnosztikai naplókban is rögzítésre kerül.

Init-szkriptesemények

A fürtesemény-naplók két init szkriptes eseményt rögzítenek: INIT_SCRIPTS_STARTED és INIT_SCRIPTS_FINISHED, amely azt jelzi, hogy mely szkriptek vannak ütemezve a végrehajtásra, és amelyek sikeresen befejeződtek. INIT_SCRIPTS_FINISHED emellett rögzíti a végrehajtás időtartamát is.

A globális init-szkripteket a naplóesemény részleteiben a kulcs "global" jelöli, a fürt hatókörébe tartozó init-szkripteket pedig a kulcs "cluster"jelöli.

Megjegyzés

A fürtesemény-naplók nem naplóznak init szkripteseményeket az egyes fürtcsomópontokhoz; csak egy csomópont van kiválasztva, amely mindet képviseli.

Init-szkriptnaplók

Ha a fürtnaplók kézbesítése fürthöz van konfigurálva, az init szkriptnaplók a következőre /<cluster-log-path>/<cluster-id>/init_scriptslesznek írva: . A fürt minden tárolójának naplói egy nevű init_scripts/<cluster_id>_<container_ip>alkönyvtárba lesznek írva. Ha például a értékre cluster-logsvan állítva, cluster-log-path egy adott tároló naplóinak elérési útja a dbfs:/cluster-logs/<cluster-id>/init_scripts/<cluster_id>_<container_ip>következő: .

Ha a fürt úgy van konfigurálva, hogy naplókat írjon a DBFS-be, megtekintheti a naplókat a Fájlrendszer segédprogram (dbutils.fs) vagy a DBFS CLI használatával. Ha például a fürt azonosítója: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

Ha a fürtnaplók kézbesítése nincs konfigurálva, a rendszer a naplókat a következőre /databricks/init_scriptsírja: . A naplók listázásához és megtekintéséhez használhatja a jegyzetfüzetek standard rendszerhéj-parancsait:

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

Minden alkalommal, amikor egy fürt elindul, naplót ír az init szkriptnapló mappájába.

Fontos

Minden olyan felhasználó, aki fürtöt hoz létre, és engedélyezi a fürtnaplók kézbesítését, megtekintheti a stderr globális init szkriptekből származó kimenetet stdout . Győződjön meg arról, hogy a globális init-szkriptek nem adnak ki bizalmas adatokat.

Diagnosztikai naplók

Az Azure Databricks diagnosztikai naplózása rögzíti a globális init szkriptet, amely eseménytípus globalInitScriptsalatt hoz létre, szerkeszt és töröl eseményeket. Lásd: Diagnosztikai naplózás az Azure Databricksben.

Fürthatókörű init szkriptek

A fürt hatókörű init-szkriptjei a fürtkonfigurációban definiált init-szkriptek. A fürt hatókörű init-szkriptjei a létrehozott fürtökre és a feladatok futtatásához létrehozott fürtökre is érvényesek. Mivel a szkriptek a fürtkonfiguráció részét képezik, a fürthozzáférés-vezérléssel szabályozhatja, hogy ki módosíthatja a szkripteket.

A fürtökre kiterjedő init-szkripteket a felhasználói felület, a parancssori felület és a Clusters API meghívásával konfigurálhatja. Ez a szakasz ezeknek a feladatoknak a felhasználói felülettel történő elvégzésére összpontosít. A többi módszerről lásd a Databricks CLI beállítási & dokumentációját és a Clusters API 2.0-t.

Tetszőleges számú szkriptet adhat hozzá, és a szkriptek egymás után, a megadott sorrendben lesznek végrehajtva.

Ha egy fürt hatókörű init-szkript nem nulla kilépési kódot ad vissza, a fürt indítása sikertelen lesz. A fürthatókörű init szkriptek hibaelhárításához konfigurálhatja a fürtnaplók kézbesítését, és megvizsgálhatja az init szkriptnaplót.

Fürt hatókörű init-szkript helyei

Init-szkripteket helyezhet el egy fürt által elérhető DBFS- vagy ADLS-címtárban. A DBFS fürtcsomópont-init parancsfájljait a DBFS gyökérkönyvtárában kell tárolni. Az Azure Databricks nem támogatja az init-szkriptek tárolását az objektumtároló csatlakoztatásával létrehozott DBFS-címtárban.

Példa fürt hatókörű init-szkriptekre

Ez a szakasz két példát mutat be az init szkriptekre.

Példa: PostgreSQL JDBC-illesztő telepítése

A következő kódrészletek egy Python-jegyzetfüzetben futnak, és létrehoznak egy Init-szkriptet, amely egy PostgreSQL JDBC-illesztőt telepít.

  1. Hozzon létre egy DBFS-könyvtárat, amelyben tárolni szeretné az init szkriptet. Ez a példa a következőt használja: dbfs:/databricks/scripts.

    dbutils.fs.mkdirs("dbfs:/databricks/scripts/")
    
  2. Hozzon létre egy nevű postgresql-install.sh szkriptet a könyvtárban:

    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. Ellenőrizze, hogy létezik-e a szkript.

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

Másik lehetőségként helyileg is létrehozhatja az init szkriptet 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

és másolja a dbfs:/databricks/scriptsDBFS parancssori felületére:

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

Példa: Python-kódtárak telepítése a Conda használatával

A Databricks Runtime 9.0-s és újabb verziója esetén a Conda nem használható Python-kódtárak telepítéséhez. A Python-csomagok fürtre való telepítéséről a Kódtárak című témakörben talál útmutatást.

Fontos

Az Anaconda Inc. 2020 szeptemberében frissítette anaconda.org csatornákra vonatkozó szolgáltatási feltételeit . Az új szolgáltatási feltételek alapján kereskedelmi licencre lehet szüksége, ha az Anaconda csomagolására és terjesztésére támaszkodik. További információért lásd: Anaconda Commercial Edition – GYIK . Az Anaconda-csatornák ön általi használatára a szolgáltatási feltételek vonatkoznak.

A módosítás eredményeként a Databricks eltávolította a Conda csomagkezelő alapértelmezett csatornakonfigurációját. Ez egy rendkívüli változás. A csatorna -cmegadásához frissítenie kell a conda parancsok használatát az init-scriptekben. Ha nem ad meg csatornát, a conda parancsok sikertelenek lesznek a következővel PackagesNotFoundError: .

A Databricks Runtime 8.4 ML-ben és alább a Conda csomagkezelővel telepítheti a Python-csomagokat. Python-kódtár fürt inicializáláskor való telepítéséhez használhat az alábbihoz hasonló szkriptet:

#!/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

Fürt hatókörű init-szkriptjének konfigurálása

Konfigurálhat egy fürtöt init-szkript futtatására a felhasználói felület vagy az API használatával.

Fontos

  • A szkriptnek a konfigurált helyen kell lennie. Ha a szkript nem létezik, a fürt nem indul el, vagy automatikusan fel lesz skálázva.
  • Az init szkript nem lehet nagyobb 64 KB-nál. Ha egy szkript túllépi ezt a méretet, a fürt nem indul el, és hibaüzenet jelenik meg a fürtnaplóban.

Fürt hatókörű init-szkript konfigurálása a felhasználói felület használatával

A fürtkonfigurációs lap használata egy fürt init-szkript futtatására való konfigurálásához:

  1. A fürtkonfiguráció lapon kattintson a Speciális beállítások váltógombra.

  2. A lap alján kattintson az Init Scripts fülre .

    Init Scripts lap

  3. A Cél legördülő menüben válasszon egy céltípust. Az előző szakaszban szereplő példában a cél a következő DBFS: .

  4. Adja meg az init szkript elérési útját. Az előző szakaszban szereplő példában az elérési út a következő dbfs:/databricks/scripts/postgresql-install.sh: . Az elérési útnak a következővel kell kezdődnie dbfs:/: .

  5. Kattintson a Hozzáadás parancsra.

Ha el szeretne távolítani egy szkriptet a fürtkonfigurációból, kattintson a szkript jobb oldalán található Törlés ikonra . Amikor megerősíti a törlést, a rendszer kérni fogja a fürt újraindítását. Ha szeretné, törölheti a szkriptfájlt abból a helyről, ahová feltöltötte.

Fürt hatókörű init-szkript konfigurálása a DBFS REST API használatával

Ha a Clusters API 2.0-val szeretné konfigurálni a fürtöt az azonosítóval 1202-211320-brick1 az init szkript futtatásához az előző szakaszban, futtassa a következő parancsot:

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ális init szkriptek

A globális init szkript a munkaterületen létrehozott összes fürtön fut. A globális init-szkriptek akkor hasznosak, ha vállalati szintű tárkonfigurációkat vagy biztonsági képernyőket szeretne kikényszeríteni. Globális init-szkripteket csak rendszergazdák hozhatnak létre. Létrehozhatja őket a felhasználói felület vagy a REST API használatával.

Fontos

Körültekintően használja a globális init-szkripteket:

  • Könnyen hozzáadhat kódtárakat, vagy egyéb módosításokat végezhet, amelyek váratlan hatásokat okoznak. Amikor csak lehetséges, használjon fürt hatókörű init-szkripteket.
  • Minden olyan felhasználó, aki fürtöt hoz létre, és engedélyezi a fürtnaplók kézbesítését, megtekintheti a stderr globális init szkriptekből származó kimenetet stdout . Győződjön meg arról, hogy a globális init-szkriptek nem adnak ki bizalmas adatokat.

A globális init-szkriptek hibaelhárításához konfigurálhatja a fürtnaplók kézbesítését , és megvizsgálhatja az init szkriptnaplót.

Globális init-szkript hozzáadása a felhasználói felülettel

Globális init-szkriptek konfigurálása a Rendszergazda-konzol használatával:

  1. Nyissa meg a Rendszergazda konzolt, és kattintson a Global Init Scripts (Globális init-szkriptek) fülre.

    Globális Init-szkriptek lap

  2. Kattintson a + Hozzáadás gombra.

  3. Nevezze el a szkriptet, és írja be egy szövegfájl beírásával, beillesztésével vagy húzásával a Szkript mezőbe.

    Globális init-szkript hozzáadása

    Megjegyzés

    Az init szkript nem lehet nagyobb 64 KB-nál. Ha egy szkript túllépi ezt a méretet, a mentéskor hibaüzenet jelenik meg.

  4. Ha több globális init-szkript van konfigurálva a munkaterülethez, állítsa be az új szkript futtatásának sorrendjét.

  5. Ha azt szeretné, hogy a szkript engedélyezve legyen az összes új és újraindított fürtön a mentés után, kapcsolja be az Engedélyezve beállítást.

    Fontos

    Ha globális init-szkriptet ad hozzá, vagy módosítja az Init-szkriptek nevét, futtatási sorrendjét vagy engedélyezését, ezek a módosítások csak a fürt újraindítása után lépnek érvénybe.

  6. Kattintson a Hozzáadás parancsra.

Globális init-szkript hozzáadása a Terraform használatával

Globális init-szkriptet a Databricks Terraform-szolgáltató és databricks_global_init_script használatával adhat hozzá.

Globális init-szkript szerkesztése a felhasználói felületen

  1. Nyissa meg a Rendszergazda konzolt, és kattintson a Global Init Scripts (Globális init-szkriptek) fülre.
  2. Kattintson egy szkriptre.
  3. Szerkessze a szkriptet.
  4. Kattintson a Megerősítés gombra.

Globális init-szkript konfigurálása az API használatával

A rendszergazdák a Global Init Scripts API 2.0 használatával hozzáadhatják, törölhetik, átrendezhetik és lekérhetik a munkaterület globális init szkriptjeire vonatkozó információkat.

Migrálás örököltről új globális init-szkriptekre

Ha az Azure Databricks-munkaterületet 2020 augusztusa előtt indították el, előfordulhat, hogy továbbra is rendelkezik örökölt globális init-szkriptekkel. Ezeket át kell telepítenie az új globális init szkript-keretrendszerbe, hogy kihasználhassa az új szkript-keretrendszer biztonsági, konzisztenciájú és láthatósági funkcióit.

  1. Másolja ki a meglévő örökölt globális init-szkripteket, és adja hozzá őket az új globális init szkript-keretrendszerhez a felhasználói felület vagy a REST API használatával.

    A következő lépés befejezéséig tiltsa le őket.

  2. Tiltsa le az összes örökölt globális init-szkriptet.

    A Rendszergazda konzolon lépjen a Global Init Scripts (Globális Init-szkriptek) lapra, és kapcsolja ki az Örökölt globális Init-szkriptek kapcsolót.

    Örökölt globális init-szkriptek letiltása

  3. Engedélyezze az új globális init-szkripteket.

    A Global Init Scripts (Globális init-szkriptek ) lapon kapcsolja be az Engedélyezve kapcsolót minden engedélyezni kívánt init-szkripthez.

    Globális szkriptek engedélyezése

  4. Indítsa újra az összes fürtöt.

    • Az örökölt szkriptek nem futnak a futó fürtök automatikus felskálázása során hozzáadott új csomópontokon. Az új globális init-szkriptek sem fognak futni azokon az új csomópontokon. Az összes fürtöt újra kell indítania, hogy az új szkriptek fussanak rajtuk, és hogy egyetlen meglévő fürt sem kíséreljen meg új csomópontokat hozzáadni globális szkriptek nélkül.
    • Előfordulhat, hogy a nem idempotens szkripteket módosítani kell, amikor az új globális init szkript-keretrendszerbe migrál, és letiltja az örökölt szkripteket.