使用Databricks容器服務定製容器
Databricks容器服務允許您在創建集群時指定Docker映像。一些示例用例包括:
庫定製:您可以完全控製想要安裝的係統庫。
黃金容器環境:您的Docker映像是一個鎖定的環境,永遠不會改變。
Docker CI/CD集成:您可以將Databricks與您的Docker CI/CD管道集成。
您還可以使用Docker映像在具有GPU設備的集群上創建自定義深度學習環境。有關在Databricks容器服務中使用GPU集群的其他信息,請參見GPU集群上的Databricks Container服務.
對於每次容器啟動時都要執行的任務,可以使用init腳本.
需求
請注意
Databricks機器學習運行時不支持Databricks容器服務。
您的Databricks工作空間必須具有Databricks容器服務啟用.
您的機器必須運行最新的Docker守護進程(經過測試並可與客戶機/服務器版本18.03.0-ce一起工作的守護進程)和
碼頭工人
命令必須在您的路徑
.
第一步:建立你的基礎
Databricks建議您在Databricks已經構建和測試過的基礎上構建Docker庫。您也可以從頭開始構建您的Docker基礎。本節介紹這兩個選項。
選項1。使用Databricks構建的基礎
此示例使用9.倍
標記的映像將針對運行時版本為Databricks runtime 9.0及以上的集群:
從databricksruntime /標準:9。x……
若要指定其他Python庫,例如pandas和urllib的最新版本,請使用容器特定的版本皮普
.為datatabricksruntime /標準:9. x
容器,包括以下內容:
RUN /databricks/python3/bin/pip install pandas RUN /databricks/python3/bin/pip install urllib3 . exe
為datatabricksruntime /標準:8. x
容器或更低,包括以下:
RUN /databricks/conda/envs/dcs-minimal/bin/pip install pandas RUN /databricks/conda/envs/dcs-minimal/bin/pip install urllib3 .使用實例
示例基本映像駐留在Docker Hub上https://hub.docker.com/u/databricksruntime.用於生成這些基礎的dockerfile在https://github.com/databricks/containers.
請注意
基本的圖像databricksruntime /標準
而且databricksruntime /最小
難道不應該和無關的東西混淆嗎databricks-standard
而且databricks-minimal
包含在不再可用的Databricks運行時with Conda (Beta)中的環境。
第二個選項。建立你自己的Docker基地
您也可以從頭開始構建您的Docker基礎。Docker映像必須滿足以下要求:
JDK 8u191作為係統的Java
路徑
bash
iproute2 (ubuntu iproute)
coreutils (ubuntu coreutils)
procps (ubuntu procps)
sudo (ubuntu sudo)
Ubuntu Linux
要從頭構建自己的映像,必須創建虛擬環境。還必須包含內置到Databricks集群中的包,如Python、R和Ganglia。首先,您可以使用適當的基本映像(即,databricksruntime / rbase
R或databricksruntime / python
for Python),或參考示例在GitHub Dockerfiles.另一種選擇是從Databricks構建的最小映像開始databricksruntime /最小
.
請注意
Databricks建議使用Ubuntu Linux;但是,可以使用Alpine Linux。要使用Alpine Linux,必須包含以下文件:
此外,您必須設置Python,如下所示例子Dockerfile.
警告
在Databricks集群上徹底測試自定義容器映像。您的容器可能在本地或構建機器上工作,但是當您的容器在Databricks集群上啟動時,集群啟動可能失敗,某些功能可能被禁用,或者您的容器可能停止工作,甚至是無聲地停止工作。在最壞的情況下,它可能損壞您的數據或意外地將您的數據暴露給外部方。
請注意,您使用Databricks容器服務須遵守服務具體條款.
第二步:推送你的基本圖片
將您的自定義基礎映像推到Docker注冊表中。以下注冊表支持此過程:
碼頭工人中心沒有認證或基本認證。
Amazon彈性容器注冊表(Amazon ECR)與IAM(除了商業雲服務(C2S))。
Azure容器注冊表基本認證。
其他不支持認證或基本認證的Docker注冊表也有望正常工作。
請注意
如果您在Docker注冊表中使用Docker Hub,請務必檢查速率限製是否適應您期望在6小時內啟動的集群數量。對於匿名用戶、未經付費訂閱的身份驗證用戶和付費訂閱,這些速率限製是不同的。看到碼頭工人的文檔獲取詳細信息。如果超出此限製,您將得到“429 Too Many Requests”響應。
步驟3:啟動您的集群
您可以使用UI或API啟動您的集群。
使用UI啟動您的集群
在創建集群頁麵,指定支持Databricks容器服務的Databricks運行時版本。
下高級選項,選擇碼頭工人選項卡。
選擇使用您自己的Docker容器.
在碼頭工人圖像URL字段,輸入您的自定義Docker映像。
Docker映像URL示例:
注冊表
標簽格式
碼頭工人中心
<組織> / <庫>:<標記>
(例如:databricksruntime /標準:最新
)亞馬遜ECR
< aws-account-id > .dkr.ecr。<地區> .amazonaws.com/ <庫>:<標記>
Azure容器注冊表
< your-registry-name > .azurecr.io / <存儲庫名>:<標記>
選擇認證類型。
使用API啟動集群
使用集群API 2.0使用您的自定義Docker基礎啟動集群。
curl -X POST -H“授權:無記名<標記>”https:// < databricks-instance > / api / 2.0 /集群/創建- d”{:“cluster_name <集群名稱>”,“num_workers”:0,:“node_type_id i3.xlarge”," docker_image ": {“url”:“最新databricksruntime /標準:”," basic_auth ": {“用戶名”:“< docker-registry-username >”,“密碼”:“< docker-registry-password >”}},:“spark_version 7.3.x-scala2.12”," aws_attributes ": {“可用性”:“ON_DEMAND”,:“instance_profile_arn攻擊:aws:我::< aws-account-number >: instance-profile / < iam-role-name >”}}'
basic_auth
要求取決於您的Docker映像類型:對於公開的Docker圖像,不包括
basic_auth
字段。對於私有Docker映像,必須包含
basic_auth
字段,使用服務主體ID和密碼作為用戶名和密碼。對於Azure容器注冊表,必須設置
basic_auth
字段設置為服務主體的ID和密碼。看到Azure Container Registry服務主體身份驗證文檔有關創建服務主體的信息。對於Amazon ECR圖像,不包括
basic_auth
字段。您必須使用實例配置文件包括從映像所在的Docker存儲庫中提取Docker映像的權限。要做到這一點,請遵循使用實例配置文件設置對S3桶的安全訪問的步驟3到步驟5.下麵是一個IAM角色的例子,它擁有獲取任何圖像的權限。指定的存儲庫
< arn-of-repository >
.{“版本”:“2012-10-17”,“聲明”:[{“效應”:“允許”,“行動”:[“ecr: GetAuthorizationToken”),“資源”:“*”},{“效應”:“允許”,“行動”:[“ecr: BatchCheckLayerAvailability”,“ecr: GetDownloadUrlForLayer”,“ecr: GetrepositoryPolicy”,“ecr: DescribeRepositories”,“ecr: ListImages”,“ecr: DescribeImages”,“ecr: BatchGetImage”),“資源”:[“< arn-of-repository >”]}]}
如果Amazon ECR映像駐留在與Databricks集群不同的AWS帳戶中,則使用ECR庫政策之外的集群實例概要來授予Databricks集群訪問權限。下麵是一個ECR存儲庫策略的示例。集群實例配置文件所承擔的IAM角色由
< arn-of-IAM-role >
.{“版本”:“2012-10-17”,“聲明”:[{“席德”:“AllowCrossAccountPush”,“效應”:“允許”,“校長”:{“AWS”:“< arn-of-IAM-role >”},“行動”:[“ecr: BatchCheckLayerAvailability”,“ecr: BatchGetImage”,“ecr: DescribeImages”,“ecr: DescribeRepositories”,“ecr: GetDownloadUrlForLayer”,“ecr: GetrepositoryPolicy”,“ecr: ListImages”]})}
使用初始化腳本
Databricks容器服務集群允許客戶在Docker容器中包含初始化腳本。beplay体育app下载地址在大多數情況下,你應該避免初始化腳本,而是直接通過Docker(使用Dockerfile)進行定製。但是,某些任務必須在容器啟動時執行,而不是在容器構建時執行。對這些任務使用初始化腳本。
例如,假設您想在自定義容器中運行安全守護進程。通過映像構建管道在Docker映像中安裝和構建守護進程。然後,添加啟動守護進程的初始化腳本。在本例中,初始化腳本將包含如下一行systemctl開始my-daemon
.
在API中,您可以將初始化腳本指定為集群規範的一部分,如下所示。有關更多信息,請參見InitScriptInfo.
“init_scripts”:[{“文件”:{“目的地”:“文件:/我的/地方/ file.sh”}}]
對於Databricks容器服務映像,您還可以將初始化腳本存儲在DBFS或雲存儲中。
啟動Databricks容器服務集群時,將執行以下步驟:
虛擬機從雲提供商處獲取。
自定義Docker映像從您的回購中下載。
Databricks從映像創建Docker容器。
Databricks運行時代碼被複製到Docker容器中。
執行init腳本。看到初始化腳本執行順序.
Databricks忽略DockerCMD
而且入口點
原語。