1. 程式人生 > >開源大數據引擎:Greenplum 數據庫架構分析

開源大數據引擎:Greenplum 數據庫架構分析

libpq ash 排序 sql命令 出現 計劃 mil 月份 監控

Greenplum 數據庫是最先進的分布式開源數據庫技術,主要用來處理大規模的數據分析任務,包含數據倉庫、商務智能(OLAP)和數據挖掘等。自2015年10月正式開源以來。受到國內外業內人士的廣泛關註。本文就社區關心的Greenplum數據庫技術架構進行介紹。

一. Greenplum數據庫簡單介紹

大數據是個炙手可熱的詞。各行各業都在談。一談到大數據,好多人覺得就是Hadoop。實際上Hadoop僅僅是大數據若幹處理方案中的一個。如今的SQL、NoSQL、NewSQL、Hadoop等等。都能在不同層面或不同應用上處理大數據的某些問題。而Greenplum數據庫做為一個分布式大規模並行處理數據庫,在大多數情況下,更適合做大數據的存儲引擎、計算引擎和分析引擎。

Greenplum數據庫也簡稱GPDB。

它擁有豐富的特性:

第一,完好的標準支持:GPDB全然支持ANSI SQL 2008標準和SQL OLAP 2003 擴展。從應用編程接口上講。它支持ODBC和JDBC。

完好的標準支持使得系統開發、維護和管理都大為方便。而如今的 NoSQL,NewSQL和Hadoop 對 SQL 的支持都不完好。不同的系統須要單獨開發和管理,且移植性不好。

第二。支持分布式事務,支持ACID。

保證數據的強一致性。

第三。做為分布式數據庫。擁有良好的線性擴展能力。在國內外用戶生產環境中。具有上百個物理節點的GPDB集群都有非常多案例。

第四,GPDB是企業級數據庫產品。全球有上千個集群在不同客戶的生產環境執行。

這些集群為全球非常多大的金融、政府、物流、零售等公司的關鍵業務提供服務。

第五。GPDB是Greenplum(如今的Pivotal)公司十多年研發投入的結果。GPDB基於PostgreSQL 8.2。PostgreSQL 8.2有大約80萬行源碼,而GPDB如今有130萬行源碼。

相比PostgreSQL 8.2。添加了約50萬行的源碼。

第六,Greenplum有非常多合作夥伴,GPDB有完好的生態系統。能夠與非常多企業級產品集成,譬如SAS,Cognos,Informatic。Tableau等;也能夠非常多種開源軟件集成,譬如Pentaho,Talend 等。

二. Greenplum架構

2.1 平臺架構

圖(1)是Greenplum數據庫平臺概括圖。平臺分為四個層次。我們依次從下往上看。

技術分享

MPP核心架構

  • GPDB是大規模無共享的處理架構。後面會專門介紹;

  • 先進的並行優化器是性能突出的關鍵之中的一個。

    GPDB有兩個優化器。一個是基於PostgreSQL planner的優化器。一個是全新開發的ORCA優化器。ORCA是Greenplum 5年曾經啟動的全新項目,這個優化器經過幾年的開發和測試之後。近期已經成為GPDB企業版本號的默認優化器。

  • GPDB的存儲引擎支持多態存儲。一個表的數據能夠依據訪問模式的不同使用不同的存儲方式。存儲方式對用戶透明。運行查詢時,不用關心待訪問的數據使用的存儲模式。優化器會自己主動選擇最佳查詢計劃。

  • 分布式數據庫中,某些操作(比如跨節點關聯)須要多個節點間進行數據交換。

    GPDB的並行數據庫流引擎。能夠依據數據的特點,比如分布方式、數據量等選擇最合適的數據流操作符。眼下GPDB支持兩種數據流操作符:重分發(Redistribution)和廣播(Broadcast)。

    重分發依據數據的哈希值又一次分發到各個數據節點上。適用於數據量大的情況;廣播則將數據發送給全部數據節點,適用於數據量較小的情況。比如維度表。

  • 軟件交換機是GPDB的一個重要組件。軟件交換機能夠在各個數據節點間及與主節點間建立可靠的UDP數據通訊機制,是實現高效數據流的核心。

  • Scatter/Gather 流引擎是專為並行數據載入和導出而設計。Scatter指數據通過並行載入server並行分散到各個數據節點。Gather指數據在 GPDB內部能夠依據分布策略按需並行分發。

服務層

  • GPDB支持多級容錯機制和高可用:
    o 主節點(Master)高可用:為了避免主節點單點故障。能夠設置一個主節點的副本(稱為 Standby Master),他們之間通過流復制技術實現同步復制。當主節點發生問題時,從節點成為主節點,處理用戶請求並協調查詢運行。

    它們之間通過心跳檢測故障。
    o 數據節點(Segment)高可用:每一個數據節點都能夠配備一個鏡像。它們之間通過文件操作級別的同步實現數據的同步復制(稱為filerep技術)。數據節點上建議使用RAID5磁盤。以進一步提高數據的高可用。

    故障檢測進程(ftsprobe)定期發送心跳給各個數據節點。

    當某個節點發生問題時。GPDB會自己主動進行故障切換。
    o 網絡高可用:為了避免網絡的單點故障,每一個主機配置多個網口,並使用多個交換機避免網絡故障時造成整個服務不可用。

  • 在線擴展:數據量增大,現有集群不能滿足需求時,能夠對GPDB數據庫進行動態擴展。擴展過程中。業務能夠繼續執行,不須要宕機。

  • 任務管理是指對資源的管理和使用情況的管理。

產品特性

  • 數據載入在後面會專門介紹。

  • 數據聯邦是比較有意思的。近期“數據湖泊”這個詞很火熱,數據湖泊的目的是不需再對數據像曾經那樣經過定制。生成特定的業務報表;而是保存原始數據,什麽時候想分析就從原始數據上直接處理。GBDB能夠實現數據湖泊(我們稱之為數據聯邦)。它能訪問和處理數據中心裏面的全部數據,無論你的數據是在Hadoop、在文件系統上、還是在其它數據庫中,Greenplum能夠使用一個SQL在保證ACID的前提下訪問全部數據。

  • GPDB即支持行存。也支持列存。還為不需更新的數據存儲和處理進行了專門的優化。

  • 支持多種壓縮方法。包含QuickLZ,Zlib,RLE 等。
  • 支持多級分區表。分區支持多種模式。包含範圍,列表等。

  • 支持B樹、位圖和GiST 等索引
  • GPDB認證機制支持多種方式。包含LDAP和Kerberos等。通過訪問控制列表(ACL),能夠實現靈活的基於角色的安全控制。
  • 擴展語言支持:GPDB 支持使用多種流行語言實現用戶自己定義函數(UDF,類似於Oracle的存儲過程),包含 Python,R,Java,Perl,C/C++ 等。
  • 地理信息處理:通過集成PostGIS,GPDB支持對地理信息進行存儲和分析。

  • 內建數據挖掘算法庫:通過MADLib(如今是Apache孵化項目)算法庫,能夠內建幾十種常見的數據分析和挖掘算法到GPDB數據庫中,包含邏輯回歸。決策樹,隨機森林等。不須要寫不論什麽算法代碼。通過SQL就能夠使用當中的全部算法。
  • 文本檢索:通過GPText擴展,GPDB能夠支持高效靈活豐富的全文檢索功能。與 MADLib 合用,能夠進行並行文本分析和挖掘。

client訪問和工具

通過psql命令行工具能夠訪問GPDB數據庫的全部功能,此外還提供了ODBC、JDBC、OLEDB、libpq等應用編程接口。

數據庫或者數據集群的管理工具很重要,GPDB提供了圖形化的管理工具GPCC(Greenplum Command Center),幫你管理狀態,監控資源使用情況。

Greenplum Workload Manager是剛剛公布的新產品,用以實現基於規則的資源管理。它支持自己定義規則,當某個SQL滿足規則描寫敘述的條件時會運行某些操作。

比方你能夠定義規則自己主動取消消耗CPU資源達50%以上的查詢。

2.2 大規模並行處理(MPP)無共享架構

MPP 是Greenplum數據庫最突出的特色。如今非常流行MPP這個詞。我們能夠看一下它是什麽意思。下邊圖(2)中,主節點有兩個,一個是主節點,一個是從主節點。

通過軟交換機制,也就是通過快速網絡,主節點連到數據節點。

每一個數據節點有自己的CPU,自己的內存,自己的硬盤,他們唯一共享的就是網絡。

這也是稱為無共享架構的原因。這樣的架構的優點是集群是分布式的環境,數據能夠分布在非常多節點上進行並行處理。能夠做到線性擴展。

技術分享

在分布式數據庫中,性能好壞的最重要因素是數據分布是否均勻。假設數據分布不均勻。有的節點上數據非常多。有的節點數據非常少,這樣會出現短板效應,整個SQL的效率不會非常好。Greenplum支持多種數據分布的策略,默認使用主鍵或者第一個字段進行哈希分布,還支持隨機分布。除了橫向上數據能夠按節點分布之外。在某個節點上還能夠對數據進行分區。

分區的規則比較靈活,能夠依照範圍分區。也能夠依照列表值分區,如圖(3)。

技術分享

2.3 並行查詢計劃和運行

以下是個簡單的SQL。如圖(4)。從兩張表中找到2008年的銷售數據。圖中右邊是這個SQL的查詢計劃。從生成的查詢計劃樹中看到有三種不同的顏色,顏色同樣表示做同一件事情,我們稱之為分片/切片(Slice)。

最下層的橙色切片中有一個重分發節點,這個節點將本節點的數據又一次分發到其它節點上。中間綠色切片表示分布式數據關聯(HashJoin)。最上面切片負責將各個數據節點收到的數據進行匯總。

技術分享

然後看看這個查詢計劃的運行,如圖(5)。主節點(Master)上的調度器(QD)會下發查詢任務到每一個數據節點。數據節點收到任務後(查詢計劃樹)。創建工作進程(QE)運行任務。

假設須要跨節點數據交換(比如上面的HashJoin),則數據節點上會創建多個工作進程協調運行任務。

不同節點上運行同一任務(查詢計劃中的切片)的進程組成一個團夥(Gang)。

數據從下往上流動。終於Master返回給client。

技術分享

2.4 多態存儲

上面介紹了GPDB的特點和SQL運行計劃以及運行過程。那數據在每一個節點上究竟怎麽樣存儲?

Greenplum提供稱為“多態存儲”的靈活存儲方式。

多態存儲能夠依據數據熱度或者訪問模式的不同而使用不同的存儲方式。

一張表的不同數據能夠使用不同的物理存儲方式。如圖(6)。支持的存儲方式包括:

  • 行存儲:行存儲是傳統數據庫經常使用的存儲方式,特點是訪問比較快。多列更新比較easy。

  • 列存儲:列存儲按列保存,不同列的數據存儲在不同的地方(一般是不同文件裏)。適合一次僅僅訪問寬表中某幾個字段的情況。

    列存儲的另外一個優勢是壓縮比高。

  • 外部表:數據保存在其它系統中比如HDFS。數據庫僅僅保留元數據信息。

技術分享

2.5 大規模並行數據載入

作為一個數據庫。一定會保存和處理數據。

那數據來源於什麽地方?Oracle這種數據庫裏面的數據多是客戶生成的。譬如你銀行轉賬、淘寶訂單等。對於數據分析型的數據庫,其源數據一般是在其它系統中,並且數據量很大。

這樣數據載入的能力就變得很重要。Greenplum提供了很好的數據載入方案。支持快速的載入各種數據源的不同數據格式的數據,如圖(7)。

  • 並行數據載入:由於是並行數據載入,所以性能非常好。Greenplum有叫DCA的一體機產品,第一代DCA能夠做到10TB/小時;第二代為16TB/小時。第三代非常快就要公布了,速度會更快。
  • 數據源和數據格式:數據源支持Hadoop。文件系統,數據庫,還有 ETL管理的數據。

    數據格式支持文本。CSV,Parquet。Avro等。

技術分享

三. Greenplum核心組件

Greenplum 數據庫包含下面核心組件:

  • 解析器:主節點收到client請求後。運行認證操作。認證成功建立連接後,client能夠發送查詢給數據庫。

    解析器負責對收到的查詢SQL字符串進行詞法解析、語法解析。並生成語法樹。

  • 優化器:優化器對解析器的結果進行處理。從全部可能的查詢計劃中選擇一個最優或者接近最優的計劃。生成查詢計劃。查詢計劃描寫敘述了怎樣運行一個查詢,通常以樹形結構描寫敘述。

    Greenplum最新的優化器叫 ORCA,關於 ORCA,能夠從 ACM 論文中獲得具體信息。(

    id=2595637&dl=ACM&coll=DL&CFID=569750122&CFTOKEN=89888184" target="_blank" style="color:rgb(51,122,183); text-decoration:none; background-color:transparent">http://dl.acm.org/citation.cfm?

    id=2595637&dl=ACM&coll=DL&CFID=569750122&CFTOKEN=89888184)

  • 調度器(QD):調度器發送優化後的查詢計劃給全部數據節點(Segments)上的運行器(QE)。調度器負責任務的運行。包含運行器的創建、銷毀、錯誤處理、任務取消、狀態更新等。
  • 運行器(QE):運行器收到調度器發送的查詢計劃後,開始運行自己負責的那部分計劃。典型的操作包含數據掃描、哈希關聯、排序、聚集等。
  • Interconnect:負責集群中各個節點間的傳輸數據。
  • 系統表:系統表存儲和管理數據庫、表、字段的元數據。

    每一個節點上都有對應的拷貝。

  • 分布式事務:主節點上的分布式事務管理器協調數據節點上事務的提交和回滾操作,由兩階段提交(2PC)實現。每一個數據節點都有自己的事務日誌。負責自己節點上的事務處理。

四、Greenplum開源

2015年3月份。Pivotal宣布了Greenplum的開源計劃,經過6個月緊鑼密鼓的工作。於10月27號正式開源。官方站點為http://greenplum.org。許可證書使用Apache 2許可證。

Greenplum 開源社區提供了執行環境沙盒以及使用教程。裏面包括了Greenplum數據庫的一些主要特性。

從https://github.com/greenplum-db/gpdb-sandbox-tutorials 能夠下載沙盒和教程。

有關Greenplum數據庫使用和開發的不論什麽問題都能夠去郵件列表討論:郵件列表有兩個:[email protected] [email protected]

源碼位於https://github.com/greenplum-db/gpdb,開源不到兩個月就有1187個收藏,256個fork,超過150個pull request,當中136個pull request 已經關閉。

貢獻者中除了包括Pivotal的員工外,還有來自全球(包括中國、美國、日本和歐洲)的社區開發者。

關於從源碼編譯和安裝Greenplum數據庫,能夠參考:http://gpdb.rocks/gpdb/2015/10/29/how-to-build-gpdb.html

轉自http://geek.csdn.net/news/detail/49960

開源大數據引擎:Greenplum 數據庫架構分析