集群節點初始化腳本

一個init腳本是一個shell腳本,運行在每個集群節點的啟動之前Apache火花司機或工人JVM開始。

一些例子通過init腳本執行的任務包括:

  • 安裝包和庫不包含在磚運行時。安裝Python包,使用磚皮普二進製文件位於/磚/ python / bin /皮普以確保Python包安裝到磚Python的虛擬環境中,而不是係統Python環境。例如,/磚/ python / bin /皮普安裝<包名稱>

  • 修改JVM係統類路徑特殊情況

  • 設置係統屬性和環境變量所使用的JVM。

  • 修改引發配置參數。

警告

磚掃描的預留位置/磚/ init全球遺產init腳本。磚建議你避免init腳本存儲在這個位置,以避免意想不到的行為。

Init腳本類型

磚支持兩種類型的init腳本:集群級和全球。

  • 集群級:在每個集群運行配置腳本。這是推薦的方式運行init腳本。

  • 全球在工作區中:在每個集群運行。他們可以幫助你執行一致的集群配置您的工作區。小心地使用它們,因為它們可能導致意外的影響,像圖書館衝突。隻有管理員用戶可以創建全球init腳本。全球不上運行init腳本模型服務集群

警告

遺留全球init腳本和cluster-named init腳本棄用並不能用於新的工作區2月21日開始,2023:

  • Cluster-named:運行在集群名稱相同的腳本。Cluster-named init腳本的最優(默默地忽略失敗),並嚐試繼續集群啟動過程。使用集群級init腳本相反,它們是一個完整的替代品。

  • 遺留的全球:每一個集群上運行。他們不如新的全球安全的init腳本框架,默默地忽略失敗,不能參考環境變量。現有的遺留全球init腳本遷移到新的全球init腳本框架。看到從遺留遷移到新的全球init腳本。2023年9月1日,磚將禁用遺留全球所有工作區init腳本。

當你改變任何類型的init腳本時,您必須重新啟動所有集群影響腳本。

Init腳本執行順序

init腳本的執行順序是:

  1. 全球遺產(棄用-不要使用)

  2. Cluster-named(棄用-不要使用)

  3. 全球

  4. 集群級

環境變量

集群級和全球init腳本支持以下環境變量:

  • DB_CLUSTER_ID:集群的ID的腳本正在運行。看到集群API 2.0

  • DB_CONTAINER_IP:容器的私有IP地址的火花。init腳本運行在這個容器。看到SparkNode

  • DB_IS_DRIVER:腳本是否運行在一個司機節點。

  • DB_DRIVER_IP:司機節點的IP地址。

  • DB_INSTANCE_TYPE:主機VM的實例類型。

  • DB_CLUSTER_NAME:集群上執行腳本的名稱。

  • DB_IS_JOB_CLUSTER:是否創建集群運行工作。看到創建一個工作

例如,如果你想要運行的腳本隻在一個司機節點,您可以編寫一個腳本:

回聲DB_IS_DRIVER美元如果[[DB_IS_DRIVER美元=“真正的”]];然後隻在司機> <運行這個部分其他的隻在工人> <運行這個部分fi<在司機和工人這部分的運行>

您還可以配置自定義環境變量集群和引用這些變量的初始化腳本。

在環境變量中使用的秘密

您可以使用任何有效的變量名時引用一個秘密。秘密訪問環境變量中引用是由用戶的權限配置集群。秘密存儲在集群的所有用戶都可以訪問環境變量,但從明文以正常的方式顯示為編輯引用其他地方的秘密。

更多細節,請參閱在一個環境變量引用一個秘密

日誌記錄

Init腳本開始和結束事件是在集群事件日誌。細節是在集群日誌。全球init腳本創建、編輯和刪除事件也捕捉到戶頭級別審計日誌。

Init腳本事件

集群事件日誌捕獲兩個init腳本事件:INIT_SCRIPTS_STARTEDINIT_SCRIPTS_FINISHED指示,腳本將執行和成功完成。INIT_SCRIPTS_FINISHED也抓住了執行時間。

全球init腳本顯示在日誌事件的關鍵細節“全球”和集群級init腳本顯示的關鍵“集群”

請注意

集群事件日誌不日誌init腳本為每個集群節點事件;隻有一個節點被選中代表他們所有。

Init腳本日誌

如果集群日誌交付被配置為一個集群,init腳本日誌寫入/ < cluster-log-path > / < cluster-id > / init_scripts。對集群中的每個容器都寫日誌一個子目錄init_scripts / < cluster_id > _ < container_ip >。例如,如果cluster-log-path被設置為cluster-logs日誌的路徑,為一個特定的容器將:dbfs: / cluster-logs / < cluster-id > / init_scripts / < cluster_id > _ < container_ip >

如果集群配置DBFS寫日誌,您可以查看日誌使用文件係統實用程序(dbutils.fs)或者是DBFS CLI。例如,如果集群ID1001 - 234039 abcde739:

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

當集群日誌交付不配置,日誌寫入/磚/ init_scripts。您可以使用標準shell命令在一個筆記本和查看日誌列表:

% sh ls /磚/ init_scripts /貓/磚/ init_scripts / <時間> _ < log-id > _ < init-script-name > .sh.stdout.log

每次啟動集群,它將日誌寫入init腳本日誌文件夾。

重要的

任何用戶創建一個集群,使集群日誌可以查看交付stderrstdout來自全球的init腳本輸出。你應該確保你的全球init腳本不輸出任何敏感信息。

審計日誌

磚審計日誌捕捉全球init腳本創建、編輯和刪除事件在事件類型globalInitScripts。看到配置審計日誌記錄

集群級init腳本

集群級init腳本初始化腳本中定義集群配置。集群級init腳本適用於運行您創建集群和那些創造了就業機會。

您可以配置集群級init腳本使用UI, CLI,集群通過調用API。本節著重於使用UI執行這些任務。其他方法,明白了磚CLI集群API 2.0

您可以添加任意數量的腳本,這些腳本的順序執行。

如果一個集群級init腳本返回一個非零退出代碼,集群啟動失敗。你可以通過配置解決集群級init腳本集群日誌交付和檢查init腳本日誌

集群級init腳本的位置

你可以把init腳本在一個雲存儲目錄訪問集群。

示例:使用conda安裝Python庫

與磚運行時9.0及以上,您不能使用conda安裝Python庫。說明如何安裝Python包在一個集群中,看到的

重要的

蟒蛇inc .)更新他們的服務條款2020年9月為anaconda.org渠道。基於新的服務條款你可能需要一個商業許可證如果你依靠蟒蛇的包裝和分布。看到蟒蛇商業版常見問題解答為更多的信息。你使用任何蟒蛇是由他們的渠道服務條款

由於這一變化,磚消除了Conda包管理器默認通道配置。這是一個重大的變化。您必須更新conda命令的使用init腳本指定通道使用- c。如果你不指定一個頻道,conda命令將失敗PackagesNotFoundError

在磚運行時8.4毫升,下麵,你使用Conda包管理器安裝Python包。在集群的初始化安裝Python庫,您可以使用一個腳本如下:

# ! / bin / bash交貨/磚/ python / bin / python - v。/磚/ conda / etc / profile.d / conda。sh conda激活/磚/ python conda安裝- c conda-forge - y astropy

配置一個集群級init腳本使用UI

本節包含指令配置集群運行init腳本使用磚UI。

重要的

  • 配置的腳本必須存在的位置。如果腳本不存在,集群將無法啟動或自動定量。

  • init腳本不能大於64 kb。如果一個腳本超過尺寸,集群將無法啟動和失敗消息將出現在集群日誌。

使用用戶界麵配置集群運行init腳本:

  1. 在集群配置頁麵,單擊高級選項切換。

  2. 在頁麵的底部,單擊Init腳本選項卡。

  3. 目的地下拉,選擇S3目的地類型。

  4. 指定一個路徑init腳本。

  5. S3目的地類型:

    1. 選擇一個地區。

    2. 確保集群配置了一個實例配置文件GetObject允許訪問桶。例如:

      {“版本”:“2012-10-17”,“聲明”:({“效應”:“允許”,“行動”:(“s3: GetObject”),“資源”:(“攻擊:aws: s3::: < my-s3-bucket > / *”]}]}
  6. 點擊添加

從集群配置中刪除一個腳本,點擊刪除圖標在正確的腳本。當你確認刪除係統將提示您重新啟動集群。你也可以選擇刪除你上傳的腳本文件的位置。

全球init腳本

全球init腳本運行在每個集群中創建工作區。全球init腳本是有用,當你想執行組織範圍內庫配置或安全屏幕。隻有管理員可以創建全球init腳本。你可以使用UI或REST API創建它們。

重要的

使用全局init腳本仔細:

  • 很容易添加庫或進行其他修改導致不可預料的影響。隻要有可能,使用集群級init腳本。

  • 任何用戶創建一個集群,使集群日誌可以查看交付stderrstdout來自全球的init腳本輸出。你應該確保你的全球init腳本不輸出任何敏感信息。

你可以通過配置解決全球init腳本集群日誌交付和檢查init腳本日誌

添加一個全球init腳本使用UI

配置全球init腳本使用管理設置:

  1. 去管理設置並單擊全球Init腳本選項卡。

  2. 點擊+添加

  3. 腳本名稱,輸入打字、粘貼或拖到一個文本文件腳本字段。

    請注意

    init腳本不能大於64 kb。如果一個腳本超過大小,出現當你試圖挽救一條錯誤消息。

  4. 如果你有超過一個全球init腳本配置為您的工作空間,設置新的腳本將運行的順序。

  5. 如果你想要為所有新啟用的腳本並重新啟動集群後保存,切換啟用

    重要的

    當你添加一個全球init腳本或更改名稱、運行秩序,或啟動init腳本,這些變化不生效,直到您重新啟動集群。

  6. 點擊添加

添加一個全球使用起程拓殖init腳本

您可以添加一個全球init腳本使用磚起程拓殖的提供者databricks_global_init_script

編輯一個全球init腳本使用UI

  1. 去管理設置並單擊全球Init腳本選項卡。

  2. 單擊一個腳本。

  3. 編輯腳本。

  4. 點擊確認

配置一個全球init腳本使用API

管理員可以添加、刪除重新訂貨,得到全球的信息在您的工作空間中使用init腳本2.0全球Init腳本API

從遺留遷移到新的全球init腳本

如果你的磚工作區啟動2020年8月之前,你可能仍有遺留全球init腳本。遺留全球init腳本已被廢棄,不再提供新工作區。他們不應該被使用。

請注意

2023年9月1日,磚將禁用遺留全球所有工作區init腳本。磚建議你遺留全球init腳本遷移到當前全球init腳本框架盡快。

自動遷移的筆記本

磚工程創造了一個筆記本,幫助自動遷移過程從遺留全球init腳本。指令和筆記本下載的鏈接,看看全球遺產init腳本遷移筆記本

手動遷移指令

從遺留全球init腳本遷移到新的全球init腳本:

  1. 複製你的現有遺留全球init腳本從他們保留DBFS位置(/磚/ init),並將它們添加到新的全球框架使用init腳本用戶界麵或者是REST API

    讓他們禁用,直到你完成下一步。

  2. 禁用所有遺留全球init腳本。

    在管理設置,去全球Init腳本選項卡和切換全球遺產Init腳本開關。

    禁用遺留全球init腳本

    請注意

    如果你沒有訪問界麵,刪除所有的文件/磚/ init遺留的位置停止執行init腳本。

  3. 使你的新的全球init腳本。

    全球Init腳本標簽,切換啟用您想啟用開關為每一個init腳本。

  4. 重新啟動集群。

    • 遺留腳本不會在新節點上運行自動擴大運行中加入集群。新的全球init腳本也不會在這些新節點上運行。必須重新啟動所有集群,以確保新腳本運行在現有集群並沒有試圖添加新的節點,沒有全局腳本運行在它們。

    • 非冪等性的腳本可能需要修改當你遷移到新的全球init腳本框架和禁用舊腳本。