Küme düğümü başlatma betikleri

Başlatma betiği, her küme düğümünün başlatılması sırasında sürücü veya çalışan JVM'sinin Apache Spark çalışan bir kabuk betiğidir.

Init betikleri tarafından gerçekleştirilen görevlere bazı örnekler şunlardır:

  • Paketlerde yer alan paketleri ve kitaplıkları Databricks Runtime. Python paketlerini yüklemek için, python Azure Databricks sistem Python ortamı yerine Python sanal ortamına Azure Databricks emin olmak için üzerinde bulunan ikili pip /databricks/python/bin/pip dosyanın üzerine yükleyin. Örneğin, /databricks/python/bin/pip install <package-name>.
  • JVM sistem sınıf yolu özel durumlarda değiştirme.
  • JVM tarafından kullanılan sistem özelliklerini ve ortam değişkenlerini ayarlayın.
  • Spark yapılandırma parametrelerini değiştirme.

Başlangıç betiği türleri

Azure Databricks iki tür init betikini destekler: küme kapsamlı ve genel.

  • Küme kapsamlı: betikle yapılandırılmış her kümede çalıştırın. Bu, bir init betiği çalıştırmanın önerilen yolu.
  • Genel: çalışma alanında her kümede çalıştırın. Bunlar, çalışma alanınız genelinde tutarlı küme yapılandırmalarını zorlamanıza yardımcı olabilir. Kitaplık çakışmaları gibi, planlanmamış etkilere yol açabilecekleri için bunları dikkatli kullanın. Yalnızca yönetici kullanıcılar genel init betikleri oluşturabilir. Genel init betikleri, kümelere hizmet veren model üzerinde çalıştırlanmaz.

Not

Kullanım dışı olan iki tür init betikleri vardır. Bu türlerde init betiklerini yukarıda listelenenlere geçirmeniz gerekir:

  • Cluster-named: betikle aynı adla bir küme üzerinde çalıştırın. Küme adlı başlatma betikleri en iyi çabayı sağlar (hataları sessizce yoksayın) ve küme başlatma işleminin devamını yapmaya çalışmanızdır. Bunun yerine küme kapsamlı init betikleri kullanılmalıdır ve tam bir değişikliktir.
  • Eski genel: Her kümede çalıştırın. Bunlar yeni genel init betik çerçevesine göre daha az güvenlidir, hataları sessizce yoksayın ve ortam değişkenlerine başvuramaz. Mevcut eski genel init betiklerini yeni genel init betik çerçevesine geçirmeniz gerekir. Bkz. Eski betiklerden yeni genel init betikleri'ne geçiş.

Herhangi bir başlatma betiği türünü değiştirdikten sonra betikten etkilenen tüm kümeleri yeniden başlatmanız gerekir.

Betik yürütme sırasına göre init

Init betiklerinin yürütme sırası şu şekildedir:

  1. Eski genel (kullanım dışı)
  2. Küme adı (kullanım dışı)
  3. Genel (yeni)
  4. Küme kapsamlı

Ortam değişkenleri

Küme kapsamlı ve genel init betikleri (yeni nesil) aşağıdaki ortam değişkenlerini destekler:

  • DB_CLUSTER_ID: Betiğin üzerinde çalıştır olduğu kümenin kimliği. Bkz. Kümeler API'si.
  • DB_CONTAINER_IP: Spark'ın çalıştır olduğu kapsayıcının özel IP adresi. Init betiği bu kapsayıcı içinde çalıştır. Bkz. SparkNode.
  • DB_IS_DRIVER: betiğin bir sürücü düğümünde çalıştırıp çalışmay olmadığını gösterir.
  • DB_DRIVER_IP: Sürücü düğümünün IP adresi.
  • DB_INSTANCE_TYPE: konak VM'nin örnek türü.
  • DB_CLUSTER_NAME: Betiğin üzerinde yürütültiği kümenin adı.
  • DB_PYTHON_VERSION: Kümede kullanılan Python sürümü. Bkz. Python sürümü.
  • DB_IS_JOB_CLUSTER: kümenin bir işi çalıştırmak için oluşturulıp oluşturulmadı. Bkz. İş oluşturma.
  • SPARKPASSWORD: gizli bir yoluna giden yol.

Örneğin, bir betiğin bir bölümünü yalnızca bir sürücü düğümünde çalıştırmak için aşağıdaki gibi bir betik yazabilirsiniz:

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>

Günlüğe Kaydetme

Başlatma betiği başlatma ve bitiş olayları küme olay günlüklerinde yakalanır. Ayrıntılar küme günlüklerinde yakalanır. Genel init betiği oluşturma, düzenleme ve silme olayları hesap düzeyinde tanılama günlüklerinde de yakalanır.

Betik olaylarını init

Küme olay günlükleri, hangi betiklerin yürütme için zamanlandığı ve başarıyla tamamlandığı gösteren iki init INIT_SCRIPTS_STARTED INIT_SCRIPTS_FINISHED betik olayı yakalar: ve . INIT_SCRIPTS_FINISHED yürütme süresini de yakalar.

Genel init betikleri, günlük olayı ayrıntılarında anahtarıyla, küme kapsamlı "global" init betikleri ise anahtarıyla "cluster" belirtilmiştir.

Not

Küme olay günlükleri her küme düğümü için init betik olaylarını günlüğe kaydeder; Hepsini temsil etmek için yalnızca bir düğüm seçilir.

Betik günlüklerini init

Küme günlüğü teslimi bir küme için yapılandırılmışsa, init betik günlükleri dosyasına /<cluster-log-path>/<cluster-id>/init_scripts yazılır. Kümede her kapsayıcının günlükleri adlı bir alt dizine init_scripts/<cluster_id>_<container_ip> yazılır. Örneğin, olarak cluster-log-path cluster-logs ayarlanırsa, belirli bir kapsayıcının günlüklerinin yolu şöyle olur: dbfs:/cluster-logs/<cluster-id>/init_scripts/<cluster_id>_<container_ip> .

Küme DBFS'ye günlük yazacak şekilde yapılandırılmışsa, Dosya sistemi yardımcı programını (dbutils.fs) veya DBFS CLI'sini kullanarak günlükleri görüntüleyebilirsiniz. Örneğin, küme kimliği 1001-234039-abcde739 ise:

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

Küme günlüğü teslimi yapılandırılmamışsa günlükler dosyasına /databricks/init_scripts yazılır. Günlükleri listele ve görüntülemek için not defterindeki standart kabuk komutlarını kullanabilirsiniz:

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

Küme her başlatılanda, init betik günlüğü klasörüne bir günlük yazar.

Önemli

Küme oluşturan ve küme günlüğü teslimini sağlayan herhangi bir kullanıcı, genel stderr stdout init betiklerinden ve çıkışını görüntülemeyi sağlar. Genel init betiklerinizi herhangi bir hassas bilgi çıkışı yapmaması gerekir.

Tanılama günlükleri

Azure Databricks günlük kaydı, olay türü altında genel init betiği oluşturma, düzenleme ve silme olaylarını globalInitScripts yakalar. Bkz. tanılama günlüğü Azure Databricks.

Küme kapsamlı başlangıç betikleri

Küme kapsamlı init betikleri, küme yapılandırmasında tanımlanan init betikleridir. Küme kapsamlı init betikleri, hem oluşturduğunuz kümelere hem de işleri çalıştırmak için oluşturulan kümelere uygulanır. Betikler küme yapılandırmasının bir parçası olduğu için küme erişim denetimi, betikleri kimlerin değiştire olduğunu denetlemenizi sağlar.

Kullanıcı arabirimini, CLI'yi kullanarak ve Kümeler API'sini çağrısıyla küme kapsamlı init betiklerini yapılandırabilirsiniz. Bu bölüm, bu görevleri kullanıcı arabirimini kullanarak gerçekleştirmeye odaklanır. Diğer yöntemler için bkz. Databricks CLI ve Kümeler API'si.

Herhangi bir sayıda betik eklersiniz ve betikler sağlanan sırayla yürütülür.

Küme kapsamlı bir başlatma betiği sıfır olmayan bir çıkış kodu döndürürse, küme başlatma başarısız olur. Küme günlüğü teslimini yapılandırarak ve init betik günlüğünü inceerek küme kapsamlı init betikleri ile ilgili sorunları giderin.

Küme kapsamlı init betiği konumları

Init betiklerini bir küme tarafından erişilebilen bir DBFS veya ADLS dizinine koyabilirsiniz. DBFS'de küme düğümü başlat betikleri DBFS kökünde depolanmış olmalıdır. Azure Databricks, nesne depolaması takarak oluşturulan bir DBFS dizininde init betiklerini depolamayı desteklemez.

Küme kapsamlı örnek init betikleri

Bu bölümde, init betiklerinin iki örneği yer almaktadır.

Örnek: PostgreSQL JDBC sürücüsünü yükleme

Aşağıdaki kod parçacıkları Python not defterinde çalıştırıldı ve PostgreSQL JDBC sürücüsü yükleyen bir init betiği oluşturuluyor.

  1. Init betiği depolamak istediğiniz bir DBFS dizini oluşturun. Bu örnekte dbfs:/databricks/scripts kullanılmıştır.

    dbutils.fs.mkdirs("dbfs:/databricks/scripts/")
    
  2. Bu dizinde adlı postgresql-install.sh bir betik oluşturun:

    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. Betiğin mevcut olup olduğunu kontrol edin.

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

Alternatif olarak, init betiği yerel olarak postgresql-install.sh oluşturabilirsiniz:

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

ve dbfs:/databricks/scripts DBFS CLI kullanarak bunu 'a kopyalayın:

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

Örnek: Python kitaplıklarını yüklemek için Conda kullanın

Databricks Runtime 8,4 ML ve aşağıda Python paketlerini yüklemek için conda package manager 'ı kullanırsınız. Küme başlatma sırasında bir Python kitaplığı yüklemek için aşağıdaki gibi bir komut dosyası kullanabilirsiniz:

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

Databricks Runtime 9,0 ' den başlayarak, Python kitaplıklarını yüklemek için Conda kullanamazsınız. Bir kümeye Python paketlerinin nasıl yükleneceğine ilişkin yönergeler için bkz. Kitaplıklar .

Küme kapsamlı bir init betiği yapılandırma

Bir kümeyi, Kullanıcı arabirimini veya API 'YI kullanarak bir init betiği çalıştıracak şekilde yapılandırabilirsiniz.

Önemli

  • Betik, yapılandırılmış konumda bulunmalıdır. Betik yoksa, küme başlatılamaz veya tekrar ölçeklendirilmez.
  • İnit betiği 64 KB 'tan büyük olamaz. Bir komut dosyası bu boyutu aşarsa, küme başlatılamaz ve küme günlüğünde bir hata iletisi görüntülenir.

Kullanıcı arabirimini kullanarak küme kapsamlı bir init betiği yapılandırma

Bir kümeyi bir init betiği çalıştıracak şekilde yapılandırmak için küme yapılandırma sayfasını kullanmak için:

  1. Küme yapılandırması sayfasında, Gelişmiş Seçenekler ' e tıklayın.

  2. Sayfanın alt kısmındaki Init Betikleri sekmesine tıklayın.

    Init Betikleri sekmesi

  3. Hedef açılır penceresinde bir hedef türü seçin. Yukarıdaki bölümündeki örnekte, hedef DBFS .

  4. İnit betiğinin yolunu belirtin. Yukarıdaki bölümündeki örnekte, yol olur dbfs:/databricks/scripts/postgresql-install.sh . Yolun ile başlaması gerekir dbfs:/ .

  5. Ekle'ye tıklayın.

Küme yapılandırmasından bir betiği kaldırmak için Simgeyi Sil betiğin sağ tarafında. Silmeyi onaylamanız durumunda kümeyi yeniden başlatmanız istenir. İsteğe bağlı olarak, betik dosyasını karşıya yüklediğiniz konumdan silebilirsiniz.

DBFS REST API kullanarak küme kapsamlı bir init betiği yapılandırma

Önceki bölümde Init betiğini çalıştırmak üzere kümeyi KIMLIK ile yapılandırmak üzere kümeler API 'sini kullanmak için 1202-211320-brick1 Şu komutu çalıştırın:

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

Genel başlangıç betikleri

Genel bir init betiği, çalışma alanınızda oluşturulan her kümede çalışır. Genel başlatma betikleri, kuruluş genelinde kitaplık yapılandırmalarına veya güvenlik ekranlarını zorlamak istediğinizde faydalıdır. Yalnızca Yöneticiler genel başlatma betikleri oluşturabilir. Bunları Kullanıcı arabirimini veya REST API kullanarak oluşturabilirsiniz.

Önemli

Global init betiklerini dikkatle kullanın:

  • Kitaplıklar eklemek veya beklenmeyen etkileri neden olan başka değişiklikler yapmak kolaydır. Mümkün olduğunda, bunun yerine küme kapsamlı init betikleri kullanın.
  • Bir küme oluşturan ve küme günlüğü teslimine izin veren herhangi bir Kullanıcı, stderr stdout genel init betiklerinden ve çıktısını görüntüleyebilir. Global init betiklerinizin herhangi bir hassas bilgi çıkışında emin olmanız gerekir.

Küme günlüğü teslimini yapılandırarak ve init betiği günlüğünüinceleyerek, genel başlatma betiklerine sorun giderebilirsiniz.

Kullanıcı arabirimini kullanarak genel bir init betiği ekleme

Yönetim konsolunu kullanarak genel init betiklerini yapılandırmak için:

  1. Yönetim konsoluna gidin ve Global Init Betikleri sekmesine tıklayın.

    Global Init Betikleri sekmesi

  2. + Ekle düğmesine tıklayın.

  3. Betiği adlandırın ve betik alanına metin dosyasını yazarak, yapıştırarak veya sürükleyerek girin.

    Genel init betiği Ekle

    Not

    İnit betiği 64 KB 'tan büyük olamaz. Bir komut dosyası bu boyutu aşarsa, kaydetmeye çalıştığınızda bir hata mesajı görüntülenir.

  4. Çalışma alanınız için yapılandırılmış birden fazla genel init betiğinizin olması halinde, yeni betiğin çalışacağı sırayı ayarlayın.

  5. Kaydettikten sonra komut dosyasının tüm yeni ve yeniden başlatılan kümeler için etkinleştirilmesini istiyorsanız etkin anahtar üzerinde geçiş yapın.

    Önemli

    Çalıştırma sırası, ad ve etkinleştirme durumundaki değişiklikler dahil olmak üzere genel başlatma betiklerine yapılan değişiklikler için çalışan kümeleri yeniden başlatmanız gerekir.

  6. Ekle'ye tıklayın.

Kullanıcı arabirimini kullanarak genel bir init betiğini düzenleme

  1. Yönetim konsoluna gidin ve Global Init Betikleri sekmesine tıklayın.
  2. Bir komut dosyasına tıklayın.
  3. Betiği düzenleyin.
  4. Onayla'ya tıklayın.

API kullanarak genel bir init betiği yapılandırma

Yöneticiler, genel Init BETIKLERI API'sini kullanarak çalışma alanınızdaki genel init betikleri hakkında bilgi ekleyebilir, silebilir, yeniden sipariş edebilir ve bilgilerini alabilir.

Eskiyi ve yeni genel başlatma betiklerine geçir

Azure Databricks çalışma alanınız 2020 Ağustos 'Tan önce başlatılmışsa, hala eski genel başlatma betiklerine sahip olabilirsiniz. Yeni betik çerçevesinde bulunan güvenlik, tutarlılık ve görünürlük özelliklerinden yararlanmak için bunları yeni genel init betiği çerçevesine geçirmeniz gerekir.

  1. Mevcut eski Global init betiklerinizi kopyalayın ve Kullanıcı arabirimini veya REST APIkullanarak yeni genel init betiği çerçevesine ekleyin.

    Bir sonraki adım tamamlanana kadar devre dışı bırakın.

  2. Tüm eski Global init betikleri devre dışı bırakın.

    Yönetim konsolunda, genel Init Betikleri sekmesine gidin ve eski Global init betikleri anahtarını kapatın.

    Eski global init betiklerini devre dışı bırak

  3. Yeni Global init betikleri etkinleştirin.

    Global Init Betikleri sekmesinde, etkinleştirmek istediğiniz her Init betiği için etkin anahtar ' ı açın.

    Genel betikleri etkinleştir

  4. Tüm kümeleri yeniden başlatın.

    • Eski betikler, çalışan kümelerin otomatik ölçeği sırasında eklenen yeni düğümlerde çalışmaz. Veya yeni genel init betikleri bu yeni düğümlerde çalışır. Yeni betikler üzerinde çalıştığından emin olmak için tüm kümeleri yeniden başlatmanız ve var olan kümelerin hiç genel komut dosyası bulunmayan yeni düğümleri hiçbir şekilde hiç bir kez çalıştırmasına izin vermek gerekir.
    • Yeni genel init betiği çerçevesine geçiş yaptığınızda ve eski betikleri devre dışı bıraktığınızda ıdempotent olmayan betiklerin değiştirilmesi gerekebilir.