處理大資料流常用的三種Apache架構:Storm、Spark和Samza。(主要介紹Storm)

來源:互聯網
上載者:User

標籤:批處理   記憶體   查詢   pac   作業   行資料   資料庫   處理   正則   

  處理即時的大資料流最常用的就是分散式運算系統,下面分別介紹Apache中處理大資料流的三大架構:

  • Apache Storm
    這是一個分布式即時大資料處理系統。Storm設計用於在容錯和水平可擴充方法中處理大量資料。他是一個流資料架構,具有最高的社區率。雖然Storm是無狀態的,它通過ApacheZooKeeper管理分布式環境和雞群狀態。使用起來非常簡單,並且還支援並行地對即時資料執行各種操作。      Apache Storm繼續成為即時資料分析的領導者是因為它的易於操作和設定,並且它保證每個訊息將通過拓撲至少處理一次。使用storm時常常會設計一個用於即時計算的土狀結構,稱之為拓撲(topplogy)。將這個拓撲提交給叢集之後,叢集中的主控節點(master node)將分發代碼,將任務分配給工作節點(worker node)。拓撲結構中履行職能的角色有兩種:spout和bolt,其中spout發送訊息,負責將資料流以tuple元組(不可變數組,固定的索引值對)的形式發送出去;bolt則負責轉換這些資料流,在bolt中可以完成計算、過濾等操作,bolt之間也可以隨機互相發送訊息。      下面是Storm的叢集設計和其內部架構。   

 

     Twitter使用Storm架構處理流式大資料的應用情境:

 

        Twitter分析的輸入來自Twitter Streaming API。Spout將使用Twitter Streaming API讀取使用者的tweets,並作為元組流輸出。來自spout的單個元組將具有twitter使用者名稱和單個tweet作為逗號分隔值。然後,這個元組的蒸汽將被轉寄到Bolt,並且Bolt將tweet拆分成單個字,計算字數,並將資訊儲存到配置的資料來源。現在,我們可以通過查詢資料來源輕鬆獲得結果。Apache Storm vs Hadoop

基本上Hadoop和Storm架構用於分析大資料。兩者互補,在某些方面有所不同。Apache Storm執行除持久性之外的所有操作,而Hadoop在所有方面都很好,但滯後於即時計算。下表比較了Storm和Hadoop的屬性。

Storm Hadoop
即時資料流處理 批量處理
無狀態 有狀態
主/從架構與基於ZooKeeper的協調。主節點稱為nimbus,從屬節點是主管 具有/不具有基於ZooKeeper的協調的主 - 從結構。主節點是作業跟蹤器,從節點是任務跟蹤器
Storm流過程在叢集上每秒可以訪問數萬條訊息。 HadoopDistributed File System(HDFS)使用MapReduce架構來處理大量的資料,需要幾分鐘或幾小時。
Storm拓撲運行直到使用者關閉或意外的不可恢複故障。 MapReduce作業按順序執行並最終完成。
兩者都是分布式和容錯的
如果nimbus / supervisor死機,重新啟動使它從它停止的地方繼續,因此沒有什麼受到影響。 如果JobTracker死機,所有正在啟動並執行作業都會丟失。
使用Apache Storm的例子

Apache Storm對於即時大資料流處理非常有名。因此,大多數公司都將Storm用作其系統的一個組成部分。一些值得注意的例子如下 - 

Twitter - Twitter正在使用Apache Storm作為其“發布商分析產品”。 “發布商分析產品”處理Twitter平台中的每個tweets和點擊。 Apache Storm與Twitter基礎架構深度整合。

NaviSite - NaviSite正在使用Storm進行事件記錄監控/審計系統。系統中產生的每個日誌都將通過Storm。Storm將根據配置的Regex集檢查訊息,如果存在匹配,那麼該特定訊息將儲存到資料庫。

Wego - Wego是位於新加坡的旅行元搜尋引擎。旅行相關資料來自世界各地的許多來源,時間不同。Storm協助Wego搜尋即時資料,解決並發問題,並為終端使用者找到首選。Apache Storm優勢      Storm優勢就在於Storm是即時的連續性的分散式運算架構,一旦運行起來,除非你將它殺掉,否則將一直Strom一直處於處理計算或者等待計算的狀態,這一點Spark和hadoop都做不到。但是這些架構各有各的優點,每種架構都有自己的最佳應用情境。Storm是最佳的流式計算架構,Storm由Java和Clojure寫成,Storm的優點是全記憶體計算,所以它的定位是分布式即時計算系統,按照Storm作者的說法,Storm對於即時計算的意義類似於Hadoop對於批處理的意義。Storm的適用情境:
1)流資料處理
Storm可以用來處理源源不斷流進來的訊息,處理之後將結果寫入到某個儲存中去。
2)分布式RPC。由於Storm的處理組件是分布式的,而且處理延遲極低,所以可以作為一個通用的分布式RPC架構來使用。
  • Apache Spark
      Spark Streaming是核心Spark API的一個擴充,它並不會像Storm那樣一次一個地處理資料流,而是在處理前按時間間隔預先將其切分為一段一段的批次工作。Spark針對持久性資料流的抽象稱為DStream(DiscretizedStream),一個DStream是一個微批處理(micro-batching)的RDD(彈性分布式資料集);而RDD則是一種分布式資料集,能夠以兩種方式並行運作,分別是任意函數和滑動視窗資料的轉換。      Spark提交作業的方式有兩種:
  • Apache Samza
Samza處理資料流時,會分別按次處理每條收到的訊息。Samza的流單位既不是元組,也不是Dstream,而是一條條訊息。在Samza中,資料流被切分開來,每個部分都由一組唯讀訊息的有序數列構成,而這些訊息每條都有一個特定的ID(offset)。該系統還支援批處理,即逐次處理同一個資料流分區的多條訊息。Samza的執行與資料流模組都是可插拔式的,儘管Samza的特色是依賴Hadoop的Yarn(另一種資源調度器)和Apache Kafka。  
  • 三種架構的比較:

共同之處:

      以上三種即時計算系統都是開源的分布式系統,具有低延遲、可擴充和容錯性諸多優點,它們的共同特色在於:允許你在運行資料流代碼時,將任務分配到一系列具有容錯能力的電腦上並行運行。此外,它們都提供了簡單的API來簡化底層實現的複雜程度。 不同之處:      從應用的角度來分析,:如果你想要的是一個允許增量計算的高速事件處理系統,Storm會是最佳選擇。它可以應對你在用戶端等待結果的同時,進一步進行分散式運算的需求,使用開箱即用的分布式RPC(DRPC)就可以了。最後但同樣重要的原因:Storm使用Apache Thrift,你可以用任何程式設計語言來編寫拓撲結構。如果你需要狀態持續,同時/或者達到恰好一次的傳遞效果,應當看看更高層面的Trdent API,它同時也提供了微批處理的方式。

處理大資料流常用的三種Apache架構:Storm、Spark和Samza。(主要介紹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.