06、SQL Server大數據羣集進階--理解大數據構架
之前創建了一個SQL BigData羣集,也進行了HDFS連接查詢的操作,一切看起來都挺簡單的,也能運行起來。但是也沒發現有什麼特別之處,與普通的SQL實例相比也好像沒有區別。因此我們要更加深入的學習和剖析大數據羣集。
大數據構架目標是實現大數據的導入、存儲、管理、查詢、分析、預測。
數據導入
首先需要完成數據的導入工作。在任何大型數據系統中, 您都需要一種將數據引入的方法。在某些情況下, 您將使用名爲 "提取、轉換和加載" (ETL) 的過程在傳入或暫存數據的過程中編輯數據, 或者使用稱爲 "提取、加載和轉換" (ETL) 的過程
ETL 的過程來說有很多方法實現。在SQL Server中有比如:
-
SSIS 實現數據的加載傳輸
-
使用應用程序
-
使用BCP
-
使用數據工廠
本文不重點討論數據的傳輸的工作,因此不一一做介紹。簡單來講,數據的裝載工作就是將不同的數據安裝你想需要的結果進行相應的轉換、處理、保存的工作。
數據存儲
大數據存儲是一個很麻煩的事情,在關係數據庫中一般來說超過TB級別的數據庫並不多見,在實際上DBA也不會建議業務數據庫過大,都會採取分庫機制,講歷史庫存放起來。儘量減小在線庫的大小。這樣加快查詢速度,也減輕運維的難度。
但是大數據由於數據來源多樣性,有結構化和非結構化的。同時由於分析的訴求,也需要存放足夠多的歷史數據,才能進行分析和預測。因此在大數據環境中數以PB級別的數據也是常見的。在現有的硬件條件和雲計算環境下,存放PB級別的數據並不是難事。但是如何進行管理並且提供查詢,這樣變得非常困難。因此在設計中就會採用分佈式的方式進行存放數據,並且用分佈式計算方式進行查詢。目前在大多數的情況下數據存放就需要有HDFS這樣的技術來實現存儲池。
由於 HDFS 是一個文件系統, 數據傳輸和存儲中在很大程度上是將其用作掛載點使用。儘管 HDFS 系統的平臺和位置會影響可用的選擇, 但通常使用以下方法:
-
如果您的 HDFS 掛載點是本地的, 則可以使用多個工具將數據傳輸到HDFS,包括將其作爲文件系統掛接到Linux
-
使用網絡文件系統 (NFS)網關可以訪問 HDFS 裝入點
-
Python 代碼裝載 HDFS, 允許您以編程方式訪問裝入點。
-
如果 HDFS 位於雲中, 則每個提供程序都有訪問該數據的方法。Microsoft Azure 有多種承載 HDFS 的方法, 將數據傳輸到 Azure 內幾乎任何位置,常用方法是使用Azure 數據工廠。
計算
大數據處理最後是需要進行分析和預測的,這些工作都需要大量的計算能力。構架上都會使用分佈式計算的方式去實現。 Windows 和 Linux (在 x86 體系結構中) 都是對稱多處理系統, 這意味着所有處理器都是作爲一個單元處理的。一般情況下, 分佈式處理系統應該在 "頭" 節點上有更大、更多的處理器。 但對於某些用途如深度學習或人工智能, 在環境中使用特定內置的處理器GPU, 在某些情況下如邊緣計算,ARM 芯片可以發揮特定的任務。
內存
分佈式處理系統中的存儲節點需要少量內存, SQL Server BDC 中包含的框架 (Spark) 中的處理節點需要更多內存。Linux 和 Windows 都支持大量內存 , 並且不需要對內存進行特殊配置。
容器技術
大數據技術裏面重要的技術實現是容器技術。 在之前的技術手段裏面使用虛擬機儘量的去抽象出操作系統和應用,虛擬機的好處是提供了完整的操作系統,也能使用模板去部署應用,但是對於應用來講不夠靈活。
而在新的技術裏面誕生了容器技術。容器技術裏面現在通用的是Docker,Docker 容器由 Docker 運行引擎提供, 該引擎位於操作系統 (Windows 或 Linux) 之上。在此抽象中, 您不控制硬件或操作系統。容器中的內核非常小, 並且可以包含二進制文件, 如 Python、R、SQL Server 或其他二進制文件。包含其所有二進制文件的容器稱爲"Image"。(注: 容器映像內核可以在 Windows 或 Linux 上運行)
image 爲應用程序將其與其他正在運行的進程隔離開來。它也是完全可移植的。你可以在一個系統上創建一個映像, 另一個系統只要安裝了 Docker 運行時就可以運行它。容器也啓動非常快, 很容易創建, SQL Server 就是可以部署再容器上.根據硬件資源量, 您可以隨時運行多個容器。對於橫向擴展系統, 容器允許僅使用聲明性命令分發和控制完整的應用程序。
大數據羣集技術:K8S
對於大數據系統, 擁有大量的容器對於分割用途和性能配置文件非常有利。但是, 處理許多容器映像, 允許持久存儲, 並將它們互連用於網絡和網絡間通信是一項複雜的任務。Kubernetes是一個開源容器協調器, 它可以根據需要擴展容器部署。下表定義了一些重要的 Kubernetes 術語
組件 | 用途 |
---|---|
集羣 | Kubernetes 羣集是一組稱爲節點的計算機。控制羣集節點稱爲主節點;其餘節點是工作節點。 Kubernetes 主節點負責在節點之間分配工作, 並負責監測集羣的運行狀況。 |
節點 | 節點運行容器化的應用程序。它可以是物理計算機, 也可以是虛擬機。 Kubernetes 羣集可以包含物理計算機和虛擬機節點的混合。 |
Pod | Pod是部署的最小單位。Pod是一個由一個或多個容器和相關資源組成的邏輯組, 這些資源是運行應用程序所需的。每個Pod在節點上運行; 一個節點可以運行一個或多個Pod。Kubernetes 主機會自動將Pod分配給羣集中的節點。 |
大數據羣集分佈式存儲技術
正如您前面瞭解到的那樣, 傳統存儲使用從操作系統到底層 I/O 系統的調用。這些文件系統要麼直接連接到操作系統, 要麼看起來是直接使用存儲區域網絡連接的。數據塊由操作系統存儲和管理。
對於大型橫向擴展數據系統, I/O的安裝點是另一個抽象。對於 SQL Server BDC, 最常用的橫向擴展文件系統是Hadoop 數據文件系統 (Hdfs). HDFS 是一組 Java 代碼, 它將不同的磁盤子系統收集到一個羣集中, 該羣集由各種節點組成-一個用於管理羣集元數據的Namenode和物理存儲數據的 datanode 。文件和目錄在 NameNode 上由一個稱爲inodes 的結構表示。Inode 記錄權限、修改和訪問時間以及命名空間和磁盤空間配額等屬性。
對於容器等抽象, 存儲成爲一個問題, 原因有二:第一: 當刪除容器時, 存儲可能會消失, 其二""其他容器和技術則無法輕鬆地訪問容器中的存儲。
爲了解決這個問題, Docker 實現了卷的概念, kubernetes 擴展了這一概念。使用特定的協議和命令, Kubernetes (以及在特定的 Sql SERVER BDC) 將存儲裝載爲持久卷, 並使用稱爲持久卷聲明的構造來訪問它。Kubernetes 卷是一個已裝入的目錄, 可供節點內的Pod中的容器訪問。
大數據技術: 使用與控制
有三個主要工具和實用程序將用於控制 SQL Server 大數據羣集:
-
kubectl
-
mssqlctl
-
Azure Data Studio
具體如何使用,在其他的文章中已有介紹。
SQL BigData構架理解
以上了解了關鍵的大數據的技術。現在來回顧SQL BigData的構架。回到之前的那張圖:
從圖上可以看到,從底層Kubernetes 管理的多個節點來承載整個平臺,每個Node 可以看做一個虛擬機。總體構架上實現計算池、存儲池、數據池。這些都由容器來承載。而每個池可以看做多個Pod的組成。
SQL BigData 大數據羣集組件
上面的構架中可以看到的大概的組成,下面這張圖能夠更能理解大數據羣集的組成和各組件之間的關係。大數據羣集實現數據虛擬化功能, 可以在獨立實例中使用 SQL Server 的大數據功能。爲了執行橫向擴展大數據, SQL Server 通過利用 Kubernetes 和其他幾個組件來實現大數據羣集。組件的目標主要實現對數據存儲管理、計算、控制的能力。
因此主要的組件就是控制平面、計算平面、數據平面
控制平面: Kubernetes 組件
大數據環境模塊中看到的, Kubernetes 中有多個組件可與 Sql server 大數據羣集配合使用。這些組件用於管理和監視解決方案:
Kubernetes Master Node | 在 K8S集羣中的一個專用節點, 用於管理和控制 Kubernetes 羣集。除了主節點之外, 控制安裝在每個節點上的服務還包括*kublet, kube-proxy 和 Docker* runtime engine. |
---|---|
Apache Knox | Apache Knox 網關是用於與羣集的 REST Api 和 Ui 交互的應用程序網關。Apache Knox網關爲 BDC 中的所有 REST 交互提供了一個單一的接入點。 |
Apache Livy | Apache Livy 提交 Jobs to Apache Spark |
Apache HIVE | 分佈式存儲數據庫存放 Spark 元數據 |
Grafana | SQL 羣集管理門戶使用的可視化和儀表板系統。 |
*Kibana | Kibana 是 SQL 羣集管理門戶使用的開源日誌可視化和搜索插件。 |
控制平面: 控制器服務
SQL Server BDC 中的控制器是使用mssqlctl實用程序部署的服務。它將與 SQL Server、Kubernetes、Spark 和 HDFS 的交互聯繫起來。
控制器服務提供以下核心功能:
-
管理羣集生命週期: 羣集引導 & 刪除、更新配置
-
管理主 SQL Server 實例
-
管理計算、數據和存儲池
-
公開監視工具以觀察羣集的狀態
-
公開故障排除工具以檢測和修復意外問題
-
管理羣集安全: 確保羣集終結點的安全, 管理用戶和角色, 爲羣集內通信配置憑據
-
管理升級的工作流程, 使其安全實施
-
管理羣集中狀態服務的高可用性和災難恢復
您有兩種使用控制器服務的方法: mssqlctl 實用程序和*Cluster Adminnstration Portal。與控制器服務的所有通信都是通過 HTTPS 上的 REST API 進行的。自簽名證書將在引導時自動生成。對控制器服務端點的身份驗證基於用戶名和密碼。這些憑據是在羣集引導時使用環境變量輸入進行配置的。
這些組件在 SQL Server 大數據羣集的控制器中使用:
SQL Server 2019 控制器服務 | 爲大型數據羣集提供橫向擴展計算資源。 |
---|---|
控制平面: SQL 服務器主實例
SQL Server 主實例是在 Kubernetes 羣集中的節點上的一個Pod中安裝 SQL Server 2019。可以使用與任何 SQL Server 實例相同的方式訪問它, 並將其用於OLTP、OLAP 或其他類型的工作負載。它已經配置了機器學習服務, 因此您可以使用全部 R、Python 和 Java 來處理羣集環境中的數據。
主實例存儲的元數據超出了 HIVE 存儲的元數據的範圍。它還包含 PolyBase 定義表, 除了標準的 SQL Server 系統數據庫外, SQL 主實例還包含以下內容:
-
包含 hdfs 表元數據的元數據數據庫
-
數據平面分片地圖
-
提供對羣集數據平面的訪問的外部表的詳細信息。
-
在用戶數據庫中定義的多邊形基外部數據源和外部表。
這些組件在 SQL Server 主實例的控制器中使用:
SQL Server 2019 主實例 | SQL Server 主實例爲羣集提供了一個外部可訪問的 TDS 終結點。 |
---|---|
SQL Server 可擴展性框架 | 用於在 SQL Server 中執行 Java、R 和 Python 代碼中的機器學習和其他功能。 |
計算平面: 計算池
計算池包含一個或多個 SQL Server Pod, 用於在 SQL Server 主實例的指導下進行分佈式處理。它爲 BDC 的分佈式計算層對 polybase 連接器進行調用。
這些組件在 SQL Server 大數據羣集的計算池中使用:
SQL Server 2019 | 爲大型數據羣集提供橫向擴展計算資源。 |
---|---|
計算平面: 應用池
應用程序池是節點內的一組 Pod, 它將多種類型的端點保存到系統中。SQL Server 集成服務位於應用池中, 其他作業系統也是可能的。您可以將長時間運行的作業 (如物聯網流) 或機器學習 (ml) 終結點安裝爲實例, 用於爲預測打分或返回分類。
這些組件在 SQL Server 大數據羣集的計算池中使用:
Kubernetes Node | 爲操作大數據羣集提供計算資源。 |
---|---|
數據平面: 數據池
SQL Server 大數據羣集中的數據池由一個或多個 SQL Server 數據池實例組成。SQL 數據池實例爲羣集提供持久的 SQL Server 存儲。數據池用於從 SQL 查詢或 Spark 作業中獲取數據。爲了在大型數據集中提供更好的性能, 數據池中的數據被分佈到成員 SQL 數據池實例中的分片中。
這些組件在 SQL Server 大數據羣集的數據池中使用:
Sqlserver | 爲大數據羣集提供縮放的數據存儲。 |
---|---|
Polybase Feature | 用於處理外部表。 |
數據平面: 存儲池
存儲池由 Linux 上的 SQL Server、Spark 和 HDFS 組成的存儲節點組成。SQL 大數據羣集中的所有存儲節點都是 HDFS 羣集中的成員。您可以將其用作 "數據湖" 構造, 以處理存儲在不同數據源上的大量數據集。
在存儲池內, 存儲節點負責通過 Spark (Hdfs (Parquet 格式) 的數據存儲) 接收數據。HDFS 還提供了數據持久性, 因爲 HDFS 數據分佈在 SQL 大數據羣集中的所有存儲節點上。存儲節點還通過 HDFS 和 SQL Server 終結點提供數據訪問。
這些組件在 SQL Server 大數據集集中的存儲池中使用:
**HDFS | SQL Server 和 Apache Spark 使用的分佈式數據存儲系統。 |
---|---|
Apache Spark | Apache Spark 是用於處理大規模數據的分析引擎。它可以與存儲在 HDFS 中的數據一起使用, 並且還具有用於處理 SQL Server 中的數據的連接器。 |
總結
SQL Bigdata 使用K8s技術實現快速的部署,創建,也實現存儲的管理。SQL Server 大數據羣集允許你部署的 Kubernetes 上運行的 SQL Server、 Spark 和 HDFS 容器的可縮放羣集。 並行運行這些組件,以使您能夠讀取、 寫入,並處理從 TRANSACT-SQL 或 Spark 的大數據、 使您輕鬆合併和分析大數據大容量高價值關係數據。SQL Server 大數據羣集提供在如何與你的大數據進行交互的靈活性。 您可以查詢外部數據源,將大數據存儲在 HDFS 由 SQL Server 或通過羣集的多個外部數據源查詢數據。 然後,您可以使用數據的 AI、 機器學習和其他分析任務。
作者簡介: Max Shen(阿特),爲了成爲數據專家而努力,萬一實現了呢!有多年的系統運維,數據庫運維經驗。近20年的IT從業經驗,在微軟有超過10年的工作經驗。對數據庫運維調優,排錯,有獨到能力。電話微信18628037379,[email protected]