SQL Server 2019 Big Data Cluster 的介紹和應用

奇軒 (Qi-Xuan Lu)
9 min readMay 29, 2020
Photo by fabio on Unsplash

介紹

大家好,今天這篇文章要跟大家介紹 SQL Server 2019 Big Data Cluster(以下簡稱 BDC)的一些基本概念,以及最重要的是,為甚麼要使用這項技術。

先附上架構圖:

圖片來源: 官方文件

從架構圖上可以看到,如果要用一句話來形容 BDC 的話,基本上它是根基於 Kubernetes(K8s) 和 SQL Server 2019 為核心,處理結構和非結構資料的分散式運算的架構

BDC 上幾乎每個元件和服務都是一個 container 且運行在 K8s 的叢集之上,許多網路、Docker image 的設定,都已經由微軟官方設定好,不用自己從頭到尾做苦工,還不一定能設定好。

擁有甚麼元件?

上面有提到 BDC 運作在 K8s 上,裡面用到 K8s Master Node、Apache Knox(Application gateway 處理 REST API)、Apache Livy(向 Spark 發出 Job)、Apache Kibana(監看叢集 logs 的面板) 等等,這些偏向底層的工具,以下則說明側重於 BDC 本身的元件。

Controller

負責控管及部署 BDC 所有元件,例如和 K8s 、SQL Servers 或是 Spark 及 HDFS 等互動。

幾個重要的功能:

  • 管理叢集的生命週期
  • 管理 SQL Server Master Instance
  • 讓監測工具能觀察叢集的歷史紀錄和狀態
  • 管理叢集的安全性

SQL Server Master Instance

它屬於 K8s 上面的一個 pod,跟一般的 SQL Server 擁有相同的功能,同時還儲存 HDFS 的 meta data 和 external table,通常要使用其他 BDC 的元件會先從它開始啟動,並把指令傳遞到 Compute pool 執行。

Compute Pool

裡面會有一至多個 SQL Server 的 pods,幫助使用者從 Master Instance 傳來的指令作分散式的運算,加塊整體運算的速度。

Storage Pool

圖片來源: 官方工作坊

由一到多個 pods 組成,每一個 pod 有三個部分組成,分別是 SQL Server、Spark、HDFS。看到 HDFS 就知道這其實是 BDC 的 Data Lake,我們可以透過 Spark 去處理裡面的資料。另外一個重點,你可以在 SQL Server Master Instance 上創建好 external table,資料來源設定在 HDFS,就能用熟悉的 SQL 去 query 資料並拉回 Master Instance。

Data Pool

圖片來源: 官方工作坊

由一到多個 pods 組成,透過 SQL Server 把資料分散儲存在 shards 裡面。可以把它當成是可以擴充的 Data Marts,利用 ETL 把外部的資料匯入到上面,儲存一些比較常用的資料,方便後續存取資料的效率。

App Pool

也是由一到多個 pods 組成,可以把一些訓練好的模型部署到上頭,直接服務內部或外部的 request,這個元件不是必需的,所以當你有需要的時候,再透過 azdata(一個用 Python 寫好,透過 REST API 專門用來和 BDC 互動的 CLI)動態創建 App Pod,並部署應用程式上去。

目前以下三種部署型態都支援:

  • R and Python apps (functions, models, and apps)
  • MLeap Serving
  • SQL Server Integration Services (SSIS)

解決了甚麼問題?

資料虛擬化

透過 Data virtualization (背後用 PolyBase 當作技術支撐),只需要在 BDC 內定義好 External Source及 External Table,不需要複製或搬移資料,就能在 BDC 內直接對下 SQL Query 拿到你想要的資料,即便它儲存在不同的資料庫和儲存體上,雲端或地端上面。譬如下圖 External Source 是 Oracle,指定好那個裡面某一個 Table 為 External Table,就能對它下 SQL Query。Data virtualization 解決以前需要複雜 ETL 才能拿到這些巨量資料的問題(資料孤島),以及資料儲存的昂貴的成本,我不需要在不同資料來源處額外複製相同、但不需要的資料。

另外考量的是效能面,上面架構圖可以看到 BDC 擁有多個 compute instance,能幫助大幅分散式加速運算,節省大量的時間成本。例如我能從外部 Streaming 資料進 BDC 儲存在 Storage Pool(Data Lake)上,透過 Spark 快速轉換,把乾淨的資料或是需要經常使用到的資料,選擇放在 Data pool 中(Data marts),降低下次要查找的時間。

圖片來源: 官方工作坊

管理結構和非結構化資料

傳統上結構和非結構化資料需要分開的資料庫或資料湖個別去管理,BDC 上內建 Spark、SQL Server、HDFS,在統一的 Azure Data Studio 開發工具上(類似 Jupyter notebook 的介面),選定好 Spark 或 SQL 的 kernel,就能方便地用自己習慣的方式直接對 HDFS 寫入或讀取資料。例如你可以使用 PySpark 或 T-SQL,把資料從 HDFS 裡面撈取出來處理,BDC 都會幫你做最佳化的運算,加快處理的速度。

此外,SQL Server Master Instance 本身就能存取結構化的資料,可以和 External Table(存放 HDFS 上的 Meta data)結合,將結構化和非結構化兩者結合在一起,在同一個系統內獲得更多的資料洞察。

整合 AI

企業內部要把 Machine learning 模型部署進 production 的環境是一件非常複雜的事情,BDC 可以使用內建 Spark ML 分散式訓練好模型,把這個模型直接部署到 App pool 中,讓內外部使用者透過 REST API 呼叫,或是把模型部署到 SQL Server Master Instance 當中,在處理 Transaction 的同時就能做出預測。

如果不熟悉 Spark ML 的人也可以用內建好的 SQL Server Machine Learning Service,只要在 SQL Server Master Instance 上啟動這個服務,就能在裡面用 SQL 語法定義好 Input,並附上 Python 或 R 的 腳本,去訓練模型並將它直接部署在 SQL Server Master Instance,之後透過 stored procedure 就能呼叫這個訓練好的模型直接做出預測。

綜合上述兩段,大概可以知道 BDC 和 AI 整合的非常緊密,在同一個系統內就能完成整套 Machine Learning 的流程。

圖片來源: 官方文件

部署及客製化

部署的過程非常輕鬆,你可以先建立好 K8s 以後,執行類似像下面的指令

azdata bdc config init — source aks-dev-test — target custom-bdc

也可以透過類似像底下的 JSON 檔去客製化符合自己需求的 BDC。譬如底下我可以設定我需要幾個 compute pods,Spark 有多少的記憶體,在 Spark 官方文件上面有列出的設定大部分都能配置。

安全性

圖片來源: 官方文件

BDC 可以用 Azure Active Directory(AD)的模式部署,並讓使用者透過主要以上五種管道和 BDC 互動。使用者需要具備 AD 的身分才可以使用,針對部分元件存取的權限也能用 access control lists(ACL) 作控管。

你也可以用 basic administrator 的模式部署,就不需要 AD 的驗證了。用這種方式部署一開始會創建好帳號及密碼,就能用同一組帳密使用 BDC 通過很多元件的驗證,但通常是用來做測試用途,不太建議用在正式環境上。

另外,BDC 預設使用 SSL/TLS 加密和外部以及內部元件彼此之間的訊息傳遞,增加 BDC 的安全性。

結論

SQL Server 2019 BDC 整合多個 Big Data 相關的 workloads 於一身,具備 end-to-end solution 的能力,從資料的產生,轉換,管理,分析,提供服務,都有相對應的功能去實現。最重要的是這樣強大的企業級 Big Data 架構,只要輕鬆透過 azdata 就能客製化配置出來,還可整合 AD 符合企業安全性的規範,並能快速落地實現。

實作

自行整理研發的工作坊: https://github.com/h164654156465/sqlserver-bdc/tree/46f677a952703de8ff5e35e23179d1403412f523

看完以上這些介紹,大家是不是想要動手嘗試看看了呢? 我這邊自己提供一系列的工作坊,帶你們在 Azure 上建立 K8s clusters,並部署 BDC,處理如何使用 Azure Data Studio 進行系統管理以及運用 PySpark 進行資料轉換與使用 SparkML 進行機器學習,並將訓練好的模型部署成 web service,供外部呼叫使用。

延伸閱讀

官方文件 https://docs.microsoft.com/en-us/sql/big-data-cluster/big-data-cluster-overview?view=sql-server-ver15

官方工作坊 https://github.com/microsoft/sqlworkshops-bdc

如果你喜歡我的文章,請不吝嗇你的讚~

--

--

奇軒 (Qi-Xuan Lu)

Essentialist. Software engineer. Lives in New York City. 接納不完美的自己 過好生活的每一天。