大資料篇 Lambda架構和Kappa架構(上)

2021-10-05 10:35:14 字數 2805 閱讀 9033

在講解之前我們先來看看這個實際的專案。情況是這樣的,乙個正執行著的廣告精準投放業務,且擁有海量的使用者訪問行為。現在需要進行使用者行為分析倆建立乙個模型,然後根據這個模型來投放使用者喜好的廣告。

這時你應該想到,我們可以使用批處理架構來完成,沒錯,這確實也是乙個很不錯的選擇。

可是你別忘了,批處理架構有著高延遲的不足,而網際網路使用者行為的資料往往可以達到pb或eb,甚至zb級別。這種分析挖掘使用者行為的任務,往往能耗時好幾個小時甚至幾天。這樣的話,我們根據模型精準投放給特定使用者的廣告就會有一定延時了。

那我們使用流處理架構來完成是否可以?

在廣告精準投放的業務需求下,只用流處理架構會造成忽略了使用者的歷史**訪問行為,一些異常行為可能會讓我們的服務投放錯誤的廣告。

例如,使用者a的電腦暫時借給了使用者b使用,而使用者b瀏覽了一些新的**型別(與使用者a不同)。這種情況下,我們無法判斷使用者a實際上是否對這型別的廣告感興趣,所以不能只根據這些新的瀏覽記錄給使用者a推送廣告。

這時我們應該怎樣優化我們的架構呢?接下來我們講講今天的主題之一,lambda架構,或許你就會有啟發了。

簡介:lambda架構(lambda architecture)是由twitter工程師南森·馬茨(nathan marz)提出的大資料處理架構。這一架構的提出基於馬茨在backtype和twitter上的分布式資料處理系統的經驗。

lambda架構使開發人員能夠構建大規模分布式資料處理系統。它具有很好的靈活性和可擴充套件性,也對硬體故障和人為失誤有很好的容錯性。

lambda架構分為三層:批處理層(batch layer)、速度處理層(speed layer)、服務層(serving layer)。

批處理層:

批處理層儲存管理主資料集(不可變的資料集)和預先批處理計算好的檢視。

批處理層使用可處理大量資料的分布式處理系統預先計算結果。它通過處理所有已有歷史資料來實現資料的準確性。這意味著它是基於完整的資料集來重新計算的,能夠修復任何錯誤,然後更新現有的資料檢視。輸出通常儲存在唯讀資料庫中,更新則完全取代現有的預先設計好的檢視。

速度層:

速度層會實時的處理inlaid的大資料。

速度層通過提供最新資料的實時檢視來最小化延遲。速度層所生成的資料檢視可能不如批處理層最終生成的檢視那般準確或者完整,但它們幾乎在收到資料後立即可用。而當同樣的資料在批處理層處理完成後,在速度層的資料就可以被替代掉了。

本質上,速度層彌補了批處理層所導致的資料檢視滯後。比如說,批處理層的每個人物都需要1小時才能完成,而在著1小時裡,我們是無法獲取批處理層最新任務給出的資料檢視的。而速度層因為能夠實時處理資料給出結果,就彌補了這1小時的滯後。

服務層:

所有在批處理層和速度層處理完的結果都輸出儲存在服務層中,服務層通過返回預先計算的資料檢視或最從速度層處理構建好資料檢視來響應查詢。

回到剛剛的問題。我們如何既能實時分析使用者新的**瀏覽行為又能兼顧到使用者的**瀏覽行為歷史呢?沒錯,那就是lambda架構。

所有的使用者行為資料都可以同時流入批處理層和速度層。批處理層永久儲存資料並且對資料進行預處理,得到我們想要的使用者行為模型寫入服務層。而速度層也同時對使用者行為資料進行處理,得到實時的使用者行為模型。

而當」應該對使用者投放什麼樣的廣告「作為查詢(query)來到時,我們從服務層既查詢服務層中儲存好的批處理輸出模型,也對速度層中處理的實時行為進行查詢,這樣我們就可以得到乙個完整的使用者行為歷史了。

接下來我們講講生活中的用例

智慧型停車 案例分析

生活在大城市中,我們常常面臨找停車位這一大難題,特別是週末,外出遊玩,可能繞個幾十分鐘才能找到停車位。

我們來梳理一下我們可以利用到的大資料。

首先是可用拿到各類停車場的資料,這類資料的實時性雖然不一定高,但是資料的準確性高。那麼我們能不能只通過這類大資料推薦停車位呢?

我來給你舉個極端的例子。假設在乙個區域有三個停車場,停車場a現在只剩乙個停車位了。而停車場b和c還有很多停車位。而在這個時候距離停車場a比較近的位置有10位車主在使用這套系統尋求推薦停車位。如果只通過車主和停車場的距離和停車場剩餘停車位來判斷的話,系統很有可能會將這個只剩下乙個停車位的停車場a推薦給這10個使用者。

結果可想而知,只有一位幸運兒能找到停車位,剩下的9位車主需要重新尋找停車位。

如此反覆迴圈,使用者體驗會非常差,甚至導致使用者放棄這套系統。

那我們如何改進推薦精度呢?

你可能會想到利用這些停車場的歷史資料,建立乙個人工智慧的**模型,在推薦停車位的時候,不單單考慮到附近停車場的剩餘車位和使用者與停車場的相鄰距離,還能將**模型應用在推薦裡,看看未來的一段時間內這個停車場是否有可能會被停滿。

這時候我們的停車位推薦系統就成了乙個基於分數(score)來推薦停車位的系統了。

你停下來想想我們怎麼應用lambda架構提高準確度呢?

這些停車位的歷史資料或者每隔半小時拿到的停車位資料,我們可以把它作為批處理資料。

我們還可以將使用者的gps資料聚集起來,這些需要每秒手機的gps資料剛好又是速度層擅長的實時處理資料。從這些gps資料來建立一套**模型**附近停車場位置的擁擠程度。

服務層將從批處理層和速度層得到的分數結合後得到最高分數的停車場推薦給使用者。這樣利用率歷史資料(停車場資料)和實時資料(使用者的gps資料)能大大提公升推薦的準確性。

抱歉,來晚了

kylin 大資料架構 大資料Lambda架構

眾所周知,大資料的volume 體積 和velocity 速度 在架構設計中是一對矛盾,具體的表現是大體積的資料處理起來速度就慢。架對於大資料的批處理和實時處理兩種場景往往需要不同的技術。lambda架構就是將實時處理和批處理兩個場景放在一起。apache hadoop提供了hdfs和計算框架 ma...

大資料平台Lambda架構詳解

lambda架構由storm的作者nathan marz提出。旨在設計出乙個能滿足。實時大資料系統關鍵特性的架構,具有高容錯 低延時和可擴充套件等特。lambda架構整合離線計算和實時計算,融合不可變 immutability,讀寫分離和隔離 一系列構原則,可整合hadoop,kafka,storm...

用於實時大資料處理的Lambda架構

如果採用hdfs來儲存資料,我們就可以使用mapreduce來在資料集上構建查詢的view。batch layer的工作可以簡單的用如下偽碼表示 該工作看似簡單,實質非常強大。任何人為或機器發生的錯誤,都可以通過修正錯誤後重新計算來恢復得到正確結果。對view的理解 view是乙個和業務關聯性比較大...