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

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

一. Greenplum數據庫簡單介紹

大數據是個煊赫一時的詞。各行各業都在談。一談到大數據,好多人以爲就是Hadoop。實際上Hadoop僅僅是大數據若干處理方案中的一個。現在的SQL、NoSQL、NewSQL、Hadoop等等。都能在不一樣層面或不一樣應用上處理大數據的某些問題。而Greenplum數據庫作爲一個分佈式大規模並行處理數據庫,在大多數狀況下,更適合作大數據的存儲引擎、計算引擎和分析引擎。git

Greenplum數據庫也簡稱GPDB。github

它擁有豐富的特性:算法

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

無缺的標準支持使得系統開發、維護和管理都大爲方便。而現在的 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 論文中得到具體信息。(http://dl.acm.org/citation.cfm?

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

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

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

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

4、Greenplum開源

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

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

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

有關Greenplum數據庫使用和開發的不論什麼問題都可以去郵件列表討論:郵件列表有兩個:gpdb-dev@greenplum.org 和gpdb-user@greenplum.org。

源碼位於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

相關文章
相關標籤/搜索