<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Apache HAWQ大規(guī)模并行 SQL 分析處理引擎

          聯(lián)合創(chuàng)作 · 2023-09-18 20:41

          HAWQ 是一個Hadoop原生大規(guī)模并行SQL分析引擎,針對的是分析性應(yīng)用。和其他關(guān)系型數(shù)據(jù)庫類似,接受SQL,返回結(jié)果集。

          Apache HAWQ 具有大規(guī)模并行處理很多傳統(tǒng)數(shù)據(jù)庫以及其他數(shù)據(jù)庫沒有的特性及功能。主要如下:

          1. 對標準的完善支持:ANSI SQL標準,OLAP擴展,標準JDBC/ODBC支持,比其他Hadoop SQL引擎都要完善。

          2. 具有MPP(大規(guī)模并行處理系統(tǒng))的性能,比其他Hadoop里面的SQL引擎快數(shù)倍。

          3. 具有非常成熟的并行優(yōu)化器。優(yōu)化器是并行SQL引擎的重要組成部分,對性能影響很多,尤其是對復(fù)雜查詢。

          4. 支持ACID事務(wù)特性:這是很多現(xiàn)有基于Hadoop的SQL引擎做不到的,對保證數(shù)據(jù)一致性很重要。

          5. 動態(tài)數(shù)據(jù)流引擎:基于UDP的高速互聯(lián)網(wǎng)絡(luò)。

          6. 彈性執(zhí)行引擎:可以根據(jù)查詢大小來決定執(zhí)行查詢使用的節(jié)點及Segment個數(shù)。

          7. 支持多種分區(qū)方法及多級分區(qū):比如List分區(qū)和Range分區(qū)。分區(qū)表對性能有很大幫助,比如你只想訪問最近一個月的數(shù)據(jù),查詢只需要掃描最近一個月數(shù)據(jù)所在分區(qū)。

          8. 支持多種壓縮方法:snappy,gzip,quicklz,RLE等。

          9. 多種UDF(用戶自定義函數(shù))語言支持:java, python, c/c++, perl, R等。

          10. 動態(tài)擴容:動態(tài)按需擴容,按照存儲大小或者計算需求,秒級添加節(jié)點。

          11. 多級資源或負載管理:和外部資源管理器YARN集成;可以管理CPU,Memory資源等;支持多級資源隊列;方便的DDL管理接口。

          12. 支持訪問任何HDFS及其他系統(tǒng)的數(shù)據(jù):各種HDFS格式(文本,SequenceFile,Avro,Parquet等等)以及其他外部系統(tǒng)(HBase等),并且用戶自己可以開發(fā)插件來訪問新的數(shù)據(jù)源。

          13. 原生的機器學(xué)習(xí)數(shù)據(jù)挖掘庫MADLib支持:易于使用及高性能。

          14. 與Hadoop系統(tǒng)無縫集成:存儲、資源、安裝部署(Ambari)、數(shù)據(jù)格式、訪問等。

          15. 完善的安全及權(quán)限管理:kerberos;數(shù)據(jù)庫,表等各個級別的授權(quán)管理。

          16. 支持多種第三方工具:比如Tableau,SAS,較新的Apache Zeppelin等。

          17. 支持對HDFS和YARN的快速訪問庫:libhdfs3和libyarn(其他項目也可以使用)。

          18. 支持在本地、虛擬化環(huán)境或者在云端部署。

          HAWQ 是原生 Hadoop SQL 引擎中“原生”的意思,“原生”主要體現(xiàn)在如下幾個方面:

          1. 數(shù)據(jù)都存儲在HDFS上,不需要使用connector模式。

          2. 高可擴展性:和其他Hadoop組件一樣,高可擴展。并且具有高性能。

          3. 原生的代碼存?。汉推渌鸋adoop項目一樣。HAWQ是Apache項目。用戶可以自由的下載,使用和做貢獻。區(qū)別與其他的偽開源軟件。

          4. 透明性:用Apache的方式開發(fā)軟件。所有功能的開發(fā)及討論都是公開的。用戶可以自由參與。

          5. 原生的管理:可以通過Ambari部署、資源可以從YARN分配,與其它Hadoop組件可以運行在同一個集群。

          下圖是一個典型的HAWQ集群的主要組件。其中有幾個Master節(jié)點:包括HAWQ master節(jié)點,HDFS master節(jié)點NameNode,YARN master節(jié)點ResourceManager。現(xiàn)在HAWQ元數(shù)據(jù)服務(wù)在HAWQ master節(jié)點里面,將來的版本會成為單獨的服務(wù)。其他節(jié)點為Slave節(jié)點。每個Slave節(jié)點上部署有HDFS DataNode,YARN NodeManager以及一個HAWQ Segment。HAWQ Segment在執(zhí)行查詢的時候會啟動多個QE (Query Executor, 查詢執(zhí)行器)。查詢執(zhí)行器運行在資源容器里面。

          軟件內(nèi)部架構(gòu):

          可以看到在HAWQ master節(jié)點內(nèi)部有如下幾個重要組件:查詢解析器(Parser/Analyzer),優(yōu)化器,資源管理器,資源代理,HDFS元數(shù)據(jù)緩存,容錯服務(wù),查詢派遣器,元數(shù)據(jù)服務(wù)。在Slave節(jié)點上安裝有一個物理Segment,在查詢執(zhí)行時,針對一個查詢,彈性執(zhí)行引擎會啟動多個虛擬Segment同時執(zhí)行查詢,節(jié)點間數(shù)據(jù)交換通過Interconnect(高速互聯(lián)網(wǎng)絡(luò))進行。如果一個查詢啟動了1000個虛擬Segment,意思是這個查詢被均勻的分成了1000份任務(wù),這些任務(wù)會并行執(zhí)行。所以說虛擬Segment數(shù)其實表明了查詢的并行度。查詢的并行度是由彈性執(zhí)行引擎根據(jù)查詢大小以及當前資源使用情況動態(tài)確定的。下面我逐個來解釋這些組件的作用以及它們之間的關(guān)系:

          1. 查詢解析器:負責(zé)解析查詢,并檢查語法及語義。最終生成查詢樹傳遞給優(yōu)化器。

          2. 優(yōu)化器:負責(zé)接受查詢樹,生成查詢計劃。針對一個查詢,可能有數(shù)億個可能的等價的查詢計劃,但執(zhí)行性能差別很大。優(yōu)化器的作用是找出優(yōu)化的查詢計劃。

          3. 資源管理器:資源管理器通過資源代理向全局資源管理器(比如YARN)動態(tài)申請資源。并緩存資源。在不需要的時候返回資源。我們緩存資源的主要原因是減少HAWQ與全局資源管理器之間的交互代價。HAWQ支持毫秒級查詢。如果每一個小的查詢都去向資源管理器申請資源,這樣的話,性能會受到影響。資源管理器同時需要保證查詢不使用超過分配給該查詢的資源,否則查詢之間會相互影響,可能導(dǎo)致系統(tǒng)整體不可用。

          4. HDFS元數(shù)據(jù)緩存:用于HAWQ確定哪些Segment掃描表的哪些部分。HAWQ是把計算派遣到數(shù)據(jù)所在的地方。所以我們需要匹配計算和數(shù)據(jù)的局部性。這些需要HDFS塊的位置信息。位置信息存儲在HDFS NameNode上。每個查詢都訪問HDFS NameNode會造成NameNode的瓶頸。所以我們在HAWQ Master節(jié)點上建立了HDFS元數(shù)據(jù)緩存。

          5. 容錯服務(wù):負責(zé)檢測哪些節(jié)點可用,哪些節(jié)點不可用。不可用的機器會被排除出資源池。

          6. 查詢派遣器:優(yōu)化器優(yōu)化完查詢以后,查詢派遣器派遣計劃到各個節(jié)點上執(zhí)行,并協(xié)調(diào)查詢執(zhí)行的整個過程。查詢派遣器是整個并行系統(tǒng)的粘合劑。

          7. 元數(shù)據(jù)服務(wù):負責(zé)存儲HAWQ的各種元數(shù)據(jù),包括數(shù)據(jù)庫和表信息,以及訪問權(quán)限信息等。另外,元數(shù)據(jù)服務(wù)也是實現(xiàn)分布式事務(wù)的關(guān)鍵。

          8. 高速互聯(lián)網(wǎng)絡(luò):負責(zé)在節(jié)點之間傳輸數(shù)據(jù)。軟件實現(xiàn),基于UDP。

          查詢的主要流程:

          用戶通過JDBC/ODBC提交查詢之后,查詢解析器得到查詢樹,然后優(yōu)化器根據(jù)查詢樹生成查詢計劃,派遣器和資源管理器打交道得到資源,分解查詢計劃,然后派遣計劃到Segment的執(zhí)行器上面執(zhí)行。最終結(jié)果會傳回給用戶。

          并行查詢計劃示例:

          這個查詢包含一個連接,一個表達式和一個聚集。圖中有兩個查詢計劃。簡單來看,并行查詢計劃和串行查詢計劃最不同的是多了一些Motion操作符。Motion負責(zé)在節(jié)點之間交換數(shù)據(jù)。底層是通過高速互聯(lián)網(wǎng)絡(luò)實現(xiàn)的。我們可以看到這里有三種Motion:

          1. Redistribution Motion: 負責(zé)按照hash鍵值重新分布數(shù)據(jù)

          2. Broadcast Motion: 負責(zé)廣播數(shù)據(jù)

          3. Gather Motion: 負責(zé)搜集數(shù)據(jù)到一起。

          左邊的查詢計劃表示了如果表lineitem和orders都使用了連接鍵進行分布的情況。在這個例子中,lineitem按照l_orderkey進行hash分布,orders表按照o_orderkey進行分布。這樣的話兩個表做連接的時候是不需要進行重新分布的。右邊的查詢計劃表示了一個需要重新分布數(shù)據(jù)的例子。該查詢計劃和左邊的查詢計劃相比多了一個Motion節(jié)點。

          更詳細的介紹請看 http://www.36dsj.com/archives/36776

          瀏覽 20
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品卡一卡二 | 人人撸人人爱 | 国产精品永久免费观看 | 亚洲免费看黄网站 | 国产大鸡巴视频 |