SQL Server 巨量資料叢集中的應用程式部署簡介

適用於:SQL Server 2019 (15.x)

重要

Microsoft SQL Server 2019 巨量資料叢集附加元件將會淘汰。 SQL Server 2019 巨量資料叢集的支援將於 2025 年 2 月 28 日結束。 平台上將完全支援含軟體保證 SQL Server 2019 的所有現有使用者,而且軟體將會持續透過 SQL Server 累積更新來維護,直到該時間為止。 如需詳細資訊,請參閱公告部落格文章Microsoft SQL Server 平台上的巨量資料選項

應用程式部署提供了建立、管理和執行應用程式的介面,以在 SQL Server 巨量資料叢集上部署應用程式。 在巨量資料叢集上部署的應用程式可受益於叢集的計算能力,且可以存取叢集上可用的資料。 這會增加應用程式的延展性和效能,同時管理資料所在的應用程式。 SQL Server 巨量資料叢集上支援的應用程式執行階段為 R、Python、dtexec 與 MLeap。

下列各節描述應用程式部署的架構和功能。

應用程式部署架構

應用程式部署是由控制器和應用程式執行階段處理常式所組成。 建立應用程式時,會提供規格檔案 (spec.yaml)。 此 spec.yaml 檔案包含控制器為了成功部署應用程式所需知道的所有內容。 下列是 spec.yaml 內容的範例:

#spec.yaml
name: add-app #name of your python script
version: v1  #version of the app
runtime: Python #the language this app uses (R or Python)
src: ./add.py #full path to the location of the app
entrypoint: add #the function that will be called upon execution
replicas: 1  #number of replicas needed
poolsize: 1  #the pool size that you need your app to scale
inputs:  #input parameters that the app expects and the type
  x: int
  y: int
output: #output parameter the app expects and the type
  result: int

控制器會檢查 spec.yaml 檔案中指定的 runtime,並呼叫對應的執行階段處理常式。 執行階段處理常式會建立應用程式。 首先,會建立包含一或多個 Pod 的 Kubernetes 複本集,其中每個 Pod 都包含要部署的應用程式。 Pod 數目是由應用程式 spec.yaml 檔案中設定的 replicas 參數所定義。 每個 Pod 都可以具有一個以上的集區。 集區數目是由 spec.yaml 檔案中設定的 poolsize 參數所定義。

這些設定會決定部署可以平行處理的要求數目。 一個特定時間的要求數目上限等於 replicas 乘上 poolsize。 如果您有 5 個複本,每個複本有 2 個集區,則部署可以平行處理 10 個要求。 下圖為 replicaspoolsize 的圖形表示:

Poolsize and replicas

建立複本集並啟動 Pod 之後,即會建立 cron 作業 (如果已在 spec.yaml 檔案中設定 schedule )。 最後,會建立可用於管理與執行應用程式的 Kubernetes 服務 (請參閱下方)。

執行應用程式時,應用程式的 Kubernetes 服務會將要求傳送給複本並傳回結果。

OpenShift 上應用程式部署的安全性考量

SQL Server 2019 CU5 可支援 Red Hat OpenShift 上 BDC 部署,以及 BDC 的已更新安全性模型,因此不再需要特殊權限容器。 對於使用 SQL Server 2019 CU5 的所有新部署,除了沒有特殊權限以外,容器預設還會以非根使用者的身分執行。

在 CU5 版本中,使用應用程式部署介面部署的應用程式安裝步驟,執行身分仍然必須是「根」使用者。 這是必要項目,因為在安裝期間,系統會安裝應用程式將使用的額外套件。 部署為應用程式一部分的其他使用者程式碼,將會以低權限使用者的身分執行。

此外,CAP_AUDIT_WRITE 功能是允許使用 Cron 作業為 SQL Server Integration Services (SSIS) 應用程式排程所需的選擇性功能。 當應用程式的 YAML 規格檔案指定排程時,會透過 Cron 作業觸發應用程式,這需要額外的功能。 或者,您可以視需要透過 Web 服務呼叫來使用 azdata app run 觸發應用程式,這不需要 CAP_AUDIT_WRITE 功能。 請注意,從 SQL Server 2019 CU8 版本開始,cronjob 不再需要 CAP_AUDIT_WRITE 功能。

注意

OpenShift 部署一文中的自訂 SCC 不包含此功能,因為 BDC 的預設部署不需要該功能。 若要啟用此功能,必須先更新自訂 SCC YAML 檔案,才能包含 CAP_AUDIT_WRITE。

...
allowedCapabilities:
- SETUID
- SETGID
- CHOWN
- SYS_PTRACE
- AUDIT_WRITE
...

如何在巨量資料叢集內使用應用程式部署

應用程式部署的兩個主要介面為:

您也可以使用 RESTful Web 服務來執行應用程式。 如需詳細資訊,請參閱取用巨量資料叢集上的應用程式

應用程式部署案例

應用程式部署可提供建立、管理和執行應用程式的介面,以在 SQL Server BDC 上部署應用程式。

Identify sources (R, Python, SSIS (dtexec), deploy with command line, Azure Data Studio, or Visual Studio Code, and consume them with an interactive, RESTful API schedule.

以下是應用程式部署的目標案例:

  • 在巨量資料叢集內部署 Python 或 R Web 服務,以解決各種使用案例,例如機器學習推斷、API 服務等。
  • 使用 MLeap 引擎建立機器學習推斷端點。
  • 使用 dtexec 公用程式從 DTSX 檔案排程和執行套件,以進行資料轉換和移動。

使用應用程式部署 Python 執行階段

在應用程式部署中,BDC Python 執行階段可讓巨量資料叢集內的 Python 應用程式解決各種使用案例,例如機器學習推斷、API 服務等等。

應用程式部署 Python 執行階段會在 SQL Server 巨量資料叢集 CU10+ 上使用 Python 3.8。

在應用程式部署中,您可以在 spec.yaml 提供控制器需要知道才能部署應用程式的資訊。 以下是可以指定的欄位:

  • name:應用程式名稱
  • version:例如,應用程式版本,如 v1
  • runtime:應用程式部署執行階段,您必須將其指定為:Python
  • src:Python 應用程式的路徑
  • entry point:src 指令碼中,要為此 Python 應用程式執行的進入點函式。

除了上述欄位之外,您還需要指定 Python 應用程式的輸入和輸出。 這會產生 spec.yaml 檔案,類似如下:

#spec.yaml
name: add-app
version: v1
runtime: Python
src: ./add.py
entrypoint: add
replicas: 1
poolsize: 1
inputs:
  x: int
  y: int
output:
  result: int

您可以建立部署在巨量資料叢集上執行的 Python 應用程式所需的基本資料夾和檔案結構:

azdata app init --template python --name hello-py --version v1

如需後續步驟,請參閱如何在 SQL Server 巨量資料叢集上部署應用程式

應用程式部署 Python 執行階段的限制

應用程式部署 Python 執行階段不支援排程案例。 部署 Python 應用程式並在 BDC 中執行之後,RESTful 端點會設定為接聽連入要求。

使用應用程式部署 R 執行階段

在應用程式部署中,BDC Python 執行階段可讓巨量資料叢集內的 R 應用程式解決各種使用案例,例如機器學習推斷、API 服務等等。

應用程式部署 R 執行階段會在 SQL Server 巨量資料叢集 CU10+ 上使用 Microsoft R Open (MRO) 3.5.2 版。

使用方式

在應用程式部署中,您可以在 spec.yaml 提供控制器需要知道才能部署應用程式的資訊。 以下是可以指定的欄位:

  • name:應用程式名稱
  • version:例如,應用程式版本,如 v1
  • runtime:應用程式部署執行階段,您必須將其指定為:R
  • src:R 應用程式的路徑
  • entry point:執行此 R 應用程式的進入點

除了上述欄位之外,您還需要指定 R 應用程式的輸入和輸出。 這會產生 spec.yaml 檔案,類似如下:

#spec.yaml
name: roll-dice
version: v1
runtime: R
src: ./roll-dice.R
entrypoint: rollEm
replicas: 1
poolsize: 1
inputs:
  x: integer
output:
  result: data.fram

您可以使用下列命令來建立部署新 R 應用程式所需的基本資料夾和檔案結構:

azdata app init --template r --name hello-r --version v1

如需後續步驟,請參閱如何在 SQL Server 巨量資料叢集上部署應用程式

R 執行階段的限制

這些限制與 2023 年 7 月 1 日淘汰的 Microsoft R 應用程式網路一致。 如需詳細資訊和因應措施,請參閱<Microsoft R 應用程式網路淘汰>

使用應用程式部署 dtexec 執行階段

在應用程式部署中,巨量資料叢集執行階段整合的 dtexec 公用程式來自 Linux 上的 SSIS (mssql-server-is)。 應用程式部署會使用 dtexec 公用程式從 *.dtsx 檔案載入套件。 其支援透過 Web 服務要求,以 cron 樣式排程或隨選方式執行 SSIS 套件。

此功能使用 Linux 上 SQL Server 2019 Integration Service 中的 /opt/ssis/bin/dtexec /FILE。 其支援 Linux 上的 SQL Server 2019 Integration Service (mssql-server-is 15.0.2) 的 dtsx 格式。 若要深入了解 dtexec 公用程式,請參閱 dtexec 公用程式

在應用程式部署中,您可以在 spec.yaml 提供控制器需要知道才能部署應用程式的資訊。 以下是可以指定的欄位:

  • name:應用程式 name

  • version:例如,應用程式版本,如 v1

  • runtime:應用程式部署執行階段,若要執行 dtexec 公用程式,您必須將其指定為:SSIS

  • entrypoint:指定進入點,這在我們的案例中通常是您的 .dtsx 檔案。

  • options:指定 /opt/ssis/bin/dtexec /FILE 的其他選項,例如,若要使用連接字串連線到資料庫,其會遵循下列模式:

    /REP V /CONN "sqldatabasename"\;"\"Data Source=xx;User ID=xx;Password=xx\""
    

    如需語法的詳細資訊,請參閱 dtexec 公用程式

  • schedule:指定作業需要執行的頻率,例如,使用 cron 運算式指定此值會指定為 "*/1 * * * *",這表示工作是以分鐘為基礎執行的。

您可以使用下列命令來建立部署新 SSIS 應用程式所需的基本資料夾和檔案結構:

azdata app init --name hello-is –version v1 --template ssis                                 

這會產生 spec.yaml 檔案,類似如下:

#spec.yaml
entrypoint: ./hello.dtsx
name: hello-is
options: /REP V
poolsize: 2
replicas: 2
runtime: SSIS
schedule: '*/2 * * * *'
version: v1

此範例也會建立範例 hello.dtsx 套件。

您所有的應用程式檔案都位於與 spec.yaml 相同的目錄中。 spec.yaml 必須位於您應用程式原始程式碼目錄的根層級,包括 dtsx 檔案。

如需後續步驟,請參閱如何在 SQL Server 巨量資料叢集上部署應用程式

dtexec 公用程式執行階段的限制

Linux 上 SQL Server Integration Services (SSIS) 的所有限制和已知問題都適用於 SQL Server 巨量資料叢集。 您可以從 Linux 上的 SSIS 限制和已知問題中了解更多資訊。

使用應用程式部署 MLeap 執行階段

應用程式部署 MLeap 執行階段支援 MLeap Service v0.13.0。

在應用程式部署中,您可以在 spec.yaml 提供控制器需要知道才能部署應用程式的資訊。 以下是可以指定的欄位:

  • name:應用程式名稱
  • version:例如,應用程式版本,如 v1
  • runtime:應用程式部署執行階段,您必須將其指定為:Mleap

除了上述欄位之外,您還需要指定 MLeap 應用程式的 bundleFileName。 這會產生 spec.yaml 檔案,類似如下:

#spec.yaml
name: mleap-census
version: v1
runtime: Mleap
bundleFileName: census-bundle.zip
replicas: 1

您可以使用下列命令來建立部署新 MLeap 應用程式所需的基本資料夾和檔案結構:

azdata app init --template mleap --name hello-mleap --version v1

如需後續步驟,請參閱如何在 SQL Server 巨量資料叢集上部署應用程式

MLeap 執行階段的限制

這些限制與 MLeap 開放原始碼專案 GitHub 上的 Combust的願景一致。

下一步

若要深入了解如何在 SQL Server 巨量資料叢集上建立並執行應用程式,請參閱下列各項:

若要深入了解 SQL Server 巨量資料叢集,請參閱下列概觀: