Important
Databricks 容器服務用於標準運算目前仍處於 測試階段。 工作區管理員必須從工作區預覽頁面啟用此功能。 這是與 Databricks 容器服務(Container Services)不同的專用運算服務,後者一般可用。
Databricks 容器服務用於標準運算,允許你在建立 標準運算時指定 Docker 映像檔,讓你能在共享運算環境中存取自訂容器。 你的 Docker 映像檔是工作負載環境的唯一定義,因此你可以在本地重現遠端環境,確保開發與生產環境間的一致性。
你的自訂映像用於執行使用者程式碼的沙盒容器,例如 Python REPL 指令和 Python UDF。 Spark 引擎運行於 Databricks 管理的環境中,Spark 查詢會在沙盒容器與 Spark 引擎之間透過 Spark Connect 傳送。
此外,為了協助建立自訂映像檔,Azure Databricks 提供與無伺服器環境版本對齊的基礎映像檔,您可以擴充以滿足需求。
Requirements
若要使用 Databricks 容器服務進行標準運算:
- 運算資源必須執行 Databricks Runtime 18 LTS 或以上版本,並使用 標準 存取模式。
- 你必須安裝較新版本的 Docker daemon,且你的
docker上必須可使用PATH命令。
Note
務必選擇 18 LTS。 不要選擇 18.0、 18.1 或 18.2。
請參考下表,確認每個基底映像所需的最低 Databricks Runtime 版本:
| 基礎映像 | 最小 Databricks 執行時間 | 最低 API 版本 spark_version |
無伺服器環境版本 |
|---|---|---|---|
databricksruntime/environment:v6-standard |
19 | 19.x-scala2.13 |
6 |
databricksruntime/environment:v5-standard |
18 LTS | 18.3.x-scala2.13 |
5 |
步驟 1:啟用 Databricks 容器服務以支援標準運算
若要使用 Databricks 容器服務進行標準運算,工作空間管理員必須從 預覽 頁面啟用此功能:
- 以管理員身份登入您的 Azure Databricks 工作空間。
- 從右上角的使用者選單中,點選 預覽。
- 找到用於標準運算的 DCS,然後將其開啟。
步驟二:建立你的自訂映像檔
這些說明教你如何透過擴充 Databricks 提供的基礎映像來建立自訂映像檔(建議)。 基礎映像包含啟動工作負載所需的相依性,例如 Ubuntu、Python 和 JDK。 選擇一個基礎映像檔,其 最小 Databricks 執行時需求 能被你的計算量滿足,然後在上面疊加自訂功能。 定期重建映像檔,從基礎映像檔中取得最新的補丁。 本文中的範例是使用 v6-standard Databricks Runtime 19 的。
如果你想從零開始建立一個最小基礎映像,請參考 :從零開始建立一個最小基礎映像。
步驟 2a:拉取基礎影像
若要拉取基礎映像檔,請執行:
docker pull databricksruntime/environment:v6-standard
步驟 2b:寫一個 Docker 檔來擴充基礎映像檔
將自訂的 Python 套件安裝到基礎映像的 /databricks/python3 虛擬環境中。 這是啟動你工作負載的系統虛擬環境。
FROM databricksruntime/environment:v6-standard
RUN /databricks/python3/bin/python -m pip install <your python package>
以下範例展示了如何在執行環境中從自訂套件索引安裝套件,而不保留索引 URL。 當你使用私有索引時,會在建置時覆蓋 PIP_INDEX_URL 。
FROM databricksruntime/environment:v6-standard
ARG PIP_INDEX_URL=https://pypi.org/simple
RUN PIP_INDEX_URL="${PIP_INDEX_URL}" \
/databricks/python3/bin/python -m pip install --no-cache-dir simplejson
你可以使用任何標準的 Dockerfile 指令(例如 RUN, , ENV, WORKDIRCOPY)。 以下指示因 Azure Databricks 啟動工作負載的方式而被忽略:
USERCMDENTRYPOINTEXPOSEHEALTHCHECKSHELLSTOPSIGNAL
Note
對於 Scala 工作負載,請將 JAR 檔案複製到映像中的 /scala-jars/user 目錄,並對其執行 chmod 0644,使沙箱使用者可以讀取這些檔案。 Azure Databricks 會將 JAR 從此路徑載入到 Scala REPL classpath 和 Scala UDF classpaths。
步驟 2c:建立影像
要建立影像,請執行:
docker build -f <your-dockerfile> -t <registry-url>/<project>[/<repo>]:<tag> .
Warning
請在 Azure Databricks 運算上徹底測試你的自訂映像。 在本機或建置機器上可正常運作的映像檔,在 Azure Databricks 上啟動時,可能會無法啟動、悄悄停用某些功能,或停止運作。
參考:從零開始建立一個最小基礎映像檔
如果你需要完全掌控基礎映像檔的內容(例如為了符合嚴格的映像尺寸、供應鏈或合規要求),你可以從零開始建立一個最小化、以 Python 為主的映像檔,而不必再擴充databricksruntime/environment:v6-standard。
從零開始的參考資料只重現了基本的 Python 環境。 它不包含 JDK 或其他非 Python 執行時元件v6-standard,也不支援 Scala 工作負載。 當你的工作負載需要這些元件時,擴充 Databricks 提供的基礎映像檔。
Warning
從零開始建造是一個進階選項。 你負責追蹤映像檔的上游變更v6-standard,包括 Python 腳位、安全修補程式、平台工具,以及平台所需的檔案。/databricks//etc/environment Databricks 建議依照前文databricksruntime/environment:v6-standard所示,延伸。
Databricks 提供參考檔案,重現每個基礎映像檔的核心 Python 環境。 在建置前,先將 Dockerfile 和基底映像的相依性檔案下載到同一個目錄。 儲存 Dockerfile.txt 為 Dockerfile。
| 基礎映像 | Dockerfile | 相依檔案 |
|---|---|---|
v6-standard |
Dockerfile.txt | pyproject.toml |
v5-standard |
Dockerfile.txt | requirements.txt |
要建立影像,請執行:
docker build -t <your-registry>/<repo>:<tag> .
如果您的建置主機無法連線到 https://pypi.org,請在建置時執行以下操作以覆寫 pip 索引:
docker build --build-arg PIP_INDEX_URL=https://your-mirror/simple -t <your-registry>/<repo>:<tag> .
在繼續下一步之前,請執行以下操作來確認所策劃的 Python 套件是否能乾淨匯入:
docker run --rm --cpus 2 <your-registry>/<repo>:<tag> \
/databricks/python3/bin/python -c \
"import pandas, numpy, pyarrow, mlflow, databricks.connect; print('OK')"
步驟 3:將您的映像檔推送到登錄檔
接著,將映像檔推送到 Docker 登錄檔。 Databricks 容器服務在標準與專用計算上皆支援相同的登錄檔:
- Docker Hub,無需驗證或基本認證。
- Azure Container Registry,並具備基本認證。
其他支援無需驗證或基本認證的登錄檔也應該可行。 基本認證使用你的登錄檔使用者名稱和密碼。
為了提升最佳的映像拉取效能,建議使用與 Azure Databricks 工作區相同雲端和區域的登錄檔。
echo "$REGISTRY_PASSWORD" | docker login -u <registry-username> --password-stdin <registry-url>
docker push <registry-url>/<project>[/<repo>]:<tag>
Note
如果你使用 Docker Hub,請檢查你的速率限制是否能容納你預計六小時內啟動的運算。 如需詳細資訊,請參閱 Docker 檔 。 若超過此限制,請求會回傳 429 Too Many Requests。
步驟 4:啟動你的運算
你可以透過 UI 或 API 啟動使用自訂映像檔的運算。 必須滿足以下要求:
- 計算存取模式必須是 標準 (API 中設定
data_security_mode為DATA_SECURITY_MODE_STANDARD)。 如果運算設定為 專用 存取模式,則會使用不同版本的 Databricks 容器服務,預期會有不同的基礎映像,無法啟動你建立的基礎映像。 - Databricks 執行時版本必須達到 18 LTS 或以上。 務必選擇 18 LTS,而不是 18.0、 18.1 或 18.2。
- Databricks 執行時版本必須符合 你基礎映像的最低要求。
Note
若要針對 執行個體集區啟動,建立該集區時必須設定 preloaded_docker_images,且叢集的 docker_image 必須相符。 請參考啟動前使用 Databricks 容器服務與實例池 相關的說明。
使用UI啟動計算
在建立運算頁面,將存取模式設為標準,並選擇符合基礎映像檔最低需求的Databricks 執行時。
在 [進階] 中,選取 [Docker] 標籤頁。
選取 [ 使用您自己的 Docker 容器]。
在 Docker 映像檔網址 欄位,輸入你的自訂映像檔。
登記簿 標籤格式 Docker Hub <organization>/<repository>:<tag>(例如:databricksruntime/environment:v6-standard)Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>選取驗證類型。 請參閱 Docker 映像驗證。
Note
如果你在建立運算時看不到 Docker 設定,表示你的工作空間可能沒有啟用 Databricks 容器服務。 工作區管理員必須先啟用此功能,使用者才能指定 Docker 映像檔。 請參見 步驟 1:啟用 Databricks 容器服務以支援標準運算。
使用 API 啟動計算
以下範例 API 呼叫在 Databricks 執行時 19 上建立標準運算,並附有 v6-standard 自訂映像檔。 將 data_security_mode 設定為 DATA_SECURITY_MODE_STANDARD。
spark_version 必須符合 您的基底映像的最低需求。
databricks clusters create \
--cluster-name <cluster-name> \
--node-type-id Standard_DS3_v2 \
--json '{
"num_workers": 1,
"docker_image": {
"url": "<docker-registry-image-url>",
"basic_auth": {
"username": "<docker-registry-username>",
"password": "<docker-registry-password>"
}
},
"spark_version": "19.x-scala2.13",
"data_security_mode": "DATA_SECURITY_MODE_STANDARD"
}'
Docker 映像驗證
驗證需求取決於您的 Docker 映像類型。 您也可以使用秘密來儲存驗證使用者名稱和密碼。 請參閱 使用秘密進行驗證。
- 針對公用 Docker 映射,您不需要包含驗證資訊。 在 UI 中,將 [驗證] 設定為 [預設 ]。 針對 API 呼叫,不會 包含
basic_auth字段。 - 針對私人 Docker 映像,請使用服務主體識別碼和密碼(或適用的秘密)作為使用者名稱和密碼進行驗證。
- 針對 Azure Container Registry,請使用服務主體標識碼和密碼(或適用的密碼)作為使用者名稱和密碼進行驗證。 如需了解如何建立該服務主體的相關資訊,請參閱 Azure Container Registry 服務主體驗證文件。
使用秘密進行驗證
Databricks Container Service 支援使用秘密進行驗證。 在UI中建立計算資源時,請使用 [驗證] 欄位來選取 [使用者名稱和密碼],然後不要輸入純文字使用者名稱或密碼,而是使用 {{secrets/<scope-name>/<dcs-secret>}} 格式輸入您的密碼。 如果您使用 API,請在 [basic_auth] 欄位中輸入秘密。
如需建立秘密的資訊,請參閱 秘密管理。
搭配實例集區使用 Databricks 容器服務
要使用 Databricks 容器服務搭配實例池,必須使用 Instance Pools API 來建立池,而非 UI。
該池必須預先載入 Docker 映像檔。 這樣會用自訂映像溫熱閒置實例,讓工作負載啟動得更快。 請在請求中設定 preloaded_docker_images 欄位,並使用與直接啟動運算時相同的映像參照和驗證資訊。 此欄位是清單,因此一個池可以預先載入多張圖片。
池及其附屬的運算資源必須同意是否正在使用 Docker。 如果一個池沒有設定 preloaded_docker_images ,你就無法對它啟動 Databricks 容器服務的運算。 建立一個已設定 preloaded_docker_images 的新集區。
對於使用 preloaded_docker_images 建立的集區,任何針對該集區啟動的運算資源都必須在其建立要求中提供相符的 docker_image。 否則,運算建立會因 'docker_image' must be provided for cluster created with instance pool: <pool-id> 而失敗。
從原有的 Databricks 容器服務遷移
Databricks 容器服務用於標準運算,與原始 專用運算的 Databricks 容器服務不同。 此特性有以下差異:
- 工作負載透過 Spark Connect 協定執行。
- Init 腳本不會修改你工作負載的 Python 環境。 你必須在 Docker 映像中安裝所有 Python 相依套件。 你可以繼續使用初始化腳本來處理使用 Spark 資料的應用程式,例如 Datadog 或 Kafka 代理程式。
若要從原始 Databricks 容器服務遷移到專用運算,請在 Databricks 容器服務中重建您的自訂映像檔以進行標準運算,並更新您的計算設定:
- 將 Dockerfile 中的
FROM那一行替換為一個基礎映像,且該映像的 最低 Databricks Runtime 需求 必須由你的目標執行環境滿足。 對於 AWS Graviton,請使用相應-arm的映像檔變體。 - 把你的 Dockerfile 指令移植到新的基礎映像檔。 支援標準 Dockerfile 指令,但不包括 步驟 2:建立自訂映像 中列出的例外情況。
- 把Python套件安裝到
/databricks/python3,而不是其他虛擬環境。 工作負載(筆記本、Python wheel 作業、Python 指令碼作業)會從此路徑讀取。 - 更新你的運算設定,使用 標準 存取模式,並選擇符合 基礎映像最小需求的 Databricks 執行時版本。
- 將任何先前 init 腳本執行的 Python 環境設定移到 Dockerfile。
Limitations
除了標準運算 的限制外,Databricks Container Services 的標準運算還有以下限制:
- 不支援計算範圍函式庫。
- 不支援私人套件倉庫。
- Databricks 的 機器學習 執行環境不被支援。
- 要用 Databricks 容器服務對 實例池啟動標準運算,必須以
preloaded_docker_imagesset 建立該池。 請參見「 使用 Databricks 容器服務搭配實例池」。
故障排除
如果您在建立運算資源時,未在 進階 下看到 Docker 索引標籤,表示您的工作區未啟用 Databricks Container Services。 工作區管理員必須在工作區啟用此功能,使用者才能指定 Docker 映像。 請參見 啟用容器服務。
Docker 分頁也可以由隱藏 docker_image.url 屬性的運算政策隱藏。 如果功能已啟用但分頁仍然缺失,請請工作區管理員檢查分配給你的政策是否隱藏了這個屬性。 請參見 支援屬性。