開源大數(shù)據(jù)引擎:Greenplum 數(shù)據(jù)庫架構(gòu)分析

責(zé)任編輯:editor005

作者:姚延棟

2017-05-15 14:25:15

摘自:CSDN

Greenplum 數(shù)據(jù)庫是最先進(jìn)的分布式開源數(shù)據(jù)庫技術(shù),主要用來處理大規(guī)模的數(shù)據(jù)分析任務(wù),包括數(shù)據(jù)倉庫、商務(wù)智能(OLAP)和數(shù)據(jù)挖掘等。

Greenplum 數(shù)據(jù)庫是最先進(jìn)的分布式開源數(shù)據(jù)庫技術(shù),主要用來處理大規(guī)模的數(shù)據(jù)分析任務(wù),包括數(shù)據(jù)倉庫、商務(wù)智能(OLAP)和數(shù)據(jù)挖掘等。自2015年10月正式開源以來,受到國(guó)內(nèi)外業(yè)內(nèi)人士的廣泛關(guān)注。本文就社區(qū)關(guān)心的Greenplum數(shù)據(jù)庫技術(shù)架構(gòu)進(jìn)行介紹。

大數(shù)據(jù)

  一. Greenplum數(shù)據(jù)庫簡(jiǎn)介

大數(shù)據(jù)是個(gè)炙手可熱的詞,各行各業(yè)都在談。一談到大數(shù)據(jù),好多人認(rèn)為就是hadoop。實(shí)際上Hadoop只是大數(shù)據(jù)若干處理方案中的一個(gè)?,F(xiàn)在的SQL、NoSQL、NewSQL、Hadoop等等,都能在不同層面或不同應(yīng)用上處理大數(shù)據(jù)的某些問題。而Greenplum數(shù)據(jù)庫做為一個(gè)分布式大規(guī)模并行處理數(shù)據(jù)庫,在大多數(shù)情況下,更適合做大數(shù)據(jù)的存儲(chǔ)引擎、計(jì)算引擎和分析引擎。

Greenplum數(shù)據(jù)庫也簡(jiǎn)稱GPDB。它擁有豐富的特性:

第一,完善的標(biāo)準(zhǔn)支持:GPDB完全支持ANSI SQL 2008標(biāo)準(zhǔn)和SQL OLAP 2003 擴(kuò)展;從應(yīng)用編程接口上講,它支持ODBC和JDBC。完善的標(biāo)準(zhǔn)支持使得系統(tǒng)開發(fā)、維護(hù)和管理都大為方便。而現(xiàn)在的 NoSQL,NewSQL和Hadoop 對(duì) SQL 的支持都不完善,不同的系統(tǒng)需要單獨(dú)開發(fā)和管理,且移植性不好。

第二,支持分布式事務(wù),支持ACID。保證數(shù)據(jù)的強(qiáng)一致性。

第三,做為分布式數(shù)據(jù)庫,擁有良好的線性擴(kuò)展能力。在國(guó)內(nèi)外用戶生產(chǎn)環(huán)境中,具有上百個(gè)物理節(jié)點(diǎn)的GPDB集群都有很多案例。

第四,GPDB是企業(yè)級(jí)數(shù)據(jù)庫產(chǎn)品,全球有上千個(gè)集群在不同客戶的生產(chǎn)環(huán)境運(yùn)行。這些集群為全球很多大的金融、政府、物流、零售等公司的關(guān)鍵業(yè)務(wù)提供服務(wù)。

第五,GPDB是Greenplum(現(xiàn)在的Pivotal)公司十多年研發(fā)投入的結(jié)果。GPDB基于PostgreSQL 8.2,PostgreSQL 8.2有大約80萬行源代碼,而GPDB現(xiàn)在有130萬行源碼。相比PostgreSQL 8.2,增加了約50萬行的源代碼。

第六,Greenplum有很多合作伙伴,GPDB有完善的生態(tài)系統(tǒng),可以與很多企業(yè)級(jí)產(chǎn)品集成,譬如SAS,Cognos,Informatic,Tableau等;也可以很多種開源軟件集成,譬如Pentaho,Talend 等。

二. Greenplum架構(gòu)

2.1 平臺(tái)架構(gòu)

圖(1)是Greenplum數(shù)據(jù)庫平臺(tái)概括圖。平臺(tái)分為四個(gè)層次,我們依次從下往上看。

圖片描述

  MPP核心架構(gòu)

GPDB是大規(guī)模無共享的處理架構(gòu),后面會(huì)專門介紹;

先進(jìn)的并行優(yōu)化器是性能突出的關(guān)鍵之一。GPDB有兩個(gè)優(yōu)化器,一個(gè)是基于PostgreSQL planner的優(yōu)化器;一個(gè)是全新開發(fā)的ORCA優(yōu)化器。ORCA是Greenplum 5年以前啟動(dòng)的全新項(xiàng)目,這個(gè)優(yōu)化器經(jīng)過幾年的開發(fā)和測(cè)試之后,最近已經(jīng)成為GPDB企業(yè)版本的默認(rèn)優(yōu)化器。

GPDB的存儲(chǔ)引擎支持多態(tài)存儲(chǔ),一個(gè)表的數(shù)據(jù)可以根據(jù)訪問模式的不同使用不同的存儲(chǔ)方式。存儲(chǔ)方式對(duì)用戶透明,執(zhí)行查詢時(shí),不用關(guān)心待訪問的數(shù)據(jù)使用的存儲(chǔ)模式,優(yōu)化器會(huì)自動(dòng)選擇最佳查詢計(jì)劃。

分布式數(shù)據(jù)庫中,某些操作(例如跨節(jié)點(diǎn)關(guān)聯(lián))需要多個(gè)節(jié)點(diǎn)間進(jìn)行數(shù)據(jù)交換。GPDB的并行數(shù)據(jù)庫流引擎,可以根據(jù)數(shù)據(jù)的特點(diǎn),例如分布方式、數(shù)據(jù)量等選擇最合適的數(shù)據(jù)流操作符。目前GPDB支持兩種數(shù)據(jù)流操作符:重分發(fā)(Redistribution)和廣播(Broadcast)。重分發(fā)根據(jù)數(shù)據(jù)的哈希值重新分發(fā)到各個(gè)數(shù)據(jù)節(jié)點(diǎn)上,適用于數(shù)據(jù)量大的情況;廣播則將數(shù)據(jù)發(fā)送給所有數(shù)據(jù)節(jié)點(diǎn),適用于數(shù)據(jù)量較小的情況,例如維度表。

軟件交換機(jī)是GPDB的一個(gè)重要組件,軟件交換機(jī)可以在各個(gè)數(shù)據(jù)節(jié)點(diǎn)間及與主節(jié)點(diǎn)間建立可靠的UDP數(shù)據(jù)通訊機(jī)制,是實(shí)現(xiàn)高效數(shù)據(jù)流的核心。

Scatter/Gather 流引擎是專為并行數(shù)據(jù)加載和導(dǎo)出而設(shè)計(jì),Scatter指數(shù)據(jù)通過并行加載服務(wù)器并行分散到各個(gè)數(shù)據(jù)節(jié)點(diǎn),Gather指數(shù)據(jù)在 GPDB內(nèi)部可以根據(jù)分布策略按需并行分發(fā)。

服務(wù)層

GPDB支持多級(jí)容錯(cuò)機(jī)制和高可用:

o 主節(jié)點(diǎn)(Master)高可用:為了避免主節(jié)點(diǎn)單點(diǎn)故障,可以設(shè)置一個(gè)主節(jié)點(diǎn)的副本(稱為 Standby Master),他們之間通過流復(fù)制技術(shù)實(shí)現(xiàn)同步復(fù)制。當(dāng)主節(jié)點(diǎn)發(fā)生故障時(shí),從節(jié)點(diǎn)成為主節(jié)點(diǎn),處理用戶請(qǐng)求并協(xié)調(diào)查詢執(zhí)行。它們之間通過心跳檢測(cè)故障。

o 數(shù)據(jù)節(jié)點(diǎn)(Segment)高可用:每個(gè)數(shù)據(jù)節(jié)點(diǎn)都可以配備一個(gè)鏡像,它們之間通過文件操作級(jí)別的同步實(shí)現(xiàn)數(shù)據(jù)的同步復(fù)制(稱為filerep技術(shù))。數(shù)據(jù)節(jié)點(diǎn)上建議使用RAID5磁盤,以進(jìn)一步提高數(shù)據(jù)的高可用。故障檢測(cè)進(jìn)程(ftsprobe)定期發(fā)送心跳給各個(gè)數(shù)據(jù)節(jié)點(diǎn)。當(dāng)某個(gè)節(jié)點(diǎn)發(fā)生故障時(shí),GPDB會(huì)自動(dòng)進(jìn)行故障切換。

o 網(wǎng)絡(luò)高可用:為了避免網(wǎng)絡(luò)的單點(diǎn)故障,每個(gè)主機(jī)配置多個(gè)網(wǎng)口,并使用多個(gè)交換機(jī)避免網(wǎng)絡(luò)故障時(shí)造成整個(gè)服務(wù)不可用。

在線擴(kuò)展:數(shù)據(jù)量增大,現(xiàn)有集群不能滿足需求時(shí),可以對(duì)GPDB數(shù)據(jù)庫進(jìn)行動(dòng)態(tài)擴(kuò)展。擴(kuò)展過程中,業(yè)務(wù)可以繼續(xù)運(yùn)行,不需要宕機(jī)。

任務(wù)管理是指對(duì)資源的管理和使用情況的管理。

產(chǎn)品特性

數(shù)據(jù)加載在后面會(huì)專門介紹。

數(shù)據(jù)聯(lián)邦是比較有意思的,最近“數(shù)據(jù)湖泊”這個(gè)詞非?;馃?,數(shù)據(jù)湖泊的目的是不需再對(duì)數(shù)據(jù)像以前那樣經(jīng)過定制,生成特定的業(yè)務(wù)報(bào)表;而是保存原始數(shù)據(jù),什么時(shí)候想分析就從原始數(shù)據(jù)上直接處理。GBDB可以實(shí)現(xiàn)數(shù)據(jù)湖泊(我們稱之為數(shù)據(jù)聯(lián)邦),它能訪問和處理數(shù)據(jù)中心里面的所有數(shù)據(jù),不管你的數(shù)據(jù)是在Hadoop、在文件系統(tǒng)上、還是在其他數(shù)據(jù)庫中,Greenplum可以使用一個(gè)SQL在保證ACID的前提下訪問所有數(shù)據(jù)。

GPDB即支持行存,也支持列存。還為不需更新的數(shù)據(jù)存儲(chǔ)和處理進(jìn)行了專門的優(yōu)化。

支持多種壓縮方法,包括QuickLZ,Zlib,RLE 等。

支持多級(jí)分區(qū)表,分區(qū)支持多種模式,包括范圍,列表等。

支持B樹、位圖和GiST 等索引

GPDB認(rèn)證機(jī)制支持多種方式,包括LDAP和Kerberos等。通過訪問控制列表(ACL),可以實(shí)現(xiàn)靈活的基于角色的安全控制。

擴(kuò)展語言支持:GPDB 支持使用多種流行語言實(shí)現(xiàn)用戶自定義函數(shù)(UDF,類似于Oracle的存儲(chǔ)過程),包括 Python,R,Java,Perl,C/C++ 等。

地理信息處理:通過集成PostGIS,GPDB支持對(duì)地理信息進(jìn)行存儲(chǔ)和分析。

內(nèi)建數(shù)據(jù)挖掘算法庫:通過MADLib(現(xiàn)在是Apache孵化項(xiàng)目)算法庫,可以內(nèi)建幾十種常見的數(shù)據(jù)分析和挖掘算法到GPDB數(shù)據(jù)庫中,包括邏輯回歸,決策樹,隨機(jī)森林等。不需要寫任何算法代碼,通過SQL就可以使用其中的所有算法。

文本檢索:通過GPText擴(kuò)展,GPDB可以支持高效靈活豐富的全文檢索功能。與 MADLib 合用,可以進(jìn)行并行文本分析和挖掘。

客戶端訪問和工具

通過psql命令行工具可以訪問GPDB數(shù)據(jù)庫的所有功能,此外還提供了ODBC、JDBC、OLEDB、libpq等應(yīng)用編程接口。

數(shù)據(jù)庫或者數(shù)據(jù)集群的管理工具非常重要,GPDB提供了圖形化的管理工具GPCC(Greenplum Command Center),幫你管理狀態(tài),監(jiān)控資源使用情況。

Greenplum Workload Manager是剛剛發(fā)布的新產(chǎn)品,用以實(shí)現(xiàn)基于規(guī)則的資源管理。它支持自定義規(guī)則,當(dāng)某個(gè)SQL滿足規(guī)則描述的條件時(shí)會(huì)執(zhí)行某些操作。比如你可以定義規(guī)則自動(dòng)取消消耗CPU資源達(dá)50%以上的查詢。

2.2 大規(guī)模并行處理(MPP)無共享架構(gòu)

MPP 是Greenplum數(shù)據(jù)庫最突出的特色?,F(xiàn)在很流行MPP這個(gè)詞,我們可以看一下它是什么意思。下邊圖(2)中,主節(jié)點(diǎn)有兩個(gè),一個(gè)是主節(jié)點(diǎn),一個(gè)是從主節(jié)點(diǎn)。通過軟交換機(jī)制,也就是通過高速網(wǎng)絡(luò),主節(jié)點(diǎn)連到數(shù)據(jù)節(jié)點(diǎn)。每個(gè)數(shù)據(jù)節(jié)點(diǎn)有自己的CPU,自己的內(nèi)存,自己的硬盤,他們唯一共享的就是網(wǎng)絡(luò)。這也是稱為無共享架構(gòu)的原因。這種架構(gòu)的好處是集群是分布式的環(huán)境,數(shù)據(jù)可以分布在很多節(jié)點(diǎn)上進(jìn)行并行處理,可以做到線性擴(kuò)展。

圖片描述

在分布式數(shù)據(jù)庫中,性能好壞的最重要因素是數(shù)據(jù)分布是否均勻。如果數(shù)據(jù)分布不均勻,有的節(jié)點(diǎn)上數(shù)據(jù)非常多,有的節(jié)點(diǎn)數(shù)據(jù)很少,這樣會(huì)出現(xiàn)短板效應(yīng),整個(gè)SQL的效率不會(huì)很好。Greenplum支持多種數(shù)據(jù)分布的策略,默認(rèn)使用主鍵或者第一個(gè)字段進(jìn)行哈希分布,還支持隨機(jī)分布。除了橫向上數(shù)據(jù)可以按節(jié)點(diǎn)分布之外,在某個(gè)節(jié)點(diǎn)上還可以對(duì)數(shù)據(jù)進(jìn)行分區(qū)。分區(qū)的規(guī)則比較靈活,可以按照范圍分區(qū),也可以按照列表值分區(qū),如圖(3)。

圖片描述

  2.3 并行查詢計(jì)劃和執(zhí)行

下面是個(gè)簡(jiǎn)單的SQL,如圖(4),從兩張表中找到2008年的銷售數(shù)據(jù)。圖中右邊是這個(gè)SQL的查詢計(jì)劃。從生成的查詢計(jì)劃樹中看到有三種不同的顏色,顏色相同表示做同一件事情,我們稱之為分片/切片(Slice)。最下層的橙色切片中有一個(gè)重分發(fā)節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)將本節(jié)點(diǎn)的數(shù)據(jù)重新分發(fā)到其他節(jié)點(diǎn)上。中間綠色切片表示分布式數(shù)據(jù)關(guān)聯(lián)(HashJoin)。最上面切片負(fù)責(zé)將各個(gè)數(shù)據(jù)節(jié)點(diǎn)收到的數(shù)據(jù)進(jìn)行匯總。

圖片描述

然后看看這個(gè)查詢計(jì)劃的執(zhí)行,如圖(5)。主節(jié)點(diǎn)(Master)上的調(diào)度器(QD)會(huì)下發(fā)查詢?nèi)蝿?wù)到每個(gè)數(shù)據(jù)節(jié)點(diǎn),數(shù)據(jù)節(jié)點(diǎn)收到任務(wù)后(查詢計(jì)劃樹),創(chuàng)建工作進(jìn)程(QE)執(zhí)行任務(wù)。如果需要跨節(jié)點(diǎn)數(shù)據(jù)交換(例如上面的HashJoin),則數(shù)據(jù)節(jié)點(diǎn)上會(huì)創(chuàng)建多個(gè)工作進(jìn)程協(xié)調(diào)執(zhí)行任務(wù)。不同節(jié)點(diǎn)上執(zhí)行同一任務(wù)(查詢計(jì)劃中的切片)的進(jìn)程組成一個(gè)團(tuán)伙(Gang)。數(shù)據(jù)從下往上流動(dòng),最終Master返回給客戶端。

圖片描述

  2.4 多態(tài)存儲(chǔ)

上面介紹了GPDB的特點(diǎn)和SQL執(zhí)行計(jì)劃以及執(zhí)行過程,那數(shù)據(jù)在每個(gè)節(jié)點(diǎn)上到底怎么樣存儲(chǔ)?

Greenplum提供稱為“多態(tài)存儲(chǔ)”的靈活存儲(chǔ)方式。多態(tài)存儲(chǔ)可以根據(jù)數(shù)據(jù)熱度或者訪問模式的不同而使用不同的存儲(chǔ)方式。一張表的不同數(shù)據(jù)可以使用不同的物理存儲(chǔ)方式,如圖(6)。支持的存儲(chǔ)方式包含:

行存儲(chǔ):行存儲(chǔ)是傳統(tǒng)數(shù)據(jù)庫常用的存儲(chǔ)方式,特點(diǎn)是訪問比較快,多列更新比較容易。

列存儲(chǔ):列存儲(chǔ)按列保存,不同列的數(shù)據(jù)存儲(chǔ)在不同的地方(通常是不同文件中)。適合一次只訪問寬表中某幾個(gè)字段的情況。列存儲(chǔ)的另外一個(gè)優(yōu)勢(shì)是壓縮比高。

外部表:數(shù)據(jù)保存在其他系統(tǒng)中例如HDFS,數(shù)據(jù)庫只保留元數(shù)據(jù)信息。

圖片描述

  2.5 大規(guī)模并行數(shù)據(jù)加載

作為一個(gè)數(shù)據(jù)庫,一定會(huì)保存和處理數(shù)據(jù)。那數(shù)據(jù)來源于什么地方?Oracle這樣的數(shù)據(jù)庫里面的數(shù)據(jù)多是客戶生成的,譬如你銀行轉(zhuǎn)賬、淘寶訂單等。對(duì)于數(shù)據(jù)分析型的數(shù)據(jù)庫,其源數(shù)據(jù)通常是在其他系統(tǒng)中,而且數(shù)據(jù)量很大。這樣數(shù)據(jù)加載的能力就變得非常重要。Greenplum提供了非常好的數(shù)據(jù)加載方案,支持高速的加載各種數(shù)據(jù)源的不同數(shù)據(jù)格式的數(shù)據(jù),如圖(7)。

并行數(shù)據(jù)加載:因?yàn)槭遣⑿袛?shù)據(jù)加載,所以性能非常好。Greenplum有叫DCA的一體機(jī)產(chǎn)品,第一代DCA可以做到10TB/小時(shí);第二代為16TB/小時(shí)。第三代很快就要發(fā)布了,速度會(huì)更快。

數(shù)據(jù)源和數(shù)據(jù)格式:數(shù)據(jù)源支持Hadoop,文件系統(tǒng),數(shù)據(jù)庫,還有 ETL管理的數(shù)據(jù)。數(shù)據(jù)格式支持文本,CSV,Parquet,Avro等。

圖片描述

  三. Greenplum核心組件

Greenplum 數(shù)據(jù)庫包括以下核心組件:

解析器:主節(jié)點(diǎn)收到客戶端請(qǐng)求后,執(zhí)行認(rèn)證操作。認(rèn)證成功建立連接后,客戶端可以發(fā)送查詢給數(shù)據(jù)庫。解析器負(fù)責(zé)對(duì)收到的查詢SQL字符串進(jìn)行詞法解析、語法解析,并生成語法樹。

優(yōu)化器:優(yōu)化器對(duì)解析器的結(jié)果進(jìn)行處理,從所有可能的查詢計(jì)劃中選擇一個(gè)最優(yōu)或者接近最優(yōu)的計(jì)劃,生成查詢計(jì)劃。查詢計(jì)劃描述了如何執(zhí)行一個(gè)查詢,通常以樹形結(jié)構(gòu)描述。Greenplum最新的優(yōu)化器叫 ORCA,關(guān)于 ORCA,可以從 ACM 論文中獲得詳細(xì)信息。(http://dl.acm.org/citation.cfm?id=2595637&dl=ACM&coll=DL&CFID=569750122&CFTOKEN=89888184)

調(diào)度器(QD):調(diào)度器發(fā)送優(yōu)化后的查詢計(jì)劃給所有數(shù)據(jù)節(jié)點(diǎn)(Segments)上的執(zhí)行器(QE)。調(diào)度器負(fù)責(zé)任務(wù)的執(zhí)行,包括執(zhí)行器的創(chuàng)建、銷毀、錯(cuò)誤處理、任務(wù)取消、狀態(tài)更新等。

執(zhí)行器(QE):執(zhí)行器收到調(diào)度器發(fā)送的查詢計(jì)劃后,開始執(zhí)行自己負(fù)責(zé)的那部分計(jì)劃。典型的操作包括數(shù)據(jù)掃描、哈希關(guān)聯(lián)、排序、聚集等。

Interconnect:負(fù)責(zé)集群中各個(gè)節(jié)點(diǎn)間的數(shù)據(jù)傳輸。

系統(tǒng)表:系統(tǒng)表存儲(chǔ)和管理數(shù)據(jù)庫、表、字段的元數(shù)據(jù)。每個(gè)節(jié)點(diǎn)上都有相應(yīng)的拷貝。

分布式事務(wù):主節(jié)點(diǎn)上的分布式事務(wù)管理器協(xié)調(diào)數(shù)據(jù)節(jié)點(diǎn)上事務(wù)的提交和回滾操作,由兩階段提交(2PC)實(shí)現(xiàn)。每個(gè)數(shù)據(jù)節(jié)點(diǎn)都有自己的事務(wù)日志,負(fù)責(zé)自己節(jié)點(diǎn)上的事務(wù)處理。

四、Greenplum開源

2015年3月份,Pivotal宣布了Greenplum的開源計(jì)劃,經(jīng)過6個(gè)月緊鑼密鼓的工作,于10月27號(hào)正式開源。官方網(wǎng)站為http://greenplum.org。許可證書使用Apache 2許可證。

Greenplum 開源社區(qū)提供了運(yùn)行環(huán)境沙盒以及使用教程,里面包含了Greenplum數(shù)據(jù)庫的一些主要特性。從https://github.com/greenplum-db/gpdb-sandbox-tutorials 可以下載沙盒和教程。

有關(guān)Greenplum數(shù)據(jù)庫使用和開發(fā)的任何問題都可以去郵件列表討論:郵件列表有兩個(gè):gpdb-dev@greenplum.org 和gpdb-user@greenplum.org。

源代碼位于https://github.com/greenplum-db/gpdb,開源不到兩個(gè)月就有1187個(gè)收藏,256個(gè)fork,超過150個(gè)pull request,其中136個(gè)pull request 已經(jīng)關(guān)閉。貢獻(xiàn)者中除了包含Pivotal的員工外,還有來自全球(包括中國(guó)、美國(guó)、日本和歐洲)的社區(qū)開發(fā)人員。關(guān)于從源代碼編譯和安裝Greenplum數(shù)據(jù)庫,可以參考:http://gpdb.rocks/gpdb/2015/10/29/how-to-build-gpdb.html

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)