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。
步驟 1:啟用 Databricks 容器服務以支援標準運算
若要使用 Databricks 容器服務進行標準運算,工作空間管理員必須從 預覽 頁面啟用此功能:
- 以管理員身份登入您的 Azure Databricks 工作空間。
- 從右上角的使用者選單中,點選 預覽。
- 找到用於標準運算的 DCS,然後將其開啟。
步驟二:建立你的自訂映像檔
這些說明教你如何透過擴充 Databricks 提供的基礎映像來建立自訂映像檔(建議)。 基礎映像包含啟動工作負載所需的相依性,例如 Ubuntu、Python 和 JDK。 你可以拉取 databricksruntime/environment:v5-standard、疊加套件,並繼承由 Databricks 管理的持續更新與安全修補程式。
如果你想從零開始建立一個最小基礎映像,請參考 :從零開始建立一個最小基礎映像。
步驟 2a:拉取基礎影像
若要拉取基礎映像檔,請執行:
docker pull databricksruntime/environment:v5-standard
步驟 2b:寫一個 Docker 檔來擴充基礎映像檔
將自訂的 Python 套件安裝到基礎映像的 /databricks/python3 虛擬環境中。 這是啟動你工作負載的系統虛擬環境。
FROM databricksruntime/environment:v5-standard
RUN /databricks/python3/bin/python -m pip install <your python package>
以下範例說明如何從私人儲存庫安裝套件。
FROM databricksruntime/environment:v5-standard
ENV PIP_INDEX_URL=https://pypi.org/simple
RUN /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 上啟動時,可能會無法啟動、悄悄停用某些功能,或停止運作。
參考:從零開始建立一個最小基礎映像檔
如果你需要完全掌控基礎映像的內容(例如為了符合嚴格的映像尺寸、供應鏈或合規要求),你可以從零開始建立一個最小的等價物 databricksruntime/environment:v5-standard ,而不是擴充它。
Warning
從零開始建造是一個進階選項。 你負責追蹤 v5-standard 映像上游端的變更,包括 Python 版本釘選、安全修補程式、平台工具,以及位於 /databricks/ 和 /etc/environment 之下的平台所需檔案。 相反地,Databricks 建議依照前文 databricksruntime/environment:v5-standard 所示延伸 。
Databricks 提供參考 Dockerfile 與 requirements.txt,重現 v5-standard 的基本Python環境。 在建立前,先將兩個檔案下載到同一個目錄:
-
Dockerfile (儲存為
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。
Note
若要針對 執行個體集區啟動,建立該集區時必須設定 preloaded_docker_images,且叢集的 docker_image 必須相符。 請參考啟動前使用 Databricks 容器服務與實例池 相關的說明。
使用UI啟動計算
在 建立計算頁面,確保 存取模式 設為 標準 , Databricks 執行時間 設為 18 LTS 或以上。 務必選擇 18 LTS,而不是 18.0、 18.1 或 18.2。
在 [進階] 中,選取 [Docker] 標籤頁。
選取 [ 使用您自己的 Docker 容器]。
在 Docker 映像檔網址 欄位,輸入你的自訂映像檔。
登記簿 標籤格式 Docker Hub <organization>/<repository>:<tag>(例如:databricksruntime/environment:v5-standard)Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>選取驗證類型。 請參閱 Docker 映像驗證。
Note
如果你在建立運算時看不到 Docker 設定,表示你的工作空間可能沒有啟用 Databricks 容器服務。 工作區管理員必須先啟用此功能,使用者才能指定 Docker 映像檔。 請參見 步驟 1:啟用 Databricks 容器服務以支援標準運算。
使用 API 啟動計算
以下是一個範例 API 呼叫,用你的自訂映像建立標準運算。 請確保 data_security_mode 設為 DATA_SECURITY_MODE_STANDARD,且 spark_version 設為 Databricks Runtime 18 LTS 或以上版本的值。 對於 Databricks Runtime 18 LTS,請使用 18.x-scala2.13、 ,而非 18.0.x-scala2.13、 18.1.x-scala2.13或 18.2.x-scala2.13。
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": "18.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這一行替換為FROM databricksruntime/environment:v5-standard(若為 AWS Graviton,則使用v5-standard-arm)。 - 把你的 Dockerfile 指令移植到新的基礎映像檔。 支援標準 Dockerfile 指令,但不包括 步驟 2:建立自訂映像 中列出的例外情況。
- 把Python套件安裝到
/databricks/python3,而不是其他虛擬環境。 工作負載(筆記本、Python wheel 作業、Python 指令碼作業)會從此路徑讀取。 - 更新你的運算設定,使用 標準 存取模式及 Databricks Runtime 18 LTS 或以上版本。 務必選擇 18 LTS,而不是 18.0、 18.1 或 18.2。
- 將任何先前 init 腳本執行的 Python 環境設定移到 Dockerfile。
Limitations
除了標準運算 的限制外,Databricks Container Services 的標準運算還有以下限制:
- 不支援計算範圍函式庫。
- 不支援私人套件倉庫。
- Databricks 的 機器學習 執行環境不被支援。
- 要用 Databricks 容器服務對 實例池啟動標準運算,必須以
preloaded_docker_imagesset 建立該池。 請參見「 使用 Databricks 容器服務搭配實例池」。
故障排除
如果您在建立運算資源時,未在 進階 下看到 Docker 索引標籤,表示您的工作區未啟用 Databricks Container Services。 工作區管理員必須在工作區啟用此功能,使用者才能指定 Docker 映像。 請參見 啟用容器服務。
Docker 分頁也可以由隱藏 docker_image.url 屬性的運算政策隱藏。 如果功能已啟用但分頁仍然缺失,請請工作區管理員檢查分配給你的政策是否隱藏了這個屬性。 請參見 支援屬性。