大數據平台Lambda架構詳解


Lambda架構由Storm的作者Nathan Marz提出。旨在設計出一個能滿足。實時大數據系統關鍵特性的架構,具有高容錯、低延時和可擴展等特。
Lambda架構整合離線計算和實時計算,融合不可變(Immutability,讀寫分離和隔離 一系列構原則,可集成Hadoop,Kafka,Storm,Spark,HBase等各類大數據組件。

Lambda架構的主要思想就是將大數據系統構建為多個層次,三層架構:批處理層、實時處理層、服務層 ,如下圖

 

批處理層:批量處理數據,生成離線結果
實時處理層:實時處理在線數據,生成增量結果
服務層:結合離線、在線計算結果,推送上層
1.批處理層
在Lambda架構中,實現batch view = function(all data)的部分被稱之為 batch layer。它承擔了兩個職責:

存儲Master Dataset,這是一個不變的持續增長的數據集
針對這個Master Dataset進行預運算

顯然,Batch Layer執行的是批量處理,例如Hadoop或者Spark支持的Map-Reduce方式。 它的執行方式可以用一段偽代碼來表示
1
function runBatchLayer():
while (true):
recomputeBatchViews()
1
2
3
利用Batch Layer進行預運算的作用實際上就是將大數據變小,從而有效地利用資源,改善實時查詢的性能。但這里有一個前提,

就是我們需要預先知道查詢需要的數據,如此才能在Batch Layer中安排執行計划,定期對數據進行批量處理。 此外,還要求這些預運算的統計數據是支持合並(merge)的。

2實時處理層
只要batch layer完成對batch view的預計算,serving layer就會對其進行 更新。這意味着在運行預計算時進入的數據不會馬上呈現到batch view中。這對於 要求完全實時的數據系統而言是不能接受的。要解決這個問題,就要通過speed layer。從對數據的處理來看,speed layer與batch layer非常相似,它們之間最大的 區別是前者只處理最近的數據,后者則要處理所有的數據。
另一個區別是為了滿足最 小的延遲,speed layer並不會在同一時間讀取所有的新數據,相反,它會在接收到 新數據時,更新realtime view, 而不會像batch layer那樣重新運算整個view。 speed layer是一種增量的計算,而非重新運算(recomputation)。
因而,Speed Layer的作用包括:

對更新到serving layer帶來的高延遲的一種補充
快速、增量的算法
最終Batch Layer會覆蓋speed layer
Speed Layer的等式表達如下所示:

realtime view = function(realtime view, new data)
1
3服務層
Batch Layer通過對master dataset執行查詢獲得了batch view,而 Serving Layer就要負責對batch view進行操作,從而為最終的實時查詢提供支撐。因此Serving Layer的職責包含:

對batch view的隨機訪問
更新batch view Serving Layer應該是一個專用的分布式數據庫,例如Elephant
DB,以支持對batch view的加載、隨機讀取以及更新。

注意,它並不支持對batch view的隨機寫,因為隨機寫會為數據庫引來許多復雜 性。簡單的特性才能使系統變得更健壯、可預測、易配置,也易於運維。

總結下來,Lambda架構就是如下的三個等式

batch view = function(all data)
realtime view = function(realtime view, new data)
query = function(batch view . realtime view)
1
2
3
4.Lambda架構組件選型
下圖給出了Lambda架構中各個層常用的組件。數據流存儲可選用基於不 可變日志的分布式消息系統Kafka;Batch Layer數據集的存儲可選用Hadoop的 HDFS,或者是阿里雲的ODPS;Batch View的預計算可以選用MapReduce或 Spark;Batch View自身結果數據的存儲可使用MySQL(查詢少量的最近結果數 據),或HBase(查詢大量的歷史結果數據)。Speed Layer增量數據的處理可選用 Storm或Spark Streaming;Realtime View增量結果數據集為了滿足實時更新的效 率,可選用Redis等內存NoSQL

 

5.Lambda架構組件選型原則
Lambda架構是個通用框架,各個層選型時不要局限時上面給出的組件,特 別是對於View的選型。從我對Lambda架構的實踐來看,因為View是個和業務關聯 性非常大的概念,View選擇組件時關鍵是要根據業務的需求,來選擇最適合查詢的 組件。不同的View組件的選擇要深入挖掘數據和計算自身的特點,從而選擇出最適 合數據和計算自身特點的組件,同時不同的View可以選擇不同的組件。

6.Lambda架構優缺點
優點:

實時:低延遲處理數據
可重計算:由於數據不可變,重新計算一樣可以得到正確的結果
容錯:第二點帶來的,程序bug、系統問題等,可以重新計算
復雜性分離、讀寫分離
缺點:

開發和運維的復雜性:Lambda需要將所有的算法實現兩次,一次是為批處理系統,另一次是為實時系統,還要求查詢得到的是兩個系統結果的合並


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM