個推如何採用Greenplum提高PB級別數據處理能力

以下內容僅供交流學習使用,如有侵權會及時刪除。

大家好!我是來自個推的栗子,感謝Greenplum中文社區!今天我給大家講一講個推在Greenplum中的實踐。那我們就直接進入今天的分享主題《個推如何採用Greenplum提高PB級別數據處理能力》

 

近年來,移動互聯網、物聯網、雲計算的快速發展,催生了海量的數據。在大數據處理方面,不同技術棧所具備的性能也有所不同。如何快速有效地處理這些體量龐大的數據,令不少開發者爲之苦惱。隨着Greenplum的異軍突起,以往大數據倉庫所存在的很多問題都得到了有效解決,Greenplum也成爲新一代數據庫的典型代表。

今天,我將就個推在處理龐大的數據量時,如何選擇有效的技術棧進行介紹,並結合自身業務場景,分析一下Greenplum在個推中的實踐。

Greenplum助手:
首先,我們來看一下Greenplum誕生的背景。
2002年,互聯網數據量正處於快速增長期,一方面傳統數據庫難以滿足當前的計算需求,另一方面傳統數據庫大多基於SMP架構,擴展性能差。因此面對日益增長的數據量,SMP架構難以繼續支撐,開發者需要一種數據庫,可以支持分佈式並行數據計算能力,Greenplum便應運而生。大家都知道,和傳統數據庫的SMP架構不同,Greenplum是一種完全無共享(Share Nothing)的結構,相比SMP,擴展能力明顯提升。大家可以看一下這張圖。Greenplum系統主要基於MPP架構,由多個服務器通過節點互聯網絡連接而成,每個節點只需訪問自己的本地資源,包括內存、存儲等。

現在讓我們來詳細的解讀一下Greenplum的架構,,Greenplum主要由Master主節點和Interconnect網絡層以及負責數據存儲和計算的多個節點共同組成。

在Greenplum中,Master上有主節點和從節點兩部分,兩者主要的功能是生成查詢計劃、派發、協調Segment並行計算,同時通過Master維護global system catalog。 global system catalog這個全局目錄存着一組Greenplum數據庫系統本身所具有的元數據的系統表。Master通常不參與數據交互,Greenplum所有的並行任務都是在Segment的數據節點上完成的。因此,Master節點不會成爲數據庫的性能瓶頸。中間的網絡層Interconnect,主要負責並行查詢計劃Dispatch分發,同時通過libpq網絡連接協調QE節點上     執行器的並行執行。

正是因爲Interconnect的存在,Greenplum才能實現對同一個集羣中多個PostgreSQL實例的高效協同和並行計算。結構圖下方是負責數據存儲和計算的節點,每個節點上多個實例。每個實例都是一個PostgreSQL數據庫,同一機器上的實例共享節點的IO和CPU,而不同機器間相互獨立。PostgreSQL在穩定性和數據處理性能方面較優,同時又有豐富的語法支持,滿足了Greenplum的功能需要。

關於Greenplum的架構,如果大家想了解更詳細的內容,可以去看一下之前社區做的內核分享,Greenplum中文社區的B站頻道上是有視頻可以看回放的。

接着,讓我們再來看一下Greenplum的優勢在哪裏。

優勢一:支持數據快速加載和並行計算,大幅提升數據處理效率

Greenplum的數據管道可以高效地將數據從磁盤傳輸到CPU,而目前市面上常用的計算引擎Spark在傳輸數據時,則需要爲每個併發查詢分配一個內存,這對大型數據集的查詢十分不利。Greenplum能夠並行加載數據,具備實時查詢功能,可以對大數據集進行更高效的計算。

優勢二:擴展性能增強

Greenplum基於MPP架構,節點之間完全不共享,同時又可以並行查詢,因此其在進行線性擴展時,數據規模可以達到PB級別。目前,Greenplum已經實現了開源,並且社區生態活躍,對於使用者而言,也是極爲可靠的。

優勢三:功能性優化

Greenplum支持複雜的SQL查詢,大幅簡化了數據的操作和交互過程,而目前流行的HAWQ、Spark SQL、Impala等技術基本都是基於MapReduce所進行的優化,雖然部分技術也使用了SQL查詢,但是對SQL的支持比較有限。

我們針對目前市面上的幾款主流工具,進行了多維度的對比。大家可以看一下下面這張圖,在圖中,我們分別對Greenplum, phoenix,Impala+kudu的使用方式,優點和缺點進行了對比。Greenplum確實是一款非常優秀的數據庫產品。

現在,讓我們再來看一下Greenplum的容錯機制.Greenplum數據庫簡稱GPDB,它擁有豐富的特性,支持多級容錯機制,具備高可用性能。 下面我們將從三點來介紹下Greenplum的容錯機制。

1. 主節點高可用:爲了避免主節點單點故障問題,Greenplum特別設置了主節點的副本(稱爲Standby Master),通過流複製技術實現兩者同步複製。當主節點發生故障時,從節點可以成爲主節點,完成用戶請求並協調查詢執行。

2. 數據節點高可用:Greenplum每個數據節點都可以配備一個鏡像,在6版本之前其通過文件塊級別的同步來實現數據同步;在6版本時,Greenplum採用WAL日誌複製的方式來實現數據同步(稱爲filerep技術)。故障檢測進程(ftsprobe)會定期探測各個數據節點的心跳,當某個節點發生故障時,GPDB會自動進行故障切換。

3.網絡高可用:爲了避免網絡的單點故障,每個主機會配置多個網口,並使用多個交換機,防止網絡故障時,整個服務器都不可用。

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

介紹完Greenplum的誕生背景,架構,優勢和容錯機制,現在我們來講解一下Greenplum在個推業務場景中的應用。

在深入調研了Greenplum之後,我們將它納入了個推的技術地圖中,也在個推的業務線中進行了實踐,比如在 “個推應用統計”的業務中。現在,讓我們分別從業務痛點、解決方案、和使用情況三大塊來具體介紹個推是如何應用Greenplum的。

一、業務痛點

“個推應用統計”是一款移動APP數據統計分析平臺,它能從用戶屬性、使用行爲、行業對比等多指標多維度對APP進行全面統計分析,幫助APP運營者深層次挖掘用戶需求,清晰地瞭解APP所處的行業地位,爲產品運營和推廣決策提供全方位數據支撐。

最開始,“個推應用統計”中的數據統計主要是用離線統計的方式,後來隨着產品的逐漸迭代、優化,很多需求逐漸無法滿足了,例如:
1. 部分場景需要實時計算;
2. 用戶活躍統計中跨天去重的場景;
3. 指標的統計維度過多,無法提前計算。

二、解決方案

針對這一系列問題,個推引入了Greenplum作爲實時數據分析的工具。目前個推使用的是Greenplum 5.16的版本。

首先,針對實時性的問題。“個推應用統計”每天的事件日誌量達幾十億條,在數據導入的時候,我們使用了gpkafka作爲實時數據寫入的方式。

數據導入的具體流程:
1. Flume採集日誌數據後發送到Kafka集羣;
2. Spark Streaming先消費Kafka集羣中的數據,再進行實時數據清洗、處理;
3. Spark Streaming隨後將處理後的數據寫入到Kafka集羣中;

gpkafka工具消費Kafka集羣中的數據,把消費後的數據寫入到Greenplum的Heap表中,進行實時的數據分析展示。

接着,針對跨天去重的問題。我們改造了Greenplum,在其基礎上融入了Roaringbitmap。在數據處理階段,定時任務將每天的用戶信息構造成bitmap的格式,根據bitmap的“與、或”運算實現多天的用戶計算查詢。

針對複雜維度統計的場景。“個推應用統計”有一些場景,用戶會定義複雜的查詢條件,比如多維事件分析、漏斗查詢等。 “個推應用統計” 查詢功能模塊,運用了pljava,類似於一個udf腳本,通過在SQL中使用pljava定義的function,實現了複雜統計的快速查詢。

最後,我們來介紹一下個推的使用情況。

目前個推業務線使用的Greenplum集羣規模是10臺,每天的數據量達幾十億。在近期,我們也經歷了集羣的擴容,通過Greenplum中的原生tools對節點進行擴充,對數據進行了自動重分佈。Greenplum的一系列自動化工具也讓運維人員的的擴容工作變得更加便捷。

我們來說說個推引用Greenplum後,效果如何。

引入Greenplum,極大地增強了個推的數據處理能力,包括海量數據的實時入庫、實時查詢、標籤運算等。當前,數據的高效使用對於企業的重要性不言而喻。構建OLAP分析系統,對於業務的指導、公司的決策,都有舉足輕重的作用,而Greenplum正可以幫助企業快速構建分析引擎,實現全面的數據分析。大家可以看一下下圖中的使用前後的對比。

這就是我們今天分享的全部內容, 我們首先介紹了Greenplum的誕生背景,解讀了Greenplum的架構,分析了Greenplum的優勢。接着我們從業務痛點、解決方案、使用情況、和效果四個方面介紹了個推在Greenplum方面的實踐。

未來,個推也將對Greenplum進行更深入地研究,例如自定義函數的使用方式,與開發者一同分享如何在生產環境中更好地對Greenplum進行使用。

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