自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Twitter利用Storm系統(tǒng)處理實時大數(shù)據(jù)

運維 系統(tǒng)運維
Storm 是一個開源的、大數(shù)據(jù)處理系統(tǒng),與其他系統(tǒng)不同,它旨在用于分布式實時處理且與語言無關(guān)。了解 Twitter Storm、它的架構(gòu),以及批處理和流式處理解決方案的發(fā)展形勢。

Hadoop(大數(shù)據(jù)分析領(lǐng)域無可爭辯的王者)專注于批處理。這種模型對許多情形(比如為網(wǎng)頁建立索引)已經(jīng)足夠,但還存在其他一些使用模型,它們需要來自高度動態(tài)的來源的實時信息。為了解決這個問題,就得借助 Nathan Marz 推出的 Storm(現(xiàn)在在 Twitter 中稱為 BackType)。Storm 不處理靜態(tài)數(shù)據(jù),但它處理預(yù)計會連續(xù)的流數(shù)據(jù)??紤]到 Twitter 用戶每天生成 1.4 億條推文 (tweet),那么就很容易看到此技術(shù)的巨大用途。

但 Storm 不只是一個傳統(tǒng)的大數(shù)據(jù)分析系統(tǒng):它是復(fù)雜事件處理 (CEP) 系統(tǒng)的一個示例。CEP 系統(tǒng)通常分類為計算和面向檢測,其中每個系統(tǒng)都可通過用戶定義的算法在 Storm 中實現(xiàn)。舉例而言,CEP 可用于識別事件洪流中有意義的事件,然后實時地處理這些事件。

Nathan Marz 提供了在 Twitter 中使用 Storm 的大量示例。一個最有趣的示例是生成趨勢信息。Twitter 從海量的推文中提取所浮現(xiàn)的趨勢,并在本地和***別維護(hù)它們。這意味著當(dāng)一個案例開始浮現(xiàn)時,Twitter 的趨勢主題算法就會實時識別該主題。這種實時算法在 Storm 中實現(xiàn)為 Twitter 數(shù)據(jù)的一種連續(xù)分析。

Storm 與傳統(tǒng)的大數(shù)據(jù)

Storm 與其他大數(shù)據(jù)解決方案的不同之處在于它的處理方式。Hadoop 在本質(zhì)上是一個批處理系統(tǒng)。數(shù)據(jù)被引入 Hadoop 文件系統(tǒng) (HDFS) 并分發(fā)到各個節(jié)點進(jìn)行處理。當(dāng)處理完成時,結(jié)果數(shù)據(jù)返回到 HDFS 供始發(fā)者使用。Storm 支持創(chuàng)建拓?fù)浣Y(jié)構(gòu)來轉(zhuǎn)換沒有終點的數(shù)據(jù)流。不同于 Hadoop 作業(yè),這些轉(zhuǎn)換從不停止,它們會持續(xù)處理到達(dá)的數(shù)據(jù)。

  大數(shù)據(jù)實現(xiàn)

  Hadoop 的核心是使用 Java? 語言編寫的,但支持使用各種語言編寫的數(shù)據(jù)分析應(yīng)用程序。***的應(yīng)用程序的實現(xiàn)采用了更加深奧的路線,以充分利用現(xiàn)代語言和它們的特性。例如,位于伯克利的加利福尼亞大學(xué) (UC) 的 Spark 是使用 Scala 語言實現(xiàn)的,而 Twitter Storm 是使用 Clojure(發(fā)音同 closure)語言實現(xiàn)的。

  Clojure 是 Lisp 語言的一種現(xiàn)代方言。類似于 Lisp,Clojure 支持一種功能性編程風(fēng)格,但 Clojure 還引入了一些特性來簡化多線程編程(一種對創(chuàng)建 Storm 很有用的特性)。Clojure 是一種基于虛擬機 (VM) 的語言,在 Java 虛擬機上運行。但是,盡管 Storm 是使用 Clojure 語言開發(fā)的,您仍然可以在 Storm 中使用幾乎任何語言編寫應(yīng)用程序。所需的只是一個連接到 Storm 的架構(gòu)的適配器。已存在針對 Scala、JRuby、Perl 和 PHP 的適配器,但是還有支持流式傳輸?shù)?Storm 拓?fù)浣Y(jié)構(gòu)中的結(jié)構(gòu)化查詢語言適配器。

  Storm 的關(guān)鍵屬性

  Storm 實現(xiàn)的一些特征決定了它的性能和可靠性的。Storm 使用 ZeroMQ 傳送消息,這就消除了中間的排隊過程,使得消息能夠直接在任務(wù)自身之間流動。在消息的背后,是一種用于序列化和反序列化 Storm 的原語類型的自動化且高效的機制。

  Storm 的一個最有趣的地方是它注重容錯和管理。Storm 實現(xiàn)了有保障的消息處理,所以每個元組都會通過該拓?fù)浣Y(jié)構(gòu)進(jìn)行全面處理;如果發(fā)現(xiàn)一個元組還未處理,它會自動從噴嘴處重放。Storm 還實現(xiàn)了任務(wù)級的故障檢測,在一個任務(wù)發(fā)生故障時,消息會自動重新分配以快速重新開始處理。Storm 包含比 Hadoop 更智能的處理管理,流程會由監(jiān)管員來進(jìn)行管理,以確保資源得到充分使用。

  Storm 模型

  Storm 實現(xiàn)了一種數(shù)據(jù)流模型,其中數(shù)據(jù)持續(xù)地流經(jīng)一個轉(zhuǎn)換實體網(wǎng)絡(luò)(參見 圖 1)。一個數(shù)據(jù)流的抽象稱為一個流,這是一個無限的元組序列。元組就像一種使用一些附加的序列化代碼來表示標(biāo)準(zhǔn)數(shù)據(jù)類型(比如整數(shù)、浮點和字節(jié)數(shù)組)或用戶定義類型的結(jié)構(gòu)。每個流由一個惟一 ID 定義,這個 ID 可用于構(gòu)建數(shù)據(jù)源和接收器 (sink) 的拓?fù)浣Y(jié)構(gòu)。流起源于噴嘴,噴嘴將數(shù)據(jù)從外部來源流入 Storm 拓?fù)浣Y(jié)構(gòu)中。

  圖 1. 一個普通的 Storm 拓?fù)浣Y(jié)構(gòu)的概念性架構(gòu)

  接收器(或提供轉(zhuǎn)換的實體)稱為螺栓。螺栓實現(xiàn)了一個流上的單一轉(zhuǎn)換和一個 Storm 拓?fù)浣Y(jié)構(gòu)中的所有處理。螺栓既可實現(xiàn) MapReduce 之類的傳統(tǒng)功能,也可實現(xiàn)更復(fù)雜的操作(單步功能),比如過濾、聚合或與數(shù)據(jù)庫等外部實體通信。典型的 Storm 拓?fù)浣Y(jié)構(gòu)會實現(xiàn)多個轉(zhuǎn)換,因此需要多個具有獨立元組流的螺栓。噴嘴和螺栓都實現(xiàn)為 Linux? 系統(tǒng)中的一個或多個任務(wù)。

  可使用 Storm 為詞頻輕松地實現(xiàn) MapReduce 功能。如 圖 2 中所示,噴嘴生成文本數(shù)據(jù)流,螺栓實現(xiàn) Map 功能(令牌化一個流的各個單詞)。來自 “map” 螺栓的流然后流入一個實現(xiàn) Reduce 功能的螺栓中(以將單詞聚合到總數(shù)中)。

  圖 2. MapReduce 功能的簡單 Storm 拓?fù)浣Y(jié)構(gòu)

  請注意,螺栓可將數(shù)據(jù)傳輸?shù)蕉鄠€螺栓,也可接受來自多個來源的數(shù)據(jù)。Storm 擁有流分組 的概念,流分組實現(xiàn)了混排 (shuffling)(隨機但均等地將元組分發(fā)到螺栓)或字段分組(根據(jù)流的字段進(jìn)行流分區(qū))。還存在其他流分組,包括生成者使用自己的內(nèi)部邏輯路由元組的能力。

  但是,Storm 架構(gòu)中一個最有趣的特性是有保障的消息處理。Storm 可保證一個噴嘴發(fā)射出的每個元組都會處理;如果它在超時時間內(nèi)沒有處理,Storm 會從該噴嘴重放該元組。此功能需要一些聰明的技巧來在拓?fù)浣Y(jié)構(gòu)中跟蹤元素,也是 Storm 的重要的附加價值之一。

  除了支持可靠的消息傳送外,Storm 還使用 ZeroMQ ***化消息傳送性能(刪除中間排隊,實現(xiàn)消息在任務(wù)間的直接傳送)。ZeroMQ 合并了擁塞檢測并調(diào)整了它的通信,以優(yōu)化可用的帶寬。

Storm 示例演示

  現(xiàn)在讓我們通過實現(xiàn)一個簡單的 MapReduce 拓?fù)浣Y(jié)構(gòu)的代碼(參見 清單 1),看一下 Storm 示例。這個示例使用了來自 Nathan 的 Storm 入門工具包(可從 GitHub 獲?。▍⒁?參考資料 獲取鏈接)的巧妙設(shè)計的字?jǐn)?shù)示例。此示例演示了 圖 2 中所示的拓?fù)浣Y(jié)構(gòu),它實現(xiàn)了一個包含一個螺栓的 map 轉(zhuǎn)換和包含一個螺栓的 reduce 轉(zhuǎn)換。

  清單 1. 為圖 2 中的 Storm 構(gòu)建一個拓?fù)浣Y(jié)構(gòu)

  1. TopologyBuilder builder = new TopologyBuilder();  
  2. builder.setSpout("spout", new RandomSentenceSpout(), 5);  
  3. builder.setBolt("map", new SplitSentence(), 4)  
  4. .shuffleGrouping("spout");  
  5. builder.setBolt("reduce", new WordCount(), 8)  
  6. .fieldsGrouping("map", new Fields("word"));  
  7. Config conf = new Config();  
  8. conf.setDebug(true);  
  9. LocalCluster cluster = new LocalCluster();  
  10. cluster.submitTopology("word-count", conf, builder.createTopology());  
  11. Thread.sleep(10000);  
  12. cluster.shutdown(); 

  清單 1(添加了行號以供引用)首先使用 TopologyBuilder 聲明一個新拓?fù)浣Y(jié)構(gòu)。接下來在第 3 行,定義了一個噴嘴(名為 spout),該噴嘴包含一個 RandomSentenceSpout。RandomSentenceSpout 類(也就是 nextTuple 方法)發(fā)出 5 個隨機句子的其中一個作為它的數(shù)據(jù)。setSpout 方法末尾的 5 參數(shù)是一個并行性提示(或要為此活動創(chuàng)建的任務(wù)數(shù))。

  在第 5 和 6 行。我定義了***個螺栓(或算法轉(zhuǎn)換實體),在本例中為 map(或 split)螺栓。這個螺栓使用 SplitSentence 令牌化輸入流并將其作為輸出的各個單詞發(fā)出。請注意,第 6 行使用了 shuffleGrouping,它定義了對此螺栓(在本例中為 “spout”)的輸入訂閱,還將流分組定義為混排。這種混排分組意味著來自噴嘴的輸入將混排 或隨機分發(fā)給此螺栓中的任務(wù)(該螺栓已提示具有 4 任務(wù)并行性)。

  在第 8 和 9 行,我定義了***一個螺栓,這個螺栓實際上用于 reduce 元素,使用該元素的輸入作為 map 螺栓。WordCount 方法實現(xiàn)了必要的字?jǐn)?shù)統(tǒng)計行為(將相似的單詞分組到一起,以維護(hù)總數(shù)),但不是混排的,所以它的輸出是一致的。如果有多個任務(wù)在實現(xiàn) reduce 行為,那么您最終會得到分段的計數(shù),而不是總數(shù)。

  第 11 和 12 行創(chuàng)建和定義了一個配置對象并啟用了 Debug 模式。Config 類包含大量配置可能性(參見 參考資料,獲取有關(guān) Storm 類樹的更多信息的鏈接)。

  第 14 和 15 行創(chuàng)建了本地集群(在本例中,用于定義本地模式的用途)。我定義了我的本地集群、配置對象和拓?fù)浣Y(jié)構(gòu)的名稱(可通過 builder 類的 createTopology 元素獲?。?/p>

  ***,在第 17 行,Storm 休眠一段時間,然后在第 19 行關(guān)閉集群。請記住,Storm 是一個持續(xù)運行的操作系統(tǒng),所以任務(wù)可存在相當(dāng)長時間,不斷處理它們訂閱的流上的新元組。

  您可在 Storm 入門工具包中了解這個非常簡單的實現(xiàn)的更多信息,包括噴嘴和螺栓的細(xì)節(jié)。

  使用 Storm

  Nathan Marz 編寫了一組簡單易懂的文檔,詳細(xì)介紹了如何安裝 Storm 來執(zhí)行集群模式和本地模式的操作。本地模式無需一個龐大的節(jié)點集群,即可使用 Storm。如果需要在一個集群中使用 Storm 但缺乏節(jié)點,也可在 Amazon Elastic Compute Cloud (EC2) 中實現(xiàn)一個 Storm 集群。請參見 參考資料 獲取每個 Storm 模式(本地、集群和 Amazon EC2)的參考信息。

  其他開源的大數(shù)據(jù)解決方案

  自 Google 在 2004 年推出 MapReduce 范式以來,已誕生了多個使用原始 MapReduce 范式(或擁有該范式的質(zhì)量)的解決方案。Google 對 MapReduce 的最初應(yīng)用是建立萬維網(wǎng)的索引。盡管此應(yīng)用程序仍然很流行,但這個簡單模型解決的問題也正在增多。

  表 1 提供了一個可用開源大數(shù)據(jù)解決方案的列表,包括傳統(tǒng)的批處理和流式處理應(yīng)用程序。在將 Storm 引入開源之前將近一年的時間里,Yahoo! 的 S4 分布式流計算平臺已向 Apache 開源。S4 于 2010 年 10 月發(fā)布,它提供了一個高性能計算 (HPC) 平臺,向應(yīng)用程序開發(fā)人員隱藏了并行處理的復(fù)雜性。S4 實現(xiàn)了一個可擴展的、分散化的集群架構(gòu),并納入了部分容錯功能。

  表 1. 開源大數(shù)據(jù)解決方案

 

  更多信息

  盡管 Hadoop 仍然是宣傳最多的大數(shù)據(jù)分析解決方案,但仍可能存在許多其他的解決方案,每種解決方案都具有不同的特征。我在過去的文章中探討了 Spark,它納入了數(shù)據(jù)集的內(nèi)存中處理功能(能夠重新構(gòu)建丟失的數(shù)據(jù))。但 Hadoop 和 Spark 都專注于大數(shù)據(jù)集的批處理。Storm 提供了一個新的大數(shù)據(jù)分析模型,而且因為它最近被開源,所以也引起廣泛的關(guān)注。

  與 Hadoop 不同,Storm 是一個計算系統(tǒng),它沒有包括任何存儲概念。這就使得 Storm 能夠用在各種各樣的上下文中,無論數(shù)據(jù)是從一個非傳統(tǒng)來源動態(tài)傳入,還是存儲在數(shù)據(jù)庫等存儲系統(tǒng)中(或者由一個控制器用于對其他一些設(shè)備(比如一個交易系統(tǒng))進(jìn)行實時操作)都是如此。

  請參見 參考資料 獲取有關(guān) Storm 的更多信息的鏈接,了解如何讓一個集群正常運行,以及其他大數(shù)據(jù)分析解決方案(包括批處理和流式處理)。

參考資料 

  • 復(fù)雜事件處理 是 Storm 以及其他許多解決方案(比如 Yahoo! 的 S4)實現(xiàn)的模式。Storm 與 S4 之間的一個重要區(qū)別在于,Storm 在面對故障時提供了有保障的消息處理,而 S4 可能丟失消息。
     
  • Nathan Marz(Storm 背后的重要開發(fā)人員)為他的新產(chǎn)品編寫了多篇有趣且實用的介紹文章。對 Storm 的最早介紹來自 2011 年 5 月的 Storm 預(yù)覽:能夠?qū)崟r處理的 Hadoop - BackType Technology,隨后是 8 月推出的 A Storm is coming: more details and plans for release。
     
  • Storm 維基 提供了有關(guān) Storm、它的理論基礎(chǔ)的大量優(yōu)秀文檔,以及有關(guān)獲取 Storm 和設(shè)置新項目的各種教程。您還將找到一些有關(guān) Storm 的許多方面的實用文檔,包括 Storm 在本地模式、集群模式和在 Amazon 上的使用。
     
  • Spark,一種快速數(shù)據(jù)分析替代方案(M. Tim Jones,developerWorks,2011 年 11 月)介紹了 UC Berkeley 的內(nèi)存中彈性數(shù)據(jù)分析平臺。
     
  • 應(yīng)用程序虛擬化的過去與未來(M. Tim Jones,developerWorks,2011 年 5 月)詳細(xì)介紹了虛擬化在語言抽象方面的使用。Storm 使用基于虛擬機的語言 Clojure 來實現(xiàn),還使用 Java 技術(shù)和許多其他語言來構(gòu)建它的內(nèi)部(螺栓)應(yīng)用程序。
     
  • GitHub 上提供了 Storm 的一個 thorough class tree exists,詳細(xì)介紹了 Storm 的類和接口。
     
  • Hadoop 已開始解決簡單批處理以外的模型。例如,通過調(diào)度,Hadoop 可調(diào)整其處理數(shù)據(jù)的方式,以便更多地關(guān)注交互性,而不是批量數(shù)據(jù)處理。在 Hadoop 中的調(diào)度(M. Tim Jones,developerWorks,2011 年 12 月)中了解有關(guān) Hadoop 調(diào)度的更多信息。
責(zé)任編輯:黃丹 來源: developerWorks
相關(guān)推薦

2022-03-01 08:40:34

StormHadoop批處理

2014-04-08 14:21:09

Twitter StoStormStorm 集群

2012-05-18 10:49:36

SAP大數(shù)據(jù)HANA

2013-09-05 09:47:35

TwitterSummingbird開源

2012-12-25 09:36:11

Storm大數(shù)據(jù)分析

2016-09-04 15:14:09

攜程實時數(shù)據(jù)數(shù)據(jù)平臺

2013-09-23 09:24:33

2014-04-15 11:24:53

Twitter Sto

2023-11-13 11:01:25

數(shù)據(jù)技術(shù)

2015-11-09 09:58:31

大數(shù)據(jù)Lambda架構(gòu)

2016-11-08 12:49:27

大數(shù)據(jù)分布式系統(tǒng)Druid-IO

2017-08-09 13:30:21

大數(shù)據(jù)Apache Kafk實時處理

2014-02-14 15:49:03

storm安裝部署

2012-08-30 14:33:03

Spark

2014-12-15 09:32:17

StormSpark

2013-03-06 10:31:40

MapReduce大數(shù)據(jù)SPF

2009-06-17 13:50:15

實時搜索FacebookTwitter

2017-08-31 16:36:26

2013-04-19 14:28:07

大數(shù)據(jù)

2013-05-14 10:01:57

Luchy Sort
點贊
收藏

51CTO技術(shù)棧公眾號