天天看點

PDW V2教育訓練簡記

最近有幸參加了微軟專家進行的為期一周PDW教育訓練,将一些知識點記錄如下:

不知道PDW是什麼東西的,簡單介紹一下:這是微軟與HP/Dell合作推出的SQL

Server資料倉庫一體機,由HP或DELL提供硬體(機櫃,四台伺服器,兩台交換機,IB),再由微軟預裝PDW版本的SQL Server

2012。購買了以後,直接通電就可運作。容量當然是可以從TB級增長到PB級,處理性能比普通SQL Server

2012快幾十上百倍。主要用來進行大資料分析,不适合用于OLTP。

伺服器配置:

四台實體的伺服器:一台是控制伺服器,一台是故障轉移伺服器,兩台是計算節點伺服器。

控制伺服器上裝了四個VM,分别是CTL、VMM、AD和MAD,計算節點每個有8個VM,總共16個計算節點。

兩個計算節點通過SAS連接配接JBOD,四個伺服器通過IB連接配接。

四台實體伺服器做了叢集,在FabricDOM域裡,VM也進行了叢集,在APPDOM裡。

伺服器裝的是Windows 2012,不是R2。

盡管管理者密碼是知道的,但是一旦裝了其它東西,微軟就不再提供支援。

使用和管理

可以通過SQLCMD使用。

可以通過DWLoader加載資料。

可以通過VS2012/2013的SSDT進行連接配接,連接配接方式跟普通SQL

Server類似,但VS2012必須裝新版的SSDT才能正确連接配接到PDW。正确的連接配接狀态下,連接配接的圖示是一個資料庫叢集樣式,與普通的SQL

Server連接配接不同。其中的表,不同的表(複制表,分布表)的圖示也會有差別。連接配接以後,可以直接在VS裡面進行建立資料庫/表,修改等操作。沒有GUI,基本上需要用語句。

可以通過SSIS(VS2012/2013的BI項目類型)進行資料加載。這也是微軟推薦的導入資料的方式。

可以通過AdminConsole進行監控,通過DWconfig進行管理。

表結構

兩種表:複制表,分布表。複制表就是每個計算節點上都完全相同的表。分布表是根據標明的字段進行哈希後存儲在不同節點上的表。可以在建立時進行指定,也可以後期更改。

建立一個1G的複制表,會在每一個節點上都建立一個1G的表,建立一個16G的分布表,會在每個節點上建立1G的分表,合起來有16G。

建立表的操作是在CTL上進行的,PDW内部會建立一系列的SQL語句,到每個計算節點上分别建表,使用者不需要知道這些實際表的名字(其實也非常不可讀,加了很長的字元串)。CTL上的表實際是空殼。

許多字段類型不支援,包括GUID,Geometry,Text等。每行大小8k,沒有主鍵和外鍵,沒有自增,沒有唯一索引。總之就不是一個OLTP的資料庫。

基本上不應該進行資料更新和删除。删除應該直接使用Create TABLE as Select ...,類似于普通SQL的INSERT INTO ...

Select ...,但比後者快8倍。

DSQL和DataMovement是PDW的核心

DSQL就是在PDW上執行SQL語句,特别是指Join和Group的時候,需要内在的對表進行一系列操作。了解這個機制才能正确的設計資料庫。

Share

Nothing是執行SQL語句時最希望的方式,就是說不需要在計算節點之間移動資料,每個節點執行自己的語句,查詢結果發送給CTL,所有節點發送完畢,CTL把它們串起來就直接傳回給用戶端。沒有資料需要移動,沒有資料需要在CTL進行計算合并。

但Share

Nothing不是那麼輕易能做到的事情。多數情況下,都需要對資料進行移動,移動分為兩大類:一種是需要在計算節點之間移動資料,一種是将資料從計算節點移動到CTL節點。

複制表如果Inner Join分布表,不需要移動,複制表和複制表之間也不需要。單獨的複制表或分布表也不需要。

複雜的情況發生在分布表和分布表之間關聯查詢時。

以SELECT ... FROM A,B WHERE A.col1 = B.col1

AND A.col2 = value為例:如果A.col1和B.col1都是分布依據字段,而且資料類型完全相同,那麼就可以達到Share

Nothing的結果,性能最優。

隻要有其中一個字段不是分布依據,那就會産生資料移動,PDW内在的會判斷采用哪一種移動,如果有一個資料表很小,那麼會把它進行複制,就是變成複制表,這種叫做Broadcast

Move。其他情況下,會進行Shuffle

Move,将資料在節點之間進行重新分布,淡然最後資料會歸位。這樣會有性能開銷,但資料移動是分布資料庫不可避免的。

這決定了設計資料庫的時候,就應該考慮到使用的一些場景,會執行什麼樣的查詢語句,基本上可以說,明細表的ID是肯定不能拿來做分布依據的,起碼應該是類型ID之類的字段。

如果SQL語句中有Groupby語句,或者執行Count(),那麼不可避免地要進行Patition

Move,就是資料在節點上查詢計算好之後,将每個節點的SUM儲存到CTL節點,再進行彙總。

資料的移動還有很多種情況,但大多數情況就是上面這些。

應用模式

圍繞PDW應該建立其他的資料庫,進行專門化的工作。

1、OLTP的資料庫,是應用系統的直接資料庫,做增删查改。

2、Loading Server,将資料從OLTP分離出來後,儲存在一個Loading

Server上,ETL或者ELT導入到PDW。最佳辦法是部署SSIS包進行定期任務。

3、Reporting Server,部署分析服務和報表服務,将PDW的分析結果儲存在這個資料庫中,對上司上層進行服務。

4、Backup Server,進行PDW的備份,不需要高性能的計算量,隻需要高存儲,通過它再往錄音帶庫備份。PDW V1帶有backup

Server。從V2開始不帶,為了縮減成本,需要使用者自己搭建。

與Hadoop關系

通過叫Polybase的引擎,使你能像操作table那樣操作Hadoop,包括讀和寫。它的實質是将你的SQL轉換成MapReduce,在Hadoop中執行。

有三種方式搭建PDW支援的Hadoop:1.直接讓HP/DELL來給你搭建,往PDW機架上放兩個Hadoop伺服器;2.自己搭建,隻支援三家的Hadoop實作,包括微軟還有另外兩家的,名字沒記住。Apache的不支援;3.使用Windows

Azure的Hadoop,15分鐘之内就可以搭建完成。