流式大數據處理的三種框架:Storm,Spark和Samza

許多分布式計算系統都可以實時或接近實時地處理大數據流。本文將對三種Apache框架分別進行簡單介紹,然后嘗試快速、高度概述其異同。

Apache Storm

在Storm中,先要設計一個用于實時計算的圖狀結構,我們稱之為拓撲(topology)。這個拓撲將會被提交給集群,由集群中的主控節點(master node)分發代碼,將任務分配給工作節點(worker node)執行。一個拓撲中包括spout和bolt兩種角色,其中spout發送消息,負責將數據流以tuple元組的形式發送出去;而bolt則負責轉換這些數據流,在bolt中可以完成計算、過濾等操作,bolt自身也可以隨機將數據發送給其他bolt。由spout發射出的tuple是不可變數組,對應著固定的鍵值對。

?

Apache Spark

Spark Streaming是核心Spark API的一個擴展,它并不會像Storm那樣一次一個地處理數據流,而是在處理前按時間間隔預先將其切分為一段一段的批處理作業。Spark針對持續性數據流的抽象稱為DStream(DiscretizedStream),一個DStream是一個微批處理(micro-batching)的RDD(彈性分布式數據集);而RDD則是一種分布式數據集,能夠以兩種方式并行運作,分別是任意函數和滑動窗口數據的轉換。

?

Apache Samza

Samza處理數據流時,會分別按次處理每條收到的消息。Samza的流單位既不是元組,也不是Dstream,而是一條條消息。在Samza中,數據流被切分開來,每個部分都由一組只讀消息的有序數列構成,而這些消息每條都有一個特定的ID(offset)。該系統還支持批處理,即逐次處理同一個數據流分區的多條消息。Samza的執行與數據流模塊都是可插拔式的,盡管Samza的特色是依賴Hadoop的Yarn(另一種資源調度器)和Apache Kafka。

?

共同之處

以上三種實時計算系統都是開源的分布式系統,具有低延遲、可擴展和容錯性諸多優點,它們的共同特色在于:允許你在運行數據流代碼時,將任務分配到一系列具有容錯能力的計算機上并行運行。此外,它們都提供了簡單的API來簡化底層實現的復雜程度。

三種框架的術語名詞不同,但是其代表的概念十分相似:

?

對比圖

下面表格總結了一些不同之處:

?

數據傳遞形式分為三大類:

?

  1. 最多一次(At-most-once):消息可能會丟失,這通常是最不理想的結果。
  2. 最少一次(At-least-once):消息可能會再次發送(沒有丟失的情況,但是會產生冗余)。在許多用例中已經足夠。
  3. 恰好一次(Exactly-once):每條消息都被發送過一次且僅僅一次(沒有丟失,沒有冗余)。這是最佳情況,盡管很難保證在所有用例中都實現。

?

另一個方面是狀態管理:對狀態的存儲有不同的策略,Spark Streaming將數據寫入分布式文件系統中(例如HDFS);Samza使用嵌入式鍵值存儲;而在Storm中,或者將狀態管理滾動至應用層面,或者使用更高層面的抽象Trident。

用例

這三種框架在處理連續性的大量實時數據時的表現均出色而高效,那么使用哪一種呢?選擇時并沒有什么硬性規定,最多就是幾個指導方針。

如果你想要的是一個允許增量計算的高速事件處理系統,Storm會是最佳選擇。它可以應對你在客戶端等待結果的同時,進一步進行分布式計算的需求,使用開箱即用的分布式RPC(DRPC)就可以了。最后但同樣重要的原因:Storm使用Apache Thrift,你可以用任何編程語言來編寫拓撲結構。如果你需要狀態持續,同時/或者達到恰好一次的傳遞效果,應當看看更高層面的Trdent API,它同時也提供了微批處理的方式。

?

使用Storm的公司有:Twitter,雅虎,Spotify還有The Weather Channel等。

說到微批處理,如果你必須有狀態的計算,恰好一次的遞送,并且不介意高延遲的話,那么可以考慮Spark Streaming,特別如果你還計劃圖形操作、機器學習或者訪問SQL的話,Apache Spark的stack允許你將一些library與數據流相結合(Spark SQL,Mllib,GraphX),它們會提供便捷的一體化編程模型。尤其是數據流算法(例如:K均值流媒體)允許Spark實時決策的促進。

使用Spark的公司有:亞馬遜,雅虎,NASA JPLeBay還有百度等。

如果你有大量的狀態需要處理,比如每個分區都有許多十億位元組,那么可以選擇Samza。由于Samza將存儲與處理放在同一臺機器上,在保持處理高效的同時,還不會額外載入內存。這種框架提供了靈活的可插拔API:它的默認execution、消息發送還有存儲引擎操作都可以根據你的選擇隨時進行替換。此外,如果你有大量的數據流處理階段,且分別來自不同代碼庫的不同團隊,那么Samza的細顆粒工作特性會尤其適用,因為它們可以在影響最小化的前提下完成增加或移除的工作。

使用Samza的公司有:LinkedInIntuitMetamarketsQuantiplyFortscale等。

結論

本文中我們只對這三種Apache框架進行了簡單的了解,并未覆蓋到這些框架中大量的功能與更多細微的差異。同時,文中這三種框架對比也是受到限制的,因為這些框架都在一直不斷的發展,這一點是我們應當牢記的。

轉載于:https://www.cnblogs.com/myibm/p/5946411.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457158.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457158.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457158.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

models.ForeignKey( ,on_delete=models.CASCADE)? ? # 關聯外鍵

# 關聯外鍵 sgrade models.ForeignKey("Grades",on_deletemodels.CASCADE) 版本跟新后忘記加on_deletemodels.CASCADE 報錯困擾了很久 多讀報錯信息 from django.db import models# Create your models here. class Grades(models.Model):gname models.Cha…

java 產生無重復的隨機數,Java創建無重復的隨機數

小編典典最簡單的方法是創建一個可能數字的列表(1..20或任何數字),然后用對其進行混洗Collections.shuffle。然后,只需考慮你想要的許多元素。如果你的范圍最終等于你需要的元素數量(例如,用于洗牌的卡片),則這非常好。如果你想要…

linux_bash_shell_cheat_sheet(自譯)

【說明】 發現錯誤或不足請務必聯系我!!! linux_bash_shell_cheat_sheet.pdf (英文原本以及譯本下載,鏈接失效請私信或郵箱聯系) 轉載于:https://www.cnblogs.com/15ho/p/5947534.html

Day04-循環和列表

循環和列表 一、循環(***) 1.1 概念 廣義:一個周期現象或者重復出現的情況,這種狀態被稱為循環 狹義:在滿足條件的情況下,反復執行某一段代碼,在編程語言中出現的這種現象被稱為循環。被反復執行的這段代碼被稱為循環…

熱血街頭Java,下載_我愛法語 V3.01 多國語言版_6z6z下載站

我愛法語是一款功能強大的法語電子詞典工具。融合了法漢,漢法,法法,英法,法英,英漢,法意等各類詞庫。該工具使用靈活,操作簡單,充分吸收了法漢、漢法、法法、英法、法英、英漢、法意…

【demo練習二】:WPF依賴屬性的練習

2016-10-11 依賴屬性demo小樣&#xff1a; 要求&#xff1a;在窗口中點擊按鈕&#xff0c;利用設置“依賴屬性”把Label和TextBox控件里的屬性值進行改變。 MainWindow.xaml代碼&#xff1a; <Window x:Class"依賴屬性1.MainWindow" xmlns"http://schemas.m…

BZOJ 1087 [SCOI2005]互不侵犯King ——狀壓DP

【題目分析】 沉迷水題&#xff0c;吃棗藥丸。 【代碼】 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,j,k) for (int ij;i<k;i) #define ll long long int cot[512],c1[512]…

Django中object.all

前言 先拋出一個問題。銀行就相當于一個數據庫&#xff0c;你去銀行取錢存錢辦卡銷卡&#xff0c;是你告訴銀行柜員方便還是你自己去操作電腦辦卡取卡方便&#xff1f;&#xff08;你還不一定會&#xff0c;假設自動存款機還沒發明&#xff09;&#xff0c;object在數據庫中就…

java中為什么設計包裝類,Java 中為什么要設計包裝類

最近文章更新頻率慢了&#xff0c;因為最近在準備暑期實習&#xff0c;之前尋思著一邊復習一邊寫文章&#xff0c;兩全其美。后來發現一篇讀起來比較舒服的文章寫出來加上配圖得花上四五個小時甚至更多&#xff0c;但這個知識點我可能半個小時就能復習完了&#xff0c;春招在即…

bfc

BFC 已經是一個耳聽熟聞的詞語了&#xff0c;網上有許多關于 BFC 的文章&#xff0c;介紹了如何觸發 BFC 以及 BFC 的一些用處&#xff08;如清浮動&#xff0c;防止 margin 重疊等&#xff09;。雖然我知道如何利用 BFC 解決這些問題&#xff0c;但當別人問我 BFC 是什么&…

Python語法異常 Exception

常見異常&#xff1a;Exception 所有異常的基類AttributeError 特性應用或賦值失敗時引發IOError 試圖打開不存在的文件時引發IndexError 在使用序列中不存在的索引時引發KeyError …

Python的Django框架中forms表單類的使用方法詳解

Form Form的驗證思路 前端&#xff1a;form表單 后臺&#xff1a;創建form類&#xff0c;當請求到來時&#xff0c;先匹配&#xff0c;匹配出正確和錯誤信息。 Django的Form驗證實例&#xff1a; 創建project&#xff0c;進行基礎配置文件配置 settings.py settings.py之…

java讀取gpx文件,從Leaflet導出GPX文件

我想要做的是讓用戶通過選擇Leaflet中的一些GeoJson功能來創建GPX文件 . 我這樣做的方法是創建一個新的GeoJson圖層來存儲所選的特征&#xff0c;然后用一個名為togpx(https://github.com/tyrasd/togpx)的插件將其轉換為gpx . 現在我有一個gpx文件&#xff0c;但我沒有t know h…

Mono Compatibility

The easiest way to describe what Mono currently supports is:Everything in .NET 4.5 except WPF, WWF, and with limited WCF and limited ASP.NET 4.5 async stack. System.Web and WCF are candidates for ‘almost immediate’ porting from the .NET reference source …

Python的Django框架中forms表單類的使用方法詳解2

用戶表單是Web端的一項基本功能,大而全的Django框架中自然帶有現成的基礎form對象,本文就Python的Django框架中forms表單類的使用方法詳解。 Form表單的功能 自動生成HTML表單元素檢查表單數據的合法性如果驗證錯誤&#xff0c;重新顯示表單&#xff08;數據不會重置&#xf…

生動形象的理解API是如何工作的!

API(Application Programming Interface,應用程序編程接口) 簡單來說&#xff0c;就是其他人開發出來一塊程序&#xff0c;你想用&#xff0c;他會告訴你調用哪個函數&#xff0c;給這個函數傳什么參數&#xff0c;然后又會返回給你一個什么樣的結果&#xff0c;你不需要知道他…

ann matlab,人工神經網絡ann及其matlab仿真.ppt

人工神經網絡ann及其matlab仿真人工神經網絡 的研究方法及應用劉 長 安2004. 12. 31 引 言 利用機器模仿人類的智能是長期以來人們認識自然、改造自然和認識自身的理想。 研究ANN目的&#xff1a; (1)探索和模擬人的感覺、思維和行為的規律&#xff0c;設計具有人類智能的計算機…

字符串與樹的結合

https://leetcode.com/problems/scramble-string/?tabDescription 雖然題目不常見&#xff0c;但是里面關于字符串調轉和遞歸的思路&#xff0c;還是很有代表性的。 https://discuss.leetcode.com/topic/14337/share-my-4ms-c-recursive-solution/2 這個解法也把里面關于遞歸的…

ubuntu 安裝過程所需軟件

ubuntu 開發過程好用的軟件 Remarkable 一個用于書寫文檔的好工具&#xff0c;包括方便書寫數學公式。安裝過程 點擊上面“remarkable”下載.deb文件&#xff0c;然后雙擊會跳轉到ubuntun的軟件安裝中心&#xff0c;點擊install進行安裝。 sublime text3 配置 自定義快捷鍵Pref…

Day05-循環和列表字符串、元組和字典

一、字符串 字符串就是由若干個不同的unicode字符組成的不可變序列 1 .字符串創建 #單引號字符串 str1 天要下雨&#xff0c;娘要嫁人&#xff0c;由他去吧 str2 str() #空串 str3 str([10,20,30]) ? #雙引號字符串 str2 "天要下雨&#xff0c;娘要嫁人&#xff…