雲時代大數據管理引擎HAWQ+全面解讀
HAWQ,取自Hadoop With Query,這是一款原生Hadoop並行SQL引擎。同時作為一款面向企業的分析型資料庫HAWQ有很多優良的特性,例如它完整兼容ANSI-SQL標準語法, 支持標準JDBC/ODBC連接,支持ACID事務特性,高性能,擁有比傳統MPP資料庫更先進的彈性執行引擎,可以秒級動態加減節點,擁有各種容錯機制,支持多級資源和負載管理,提供Hadoop上PB級數據高性能互動式查詢能力,並且提供對主要BI工具的描述性分析支持,以及支持預測型分析的機器學習庫。
目前HAWQ屬於Apache的孵化項目,即將成為Apache頂級項目。由HAWQ創始團隊成立的偶數科技推出的HAWQ++則是基於Apache HAWQ的增強企業版。
HAWQ++體系架構
HAWQ++是典型的主從架構。其中有幾個Master節點:HAWQ++ master節點,HDFS master節點NameNode,YARN master節點ResourceManager。現階段HAWQ++元數據服務還集成在HAWQ++ master節點裡面,未來會獨立開來成為單獨的Catalog Service。將元數據獨立會帶來很多的好處,一方面可以將HAWQ++元數據與Hadoop集群元數據進行融合,另一方面可以不再區分HAWQ++ master/slave角色,任意節點都可以接收查詢處理查詢,更好地實現負載均衡。
HAWQ++每個Slave節點上都部署有一個HDFS DataNode,一個YARN NodeManager以及一個HAWQ++ Segment。其中YARN是可選組件。如果沒有YARN的話,HAWQ++會使用自己內置的資源管理器。HAWQ++ Segment在執行查詢的時候會啟動多個QE(Query Executor,查詢執行器)。查詢執行器運行在資源容器里。在這個架構下,節點可以動態的加入集群,並且不需要數據重分布。當一個節點加入集群時,它會向HAWQ++ Master節點發送心跳,然後就可以接收未來查詢了。
圖1 HAWQ++體系架構
HAWQ++內部架構
圖2是HAWQ++內部架構圖。可以看到在HAWQ++ Master節點內部有如下重要組件:查詢解析器,優化器,資源代理,資源管理器,HDFS元數據緩存,容錯服務,查詢派遣器和元數據服務。
在Slave節點上安裝有一個物理Segment,在查詢執行時,針對一個查詢,彈性執行引擎會啟動多個虛擬Segment同時執行查詢,節點間數據交換通過Interconnect(高速互聯網路)進行。如果一個查詢啟動了1000個虛擬Segment,意思是這個查詢被均勻的分成了1000份任務,這些任務會並行執行。所以說虛擬Segment數其實表明了查詢的並行度。查詢的並行度是由彈性執行引擎根據查詢大小以及當前資源使用情況動態確定的。這裡簡單說一下幾個組件的作用。Parser做詞法語法分析,生成一棵Parse Tree,交給Analyzer做語義分析生成一棵Query Tree,再經過基於規則系統的Rewriter將一棵Query Tree可能改寫成Query Tree List,交給優化器做邏輯優化和基於cost的物理優化,生成優化的並行Plan。資源管理器通過資源代理向全局資源管理器(比如YARN)動態申請資源並緩存資源,在不需要的時候返回資源。HDFS元數據緩存用於確定HAWQ++哪些Segment掃描表的哪些部分。因為HAWQ++的計算和數據是完全分離的,所以需要data locality信息把計算派遣到數據所在的地方。如果每個查詢都去訪問NameNode獲取位置信息會造成NameNode的瓶頸,所以建立了元數據緩存。容錯服務負責檢測哪些節點可用,哪些節點不可用。不可用的機器會被排除出資源池。優化完的Plan由查詢派遣器發送到各個節點上執行,並協調查詢執行的全過程。元數據服務負責存儲HAWQ++的各種元數據,包括資料庫和表信息,以及訪問許可權等等。高速互聯網路負責在各節點間傳輸數據,默認基於UDP協議。UDP協議不需要建立連接,可以避免TCP高並發連接數的限制。HAWQ++通過libhdfs3模塊訪問HDFS。libhdfs3是Hadoop Native的C/C++介面,相比JNI的介面具有部署方便,消耗資源少和高性能的優勢。
圖2 HAWQ++內部架構
HAWQ++並行優化器
接下來具體解釋一下HAWQ++並行優化器這個模塊,因為在一款資料庫系統里優化器在很大程度上決定了SQL執行性能的好壞。HAWQ++原生優化器是在PostgresSQL優化器的基礎上開發的,簡單來說就是在pg生成的串列plan上插入了Motion的操作。Motion代表數據的移動,底層是通過高速互聯網路實現的。基於插入的Motion,plan被切割成若干個Slice。同一個Slice在不同節點上可以並行執行。
Motion一共有三類:1.Redistribute Motion,負責按照hash鍵值重新分布數據;2.Broadcast Motion,負責廣播數據;3.Gather Motion,負責搜集數據到一起。
圖3中左邊的查詢計劃表示了一個不需要重新分布數據的例子,因為表lineitem和orders都使用了連接鍵進行分布。而如果這兩張表都是隨機分布,那麼就會生成右邊的查詢計劃,和左邊查詢計劃相比多了一個Redistribute Motion的節點。
可能有些人會有疑問,HAWQ++的數據存儲在HDFS上,如果遇到HDFS加減節點某個Datanode上的block可能會被rebalance到其他Datanode上,那麼對於hash分布的表不做Redistribute Motion怎麼能夠直接做HashJoin?原因在於對於hash分布的表HAWQ++有維護QE和寫入文件的映射關係,所以即便該文件某個block不在本地了,那麼影響的也只是對於該block的本地讀還是遠程讀,和是否需要做Redistribute Motion是沒有關係的。另外基於cost的物理優化的輸入數據來源於統計信息,因此預先通過analyze命令收集表的統計信息可以幫助優化器產生更為優化的Plan。
圖3 並行查詢計劃
HAWQ++查詢處理流程
圖4展示了圖3中右邊查詢計劃的處理流程。HAWQ++的Master節點收到客戶端的連接請求會啟動QD(Query Dispatcher,查詢派遣器),進入詞法分析,語法分析,語義分析,優化器生成並行的Plan,再根據查詢數據量大小以及當前資源使用情況,結合datalocality的信息,計算出需要啟動多少個virtual segment以及在哪些segment節點上啟動這些VSEG。接著dispatcher模塊會通過libpq協議連接這些segment節點啟動QE,同時把並行plan做序列化經過壓縮dispatch過去。VSEG是一個邏輯的概念,如圖4中包含任意一組分別執行slice1和slice2的QE進程。同一個slice在所有VSEG上的QE進程集合我們稱為一個gang。每一個QE收到屬於自己的slice構建一棵查詢執行器樹,樹中每一個節點稱做一個operator,對應各自的執行器節點實現邏輯。
HAWQ++整個執行流程是Pipeline的模式,從上往下pull數據。Gang與gang之間的slice通過Motion傳輸數據,最終所有數據通過Gather Motion彙集到Master節點上返回給客戶端。
圖4 查詢處理流程
HAWQ++彈性執行引擎
HAWQ++彈性執行引擎是區別於傳統MPP資料庫的關鍵技術。針對傳統MPP資料庫,比如Greenplum Database,因為Segment配置死板,SQL計算執行往往必須調動所有集群節點,造成資源浪費,約束SQL並發能力。每個節點又有各自獨佔的目錄和數據,對每個節點的可用性有比較嚴格的要求,擴展複雜。而HAWQ++引入的彈性執行引擎通過存儲和計算的完全分離使得我們可以啟動任意多個虛擬Segment來執行查詢。每一個Segment都是無狀態的,元數據和事務管理在Master節點實現,因此加入集群的Segment節點無需狀態同步,用戶可根據需要動態加減節點。
針對每一條具體的查詢,根據用戶配置、SQL特徵以及實時資料庫運轉狀態動態決定SQL執行的計算並發度,動態分配使用健康低負載節點。同時根據表數據塊分布動態分配IO任務到並行VSEG上,實現最優本地讀取比例,保障最優SQL執行性能。
HAWQ++可插拔外部存儲
HAWQ++可插拔外部存儲基於增強版的外部表讀寫框架開發完成,通過新框架HAWQ++可以更加高效地訪問更多類型外部存儲,可以實現可插拔文件系統,比如S3,Ceph等,以及可插拔文件格式,比如ORC,Parquet等。同內部表一樣,HAWQ++可以根據查詢數據量大小和資料庫資源利用率等動態調整集群中外部表讀寫並發數,根據數據分布選擇最優計算節點,從而達到優化和靈活控制外部表訪問性能的效果。
相比於Apache HAWQ原有的外部數據訪問方案PXF,可插拔外部存儲避免了數據傳輸路徑中的多次數據轉換,打破了通過固有並行度提供外部代理的方式,給用戶提供了更簡單更有效的數據導入導出方案,而且性能高數倍。
HAWQ++展望
目前HAWQ++還在持續不斷的開發過程當中,在不久的將來會推出高性能執行引擎以及添加update/delete 功能,成為雲時代大數據管理引擎當之無愧的領跑者。
作者:陶征霖
本文系作者在CCTC 2017大數據峰會上所做分享內容
量化投資實戰課程——全明星六大海龜豪華陣容傾囊相授
吳帆? AIMA中國區總經理
聶軍? 凱思博香港總經理
毛煜春? 安誠數盈董事長
張弘?深圳盈富總經理
林健武?量化總監
章贇? 量化總監
2017年6月16日—18日 上海
點擊展開全文


※陸銘:應警惕「大數據讓計劃成為可能」滑向政府萬能
※大盤暴跌2000點?照樣盈利!
※患者滿意度的提高=死亡率升高2倍+發病率增高1.5倍+抗生素增加8倍
TAG:大數據實驗室 |
※深度解讀!時序資料庫HiTSDB:分散式流式聚合引擎
※AAAChain:數據共享經濟的引擎?
※SEO&SEM 搜索引擎
※封鎖8年:NVIDIA PhysX物理引擎全部開源
※安全研究人員公布英特爾管理引擎JTAG漏洞PoC代碼……
※PLDA宣布推出兩個可在PCIe鏈路或AMBA AXI結構上提供強大性能和可擴展性的創新vDMA引擎IP解決方案
※POWER 9為雲與智能打造強大引擎
※MESON發布VR/AR搜索引擎Heymesh可同時搜索10個資源網站
※MySQL存儲引擎、MyISAM、InnoDB
※NVIDIA宣布推出針對Volta GPU的RTX實時光線追蹤引擎
※探營EA SportsTM《FIFA足球世界》開發大本營 引擎升級4大變化值得期待
※OPPO R17 Pro:AI超清引擎全面提升夜拍畫質
※分享:MySQL存儲引擎總結
※引領AR遊戲新時代 ULSee助力Unity打造體驗式遊戲引擎
※AMD Vega加持,尺寸最小的PC主機NUC正式上市;華為推出AR引擎
※ONKYO聲學底座+Q音質引擎 TCL X8 QLED TV超贊音質體驗
※六大主流開源SQL引擎
※YAMAHA BOLT ABS搭載941cc風冷式V型雙缸引擎的巡航車款發布
※Nesto—Hulu用戶分析平台的OLAP引擎
※LABELHOOD SS19 盛大開幕 | 啟動藝術時裝「電磁場」的能源引擎