分享方式:


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 的圖形表示:

集區大小和複本

建立複本集並啟動 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 上部署應用程式。

識別來源 (R、Python、SSIS (dtexec)、使用命令列部署、Azure Data Studio 或 Visual Studio Code,並使用互動式 RESTful API 排程加以取用。

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

  • 在巨量資料叢集內部署 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 巨量資料叢集,請參閱下列概觀: