集群節點初始化腳本
請注意
到此版本為止,在穀歌Cloud上的Databricks上無法使用CLI特性。
初始化腳本是在每個集群節點啟動期間運行的shell腳本之前Apache Spark驅動程序或worker JVM啟動。
一些由初始化腳本執行的任務的例子包括:
安裝Databricks運行時中不包含的包和庫。要安裝Python包,請使用Databricks
皮普
二進製文件位於/磚/ python / bin /皮普
確保Python包安裝在Databricks的Python虛擬環境中,而不是係統的Python環境中。例如,/磚/ python / bin /皮普安裝<包名稱>
.中修改JVM係統類路徑特殊情況.
設置JVM使用的係統屬性和環境變量。
修改Spark配置參數。
Init腳本類型
Databricks支持兩種初始化腳本:集群範圍的和全局的。
集群級:在每個配置了腳本的集群上運行。這是運行初始化腳本的推薦方式。
全球:在工作區中的每個集群上運行。它們可以幫助您在整個工作空間中強製執行一致的集群配置。小心使用它們,因為它們可能會導致無法預料的影響,比如庫衝突。隻有admin用戶可以創建全局初始化腳本。
請注意
要在當前版本中管理全局初始化腳本,必須使用全局初始化腳本API 2.0.
無論何時更改任何類型的初始化腳本,都必須重新啟動受腳本影響的所有集群。
環境變量
集群作用域和全局初始化腳本支持以下環境變量:
DB_CLUSTER_ID
:腳本所在的集群ID。看到集群API 2.0.DB_CONTAINER_IP
:運行Spark的容器的私網IP地址。初始化腳本在這個容器中運行。看到SparkNode.DB_IS_DRIVER
:該腳本是否在驅動節點上運行。DB_DRIVER_IP
:驅動節點IP地址。DB_INSTANCE_TYPE
:主機虛擬機的實例類型。DB_CLUSTER_NAME
:腳本正在執行的集群名稱。DB_IS_JOB_CLUSTER
:集群是否為運行作業而創建。看到創建一個工作.
例如,如果你想隻在一個驅動節點上運行腳本的一部分,你可以寫這樣的腳本:
回聲DB_IS_DRIVER美元如果[[DB_IS_DRIVER美元=“真正的”]];然後<隻在驅動程序>上運行此部分其他的<隻在工作人員>上運行此部分fi<在司機和工人>上運行此部分
您還可以配置自定義環境變量在初始化腳本中引用這些變量。
在環境變量中使用秘密
在引用秘密時,可以使用任何有效的變量名。對環境變量中引用的秘密的訪問由配置集群的用戶的權限決定。存儲在環境變量中的秘密可以被集群的所有用戶訪問,但是會以正常方式從明文顯示中編校,作為在其他地方引用的秘密。
有關更多細節,請參見在環境變量中引用一個秘密.
日誌記錄
初始腳本啟動和結束事件在集群事件日誌中捕獲。詳細信息在集群日誌中捕獲。全局初始化腳本創建、編輯和刪除事件也會在帳戶級審計日誌中捕獲。
Init腳本事件
集群事件日誌捕獲兩個初始化腳本事件:INIT_SCRIPTS_STARTED
而且INIT_SCRIPTS_FINISHED
,指示計劃執行哪些腳本,哪些已成功完成。INIT_SCRIPTS_FINISHED
還捕獲執行持續時間。
集群範圍內的初始化腳本由鍵指示“集群”
.
請注意
集群事件日誌不會記錄每個集群節點的初始化腳本事件;隻選擇一個節點來表示所有節點。
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,則可以使用文件係統實用程序.
每次集群啟動時,它都會向初始化腳本日誌文件夾寫入一個日誌。
重要的
創建集群並啟用集群日誌傳遞的任何用戶都可以查看stderr
而且stdout
全局初始化腳本的輸出。您應該確保全局初始化腳本不輸出任何敏感信息。
集群級init腳本
集群作用域的初始化腳本是在集群配置中定義的初始化腳本。集群作用域的初始化腳本適用於您創建的集群和為運行作業而創建的集群。由於腳本是集群配置的一部分,集群訪問控製讓您控製誰可以更改腳本。
您可以使用UI或調用Clusters API配置集群範圍內的初始化腳本。本節重點介紹如何使用UI執行這些任務。有關API,請參見集群API 2.0.
您可以添加任意數量的腳本,並且這些腳本將按照所提供的順序依次執行。
如果集群範圍內的初始化腳本返回非零退出碼,則集群啟動失敗.可以通過配置來排除集群範圍內的初始化腳本的故障集群日誌交付和檢查init腳本日誌.
示例集群範圍內的初始化腳本
本節展示兩個初始化腳本示例。
示例:安裝PostgreSQL JDBC驅動程序
在Python筆記本中運行的以下代碼片段創建了一個安裝PostgreSQL JDBC驅動程序的初始化腳本。
創建一個DBFS目錄,用於存儲初始化腳本。這個示例使用
dbfs: /磚/腳本
.dbutils.fs.mkdir(“dbfs: /磚/腳本/”)
創建一個名為
postgresql-install.sh
在該目錄:dbutils.fs.把(“磚/腳本/ postgresql-install.sh”,"""# !/bin/bashwget——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""",真正的)
檢查腳本是否存在。
顯示(dbutils.fs.ls(“dbfs: /磚/腳本/ postgresql-install.sh”))
示例:使用conda安裝Python庫
在Databricks Runtime 9.0及以上版本中,不能使用conda來安裝Python庫。有關如何在集群上安裝Python包的說明,請參見庫.
重要的
蟒蛇公司更新了他們的服務條款觀看anaconda.org頻道。根據新的服務條款,如果您依賴Anaconda的包裝和分銷,您可能需要一個商業許可證。看到蟒蛇商業版常見問題解答為更多的信息。你對蟒蛇通道的使用由他們的服務條款.
由於這個更改,Databricks刪除了Conda包管理器的默認通道配置。這是一個突破性的變化。您必須更新初始化腳本中conda命令的用法,以指定使用的通道- c
.如果不指定通道,conda命令將失敗PackagesNotFoundError
.
在Databricks Runtime 8.4 ML及以下版本中,使用Conda安裝Python包的包管理器。要在集群初始化時安裝Python庫,可以使用如下腳本:
# !/bin/bash集-ex /databricks/python/bin/python/databricks/conda/etc/profile.d/conda.sh conda activate /databricks/python conda install -c conda-forge -y astropy .sh
配置一個集群範圍的初始化腳本
您可以通過UI或API配置集群運行初始化腳本。
重要的
腳本必須存在於配置的位置。如果腳本不存在,集群將無法啟動或自動擴展。
init腳本的大小不能超過64KB。如果腳本超過這個大小,集群將無法啟動,並在集群日誌中顯示一條失敗消息。
全球init腳本
在工作區中創建的每個集群上運行全局初始化腳本。當您希望強製執行組織範圍的庫配置或安全屏幕時,全局初始化腳本非常有用。隻有管理員可以創建全局初始化腳本。您可以使用UI或REST API創建它們。
重要的
慎用全局初始化腳本:
可以很容易地添加庫或進行其他修改,從而導致無法預料的影響。盡可能使用集群作用域的初始化腳本。
創建集群並啟用集群日誌傳遞的任何用戶都可以查看
stderr
而且stdout
全局初始化腳本的輸出。您應該確保全局初始化腳本不輸出任何敏感信息。
您可以通過配置來排除全局初始化腳本的故障集群日誌交付和檢查init腳本日誌.
使用UI添加全局初始化腳本
使用管理控製台配置全局初始化腳本:
轉到管理控製台並單擊全球Init腳本選項卡。
點擊+添加.
為腳本命名,並通過鍵入、粘貼或拖動文本文件到腳本字段。
請注意
init腳本的大小不能超過64KB。如果腳本超過該大小,則在嚐試保存時出現錯誤消息。
如果為工作區配置了多個全局初始化腳本,請設置新腳本運行的順序。
如果您希望在保存後為所有新的和重新啟動的集群啟用該腳本,請切換啟用.
重要的
當您添加全局初始化腳本或更改名稱、運行順序或啟用初始化腳本時,這些更改直到重新啟動集群才會生效。
點擊添加.
使用Terraform添加全局初始化腳本
方法可以添加全局初始化腳本磚起程拓殖的提供者而且databricks_global_init_script.
使用API配置全局初始化腳本
控件可以在工作區中添加、刪除、重新排序和獲取關於全局初始化腳本的信息全局初始化腳本API 2.0.