探索Greenplum的實踐,瞭解新一代大數據處理利器

作者:李樹桓 個推數據研發工程師

前言:近年來,互聯網的快速發展積累了海量大數據,而在這些大數據的處理上,不同技術棧所具備的性能也有所不同,如何快速有效地處理這些龐大的數據倉,成爲很多運營者爲之苦惱的問題!隨着Greenplum的異軍突起,以往大數據倉庫所面臨的很多問題都得到了有效解決,Greenplum也成爲新一代海量數據處理典型代表。本文結合個推數據研發工程師李樹桓在大數據領域的實踐,對處理龐大的數據量時,如何選擇有效的技術棧做了深入研究,探索出Greenplum是當前處理大數據倉較爲高效穩定的利器。

一、Greenplum誕生的背景

時間回到2002年,那時整個互聯網數據量正處於快速增長期,一方面傳統數據庫難以滿足當前的計算需求,另一方面傳統數據庫大多基於SMP架構,這種架構最大的一個特點是共享所有資源,擴展性能差,因此面對日益增長的數據量,難以繼續支撐,需要一種具有分佈式並行數據計算能力的數據庫,Greenplum正是在此背景下誕生了。

和傳統數據庫的SMP架構不同,Greenplum主要基於MPP架構,這是由多個服務器通過節點互聯網絡連接而成的系統,每個節點只訪問自己的本地資源(包括內存、存儲等),是一種完全無共享(Share Nothing)結構,擴展能力較之前有明顯提升。

圖片描述

二、解讀 Greenplum架構

Greenplum主要由Master主節點和Interconnect網絡層以及負責數據存儲和計算的多個節點共同組成。

圖片描述

Master上有主節點和從節點兩部分,兩者主要的功能是生成查詢計劃並派發,以及協調Segment並行計算,同時在Master上保存着global system catalog,這個全局目錄存着一組Greenplum數據庫系統本身所具有的元數據的系統表。需要說明的是Master本身不參與數據交互,Greenplum所有的並行任務都是在Segment的數據節點上完成的,因此,Master節點不會成爲數據庫的性能瓶頸。

中間的網絡層Interconnect,主要負責並行查詢計劃生產和Dispatch分發以及協調節點上QE執行器的並行工作, 正是因爲Interconnect的存在,Greenplum才能實現對同一個集羣中多個PostgreSQL實例的高效協同和並行計算。

整個結構圖下方負責數據存儲和計算的每個節點上又有多個實例,每個實例都是一個PostgreSQL數據庫,這些實例共享節點的IO和CPU。PostgreSQL在穩定性和性能方面較爲先進,同時又有豐富的語法支持,滿足了Greenplum的功能需要。

三、瞭解Greenplum優勢

Greenplum之所以能成爲處理海量大數據的有效工具,與其所具備的幾大優勢密不可分。
優勢一:計算效率提升
Greenplum的數據管道可以高效地將數據從磁盤傳輸到CPU,而目前市面上常用的計算引擎SPARK在傳輸數據時,則需要爲每個併發查詢分配一個內存,這對大型數據集的查詢十分不利,而Greenplum所具備的實時查詢功能,能夠有效對大數據集進行計算。
優勢二:擴展性能增強
Greenplum基於的MPP架構,節點之間完全不共享,同時又可以達到並行查詢,因此在進行線性擴展時,數據規模可以達到PB級別。目前,Greenplum已經實現了開源,並且社區生態活躍,對於使用者而言,也會覺得更爲可靠。
優勢三:功能性優化
Greenplum可以支持複雜的SQL查詢,大幅簡化了數據的操作和交互過程。而目前流行的HAWQ、Spark SQL、Impala等技術基本都基於MapReduce進行的優化,雖然部分也使用了SQL查詢,但是對SQL的支持十分有限。

四、Greenplum的容錯機制

Greenplum數據庫簡稱GPDB,它擁有豐富的特性,支持多級容錯機制和高可用。
1)主節點高可用:爲了避免主節點單點故障,特別設置一個主節點的副本(稱爲 Standby Master),通過流複製技術實現兩者同步複製,當主節點發生故障時,從節點可以成爲主節點,從而完成用戶請求並協調查詢執行。
2)數據節點高可用:每個數據節點都可以配備一個鏡像,它們之間通過文件操作級別的同步來實現數據的同步複製(稱爲filerep技術)。故障檢測進程(ftsprobe)會定期發送心跳給各個數據節點,當某個節點發生故障時,GPDB會自動進行故障切換。
3)網絡高可用:爲了避免網絡的單點故障,每個主機會配置多個網口,並使用多個交換機,避免網絡故障時造成整個服務器不可用。

同時,GPDB具有圖形化的性能監控功能,基於此功能,用戶可以確定數據庫當前的運行情況和歷史查詢信息,同時跟蹤系統使用情況和資源信息。

五、 Greenplum在業務場景中的應用

個推在大數據領域深耕多年,在處理龐大的數據倉的過程中,也在不斷進行優化和更新技術棧,在進行技術選型時,針對不同的技術棧做了如下對比:

圖片描述

總得來說,Greenplum幫助開發者有效解決了處理數據庫時遇到的一些難點,比如跨天去重、用戶自定義維度、複雜的SQL查詢等問題,同時,也方便開發者直接在原始數據上進行實時查詢,減少了數據聚合過程中的遺失,當然,強大的Greenplum仍存在着一些問題需要去完善,例如在節點擴展的過程中元數據的管理問題,分佈式數據庫在擴展節點時會帶來數據一致性,擴展的過程中有時會出現元數據混亂的情況等等,好在Greenplum有很多優秀的運維工具,能夠幫我們在發生問題及時進行排查,更好的保障業務的穩定性。但是,儘管Greenplum在處理大數據方面的優勢比較明顯,對開發者來說,還是要根據自身需求選擇相應的技術棧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章