[轉載] 使用 Twitter Storm 處理即時的大資料

來源:互聯網
上載者:User

標籤:

轉載自http://www.ibm.com/developerworks/cn/opensource/os-twitterstorm/

串流大資料簡介

Storm 是一個開源的、大資料處理系統,與其他系統不同,它旨在用於分布式即時處理且與語言無關。瞭解 Twitter Storm、它的架構,以及批處理和串流解決方案的發展形勢。

Hadoop(大資料分析領域無可爭辯的王者)專註於批處理。這種模型對許多情形(比如為網頁建立索引)已經足夠,但還存在其他一些使用模型,它們需要來自高度動態來源的即時資訊。為瞭解決這個問題,就得藉助 Nathan Marz 推出的 Storm(現在在 Twitter 中稱為 BackType)。Storm 不處理待用資料,但它處理預計會連續的流資料。考慮到 Twitter 使用者每天產生 1.4 億條推文 (tweet),那麼就很容易看到此技術的巨大用途。

但 Storm 不只是一個傳統的大資料分析系統:它是複雜事件處理 (CEP) 系統的一個樣本。CEP 系統通常分類為計算和面向檢測,其中每個系統都可通過使用者定義的演算法在 Storm 中實現。舉例而言,CEP 可用於識別事件洪流中有意義的事件,然後即時地處理這些事件。

Nathan Marz 提供了在 Twitter 中使用 Storm 的大量樣本。一個最有趣的樣本是產生趨勢資訊。Twitter 從海量的推文中提取所浮現的趨勢,並在本地和國家層級維護它們。這意味著當一個案例開始浮現時,Twitter 的趨勢主題演算法就會即時識別該主題。這種即時演算法在 Storm 中實現為 Twitter 資料的一種連續分析。

什麼是 “大資料”?

大資料 指的是海量無法通過傳統方式管理的資料。互連網範圍的資料正在推動能夠處理這類新資料的新架構和應用程式的建立。這些架構高度可擴充,且能夠跨無限多的伺服器並行、高效地處理資料。

Storm 與傳統的大資料

Storm 與其他大資料解決方案的不同之處在於它的處理方式。Hadoop 在本質上是一個批處理系統。資料被引入 Hadoop 檔案系統 (HDFS) 並分發到各個節點進行處理。當處理完成時,結果資料返回到 HDFS 供始發者使用。Storm 支援建立拓撲結構來轉換沒有終點的資料流。不同於 Hadoop 作業,這些轉換從不停止,它們會持續處理到達的資料。

 大資料實現

Hadoop 的核心是使用 Java™ 語言編寫的,但支援使用各種語言編寫的資料分析應用程式。最新的應用程式的實現採用了更加深奧的路線,以充分利用現代語言和它們的特性。例如,位於伯克利的加利福尼亞大學 (UC) 的 Spark 是使用 Scala 語言實現的,而 Twitter Storm 是使用 Clojure(發音同 closure)語言實現的。

Clojure 是 Lisp 語言的一種現代方言。類似於 Lisp,Clojure 支援一種功能性編程風格,但 Clojure 還引入了一些特性來簡化多線程編程(一種對建立 Storm 很有用的特性)。Clojure 是一種基於虛擬機器 (VM) 的語言,在 JAVA 虛擬機器上運行。但是,儘管 Storm 是使用 Clojure 語言開發的,您仍然可以在 Storm 中使用幾乎任何語言編寫應用程式。所需的只是一個串連到 Storm 的架構的適配器。已存在針對 Scala、JRuby、Perl 和 PHP 的適配器,但是還有支援串流到 Storm 拓撲結構中的結構化查詢語言 (SQL)適配器。

 Storm 的關鍵屬性

Storm 實現的一些特徵決定了它的效能和可靠性的。Storm 使用 ZeroMQ 傳送訊息,這就消除了中間的排隊過程,使得訊息能夠直接在任務自身之間流動。在訊息的背後,是一種用於序列化和還原序列化 Storm 的原語類型的自動化且高效的機制。

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

 Storm 模型

Storm 實現了一種資料流模型,其中資料持續地流經一個轉換實體網路(參見 圖 1)。一個資料流的抽象稱為一個,這是一個無限的元組序列。元組就像一種使用一些附加的序列化代碼來表示標準資料類型(比如整數、浮點和位元組數組)或使用者定義型別的結構。每個流由一個惟一 ID 定義,這個 ID 可用於構建資料來源和接收器 (sink) 的拓撲結構。流起源於噴嘴,噴嘴將資料從外部來源流入 Storm 拓撲結構中。

圖 1. 一個普通的 Storm 拓撲結構的概念性架構

接收器(或提供轉換的實體)稱為螺栓。螺栓實現了一個流上的單一轉換和一個 Storm 拓撲結構中的所有處理。螺栓既可實現 MapReduce 之類的傳統功能,也可實現更複雜的操作(單步功能),比如過濾、彙總或與資料庫等外部實體通訊。典型的 Storm 拓撲結構會實現多個轉換,因此需要多個具有獨立元組流的螺栓。噴嘴和螺栓都實現為 Linux® 系統中的一個或多個任務。

可使用 Storm 為詞頻輕鬆地實現 MapReduce 功能。如 圖 2 中所示,噴嘴產生文本資料流,螺栓實現 Map 功能(令牌化一個流的各個單詞)。來自 “map” 螺栓的流然後流入一個實現 Reduce 功能的螺栓中(以將單詞彙總到總數中)。

圖 2. MapReduce 功能的簡單 Storm 拓撲結構

請注意,螺栓可將資料轉送到多個螺栓,也可接受來自多個來源的資料。Storm 擁有流分組 的概念,流分組實現了混排 (shuffling)(隨機但均等地將元組分發到螺栓)或欄位分組(根據流的欄位進行流分區)。還存在其他流分組,包括產生者使用自己的內部邏輯路由元組的能力。

但是,Storm 架構中一個最有趣的特性是有保障的訊息處理。Storm 可保證一個噴嘴發射出的每個元組都會處理;如果它在逾時時間內沒有處理,Storm 會從該噴嘴重放該元組。此功能需要一些聰明的技巧來在拓撲結構中跟蹤元素,也是 Storm 的重要的附加價值之一。

除了支援可靠的訊息傳送外,Storm 還使用 ZeroMQ 最大化訊息傳送效能(刪除中間排隊,實現訊息在任務間的直接傳送)。ZeroMQ 合并了擁塞檢測並調整了它的通訊,以最佳化可用的頻寬。

 Storm 樣本示範

現在讓我們通過實現一個簡單的 MapReduce 拓撲結構的代碼(參見 清單 1),看一下 Storm 樣本。這個樣本使用了來自 Nathan 的 Storm 入門工具包(可從 GitHub 擷取)(參見 參考資料 擷取連結)的巧妙設計的字數樣本。此樣本示範了 圖 2 中所示的拓撲結構,它實現了一個包含一個螺栓的 map 轉換和包含一個螺栓的 reduce 轉換。

清單 1. 為圖 2 中的 Storm 構建一個拓撲結構
01  TopologyBuilder builder = new TopologyBuilder();02          03  builder.setSpout("spout", new RandomSentenceSpout(), 5);04          05  builder.setBolt("map", new SplitSentence(), 4)06           .shuffleGrouping("spout");07  08  builder.setBolt("reduce", new WordCount(), 8)09           .fieldsGrouping("map", new Fields("word"));10  11  Config conf = new Config();12  conf.setDebug(true);13  14  LocalCluster cluster = new LocalCluster();15  cluster.submitTopology("word-count", conf, builder.createTopology());16  17  Thread.sleep(10000);18  19  cluster.shutdown();

清單 1(添加了行號以供引用)首先使用 TopologyBuilder 聲明一個新拓撲結構。接下來在第 3 行,定義了一個噴嘴(名為 spout),該噴嘴包含一個 RandomSentenceSpoutRandomSentenceSpout 類(也就是 nextTuple 方法)發出 5 個隨機句子的其中一個作為它的資料。setSpout 方法末尾的 5 參數是一個並行性提示(或要為此活動建立的任務數)。

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

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

第 11 和 12 行建立和定義了一個設定物件並啟用了 Debug 模式。Config 類包含大量配置可能性(參見 參考資料,擷取有關 Storm 類樹的更多資訊的連結)。

第 14 和 15 行建立了本地叢集(在本例中,用於定義本地模式的用途)。我定義了我的本地叢集、設定物件和拓撲結構的名稱(可通過builder 類的 createTopology 元素擷取)。

最後,在第 17 行,Storm 休眠一段時間,然後在第 19 行關閉叢集。請記住,Storm 是一個持續啟動並執行作業系統,所以任務可存在相當長時間,不斷處理它們訂閱的流上的新元組。

您可在 Storm 入門工具包中瞭解這個非常簡單的實現的更多資訊,包括噴嘴和螺栓的細節。

 

回頁首

使用 Storm

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

 其他開源的大資料解決方案

自 Google 在 2004 年推出 MapReduce 範式以來,已誕生了多個使用原始 MapReduce 範式(或擁有該範式的品質)的解決方案。Google 對 MapReduce 的最初應用是建立全球資訊網的索引。儘管此應用程式仍然很流行,但這個簡單模型解決的問題也正在增多。

表 1 提供了一個可用開源大資料解決方案的列表,包括傳統的批處理和串流應用程式。在將 Storm 引入開源之前將近一年的時間裡,Yahoo! 的 S4 分布式StreamCompute平台已向 Apache 開源。S4 於 2010 年 10 月發布,它提供了一個Alibaba Cloud HPC 平台,嚮應用程式開發人員隱藏了平行處理的複雜性。S4 實現了一個可擴充的、分散化的叢集架構,並納入了部分容錯功能。

表 1. 開源大資料解決方案
解決方案 開發商 類型 描述
Storm Twitter 串流 Twitter 的新流式大資料分析解決方案
S4 Yahoo! 串流 來自 Yahoo! 的分布式StreamCompute平台
Hadoop Apache 批處理 MapReduce 範式的第一個開源實現
Spark UC Berkeley AMPLab 批處理 支援記憶體中資料集和恢複能力的最新分析平台
Disco Nokia 批處理 Nokia 的分布式 MapReduce 架構
HPCC LexisNexis 批處理 HPC 大資料集群
 

回頁首

更多資訊

儘管 Hadoop 仍然是宣傳最多的大資料分析解決方案,但仍可能存在許多其他的解決方案,每種解決方案都具有不同的特徵。我在過去的文章中探討了 Spark,它納入了資料集的記憶體中處理功能(能夠重新構建丟失的資料)。但 Hadoop 和 Spark 都專註於大資料集的批處理。Storm 提供了一個新的大資料分析模型,而且因為它最近被開源,所以也引起廣泛的關注。

與 Hadoop 不同,Storm 是一個計算系統,它沒有包括任何儲存概念。這就使得 Storm 能夠用在各種各樣的上下文中,無論資料是從一個非傳統來源動態傳入,還是儲存在資料庫等儲存系統中(或者由一個控制器用於對其他一些裝置(比如一個交易系統)進行即時操作)都是如此。

請參見 參考資料 擷取有關 Storm 的更多資訊的連結,瞭解如何讓一個叢集正常運行,以及其他大資料分析解決方案(包括批處理和串流)。

[轉載] 使用 Twitter Storm 處理即時的大資料

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.