我們以storm為例來看流式計算的功能是什麼。
下面內容引用自大圓的部落格。在storm中,乙個實時應用的計算任務被打包作為topology發布,這同hadoop的mapreduce任務相似。但是有一點不同的是:在hadoop中,mapreduce任務最終會執行完成後結束;而在storm中,topology任務一旦提交後永遠不會結束,除非你顯示去停止任務。
計算任務topology是由不同的spouts和bolts,通過資料流(stream)連線起來的圖。下面是乙個topology的結構示意圖:
其中包含有:
spout:storm中的訊息源,用於為topology生產訊息(資料),一般是從外部資料來源(如message queue、rdbms、nosql、realtime log)不間斷地讀取資料並傳送給topology訊息(tuple元組)。在計算廣告語境下,spout對key分發的可能是一些廣告日誌。
bolt:storm中的訊息處理者,用於為topology進行訊息的處理,bolt可以執行過濾,聚合,查詢資料庫等操作,而且可以一級一級的進行處理。
最終,topology會被提交到storm集群中執行;也可以通過命令停止topology的執行,將topology占用的計算資源歸還給storm集群。
資料流(stream)是storm中對資料進行的抽象,它是時間上無界的tuple元組序列。在topology中,spout是stream的源頭,負責為topology從特定資料來源發射stream;bolt可以接收任意多個stream作為輸入,然後進行資料的加工處理過程,如果需要,bolt還可以發射出新的stream給下級bolt進行處理。
下面是乙個topology內部spout和bolt之間的資料流關係:
topology中每乙個計算元件(spout和bolt)都有乙個並行執行度,在建立topology時可以進行指定,storm會在集群內分配對應並行度個數的執行緒來同時執行這一元件。
那麼,有乙個問題:既然對於乙個spout或bolt,都會有多個tas**程來執行,那麼如何在兩個元件(spout和bolt)之間傳送tuple元組呢?
storm提供了若干種資料流分發(stream grouping)策略用來解決這一問題。在topology定義時,需要為每個bolt指定接收什麼樣的stream作為其輸入(注:spout並不需要接收stream,只會發射stream)。
個人認為hadoop和流式計算有非常本質的區別,流式計算是排程資料的,而hadoop核心是排程計算,hadoop是盡量地不排程資料。而流式計算只能通過排程資料的方式進行。所以它只適合做短時間的使用者行為的收集,如果要排程特別大量的資料,用流式計算成本會很高,而且瓶頸很快會達到。s4的圖與storm相似,但s4在配置多層任務的時候會方便一些,因為它裡面所有的node,都沒有區別,只會宣告自己接收的流量,所以配置多層結構,只用把key組織好。
雅虎廣告網路被黑,惡意廣告感染數百萬裝置
雅虎廣告網路已經被一夥攻擊者利用,在yahoo.com以及包括新聞 金融 體育 名人和遊戲等在內的雅虎子站中植入用於服務惡意軟體的廣告。攻擊者在廣告網路中發現乙個漏洞,並成功感染了數百萬人的電腦。angler exploit kit 安全研究人員透露,實施這次攻擊的黑客與之前利用adobe flas...
Adsense搜尋廣告和Google搜尋聯盟
對google稍微有點了解的站長朋友一定對adsense搜尋廣告和google搜尋聯盟不陌生,它們最大的好處是有兩點,不使用程式自帶的搜尋從而減輕 自身的資料庫壓力,其次還可以通過搜尋掙些廣告費,一舉兩得,何樂而不為?下面盧鬆鬆就簡單說說給自己 加入adsense 搜尋廣告的方法。先從google搜...
頭條搜尋推出搜尋競價廣告 以資訊流廣告為主
程式設計客棧 www.cppcns.com 9月25日 訊息 近日,頭條搜尋正式推出了搜尋競價廣告。目前,頭條搜尋競價廣告以資訊流廣告為主。ihwpl 據了解,今日頭條於去年 3 月開始推廣頭條搜尋,使用者可通過今日頭條上面的搜尋框進行試用。去年 8 月,今日頭條正式推出網頁版頭條搜尋,m.tout...