大數據實戰項目必備技能三:storm

導讀 Storm是一個分佈式計算框架,主要使用Clojure與Java語言編寫,最初是由Nathan Marz帶領Backtype公司團隊創建,在Backtype公司被Twitter公司收購後進行開源。最初的版本是在2011年9月17日發行,版本號0.5.0。

2013年9月,Apache基金會開始接管並孵化Storm項目。Apache Storm是在Eclipse Public License下進行開發的,它提供給大多數企業使用。經過1年多時間,2014年9月,Storm項目成為Apache的頂級項目。目前,Storm的最新版本1.1.0。

Storm是一個免費開源的分佈式實時計算系統。Storm能輕鬆可靠地處理無界的數據流,就像Hadoop對數據進行批處理;

Storm與Hadoop的區別

  • Storm用於實時計算,Hadoop用於離線計算。
  • Storm處理的數據保存在內存中,源源不斷;Hadoop處理的數據保存在文件系統中,一批一批處理。
  • Storm的數據通過網絡傳輸進來;Hadoop的數據保存在磁盤中。
  • Storm與Hadoop的編程模型相似

Storm hadoop 角色 Nimbus JobTracker Supervisor TaskTracker Worker Child 應用名稱 Topology Job 編程接口 Spout/Bolt Mapper/Reducer hadoop的相關名稱

  • Job:任務名稱
  • JobTracker:項目經理(JobTracker對應於NameNode;JobTracker是一個master服務,軟件啟動之後JobTracker接收Job,負責調度Job的每一個子任務task運行於TaskTracker上,並監控它們,如果發現有失敗的task就重新運行它。)
  • TaskTracker:開發組長(TaskTracker對應於DataNode;TaskTracker是運行在多個節點上的slaver服務。TaskTracker主動與JobTracker通信,接收作業,並負責直接執行每一個任務。)
  • Child:負責開發的人員
  • Mapper/Reduce:開發人員中的兩種角色,一種是服務器開發、一種是客戶端開發

storm相關名稱

  • Topology:任務名稱
  • Nimbus:項目經理
  • Supervisor:開組長
  • Worker:開人員
  • Spout/Bolt:開人員中的兩種角色,一種是服務器開發、一種是客戶端開發

Storm應用場景

Storm用來實時計算源源不斷產生的數據,如同流水線生產,Storm能用到很多場景中,包括:實時分析、在線機器學習、連續計算等。

  • 推薦系統:實時推薦,根據下單或加入購物車推薦相關商品
  • 金融系統:實時分析股票信息數據
  • 預警系統:根據實時採集數據,判斷是否到了預警閾值。
  • 網站統計:實時銷量、流量統計,如淘寶雙11效果圖

Sotrm特點

  • 適用場景廣泛:Storm可以適用實時處理消息、更新數據庫、持續計算等場景。
  • 可伸縮性高:Storm的可伸縮性可以讓Storm每秒處理的消息量達到很高。擴展一個實時計算任務,你所需要做的就是加機器並且提高這個計算任務的並行度。Storm使用Zookeeper來協調機器內的各種配置使得Storm的集群可以很容易的擴展。
  • 保證無數據丟失:Storm保證所有的數據都被處理。
  • 異常健壯:Storm集群非常容易管理,輪流重啟節點不影響應用。
  • 容錯性好:在消息處理過程中出現異常,Storm會進行重試。

Storm編程模型

大數據實戰項目必備技能三:storm

storm01.png

元組(Tuple

元組(Tuple),是消息傳遞的基本單元,是一個命名的值列表,元組中的字段可以是任何類型的對象。Storm使用元組作為其數據模型,元組支持所有的基本類型、字符串和字節數組作為字段值,只要實現類型的序列化接口就可以使用該類型的對象。元組本來應該是一個key-value的Map,但是由於各個組件間傳遞的元組的字段名稱已經事先定義好,所以只要按序把元組填入各個value即可,所以元組是一個value的List。

流(Stream)

流是Storm的核心抽象,是一個無界的元組系列,源源不斷傳遞的元組就組成了流,在分佈式環境中並行地進行創建和處理

水龍頭(Spout)

Spout是拓撲的流的來源,是一個拓撲中產生源數據流的組件。通常情況下,Spout會從外部數據源中讀取數據,然後轉換為拓撲內部的源數據。

  • Spout可以是可靠的,也可以是不可靠的。如果Storm處理元組失敗,可靠的Spout能夠重新發射,而不可靠的Spout就儘快忘記發出的元組。
  • Spout可以發出超過一個流。
  • Spout的主要方法是nextTuple()。NextTuple()會發出一個新的Tuple到拓撲,如果沒有新的元組發出,則簡單返回。
  • Spout的其他方法是ack()和fail()。當Storm檢測到一個元組從Spout發出時,ack()和fail()會被調用,要麼成功完成通過拓撲,要麼未能完成。Ack()和fail()僅被可靠的Spout調用。IRichSpout是Spout必須實現的接口。

轉接頭(Bolt)

在拓撲中所有處理都在Bolt中完成,Bolt是流的處理節點,從一個拓撲接收數據,然後執行進行處理的組件。Bolt可以完成過濾、業務處理、連接運算、連接與訪問數據庫等任何操作。

  • Bolt是一個被動的角色,七接口中有一個execute()方法,在接收到消息後會調用此方法,用戶可以在其中執行自己希望的操作。
  • Bolt可以完成簡單的流的轉換,而完成複雜的流的轉換通常需要多個步驟,因此需要多個Bolt。
  • Bolt可以發出超過一個的流。

拓撲(Topology)

拓撲(Topology)是Storm中運行的一個實時應用程序,因為各個組件間的消息流動而形成邏輯上的拓撲結構。

把實時應用程序的運行邏輯打成jar包後提交到Storm的拓撲(Topology)。Storm的拓撲類似於MapReduce的作業(Job)。其主要的區別是,MapReduce的作業最終會完成,而一個拓撲永遠都在運行直到它被殺死。一個拓撲是一個圖的Spout和Bolt的連接流分組。

Storm核心組件

大數據實戰項目必備技能三:storm

nimbus是整個集群的控管核心,負責topology的提交、運行狀態監控、任務重新分配等工作。

zk就是一個管理者,監控者。

總體描述:nimbus下命令(分配任務),zk監督執行(心跳監控,worker、supurvisor的心跳都歸它管),supervisor領旨(下載代碼),招募人馬(創建worker和線程等),worker、executor就給我幹活!task就是具體要乾的活。

主控節點與工作節點

Storm集群中有兩類節點:主控節點(Master Node)和工作節點(Worker Node)。其中,主控節點只有一個,而工作節點可以有多個。

Nimbus進程與Supervisor進程

主控節點運行一個稱為Nimbus的守護進程類似於Hadoop的JobTracker。Nimbus負責在集群中分發代碼,對節點分配任務,並監視主機故障。

每個工作節點運行一個稱為Supervisor的守護進程。Supervisor監聽其主機上已經分配的主機的作業,啟動和停止Nimbus已經分配的工作進程。

流分組(Stream grouping)

流分組,是拓撲定義中的一部分,為每個Bolt指定應該接收哪個流作為輸入。流分組定義了流/元組如何在Bolt的任務之間進行分發。Storm內置了8種流分組方式。

工作進程(Worker)

Worker是Spout/Bolt中運行具體處理邏輯的進程。一個worker就是一個進程,進程裡面包含一個或多個線程。

執行器(Executor)

一個線程就是一個executor,一個線程會處理一個或多個任務。

任務(Task)

一個任務就是一個task。

實時計算常用架構圖

後臺系統 -->Flume集群-->Kafka集群-->Storm集群-->Redis集群

  • Flume獲取數據。
  • Kafka臨時保存數據。
  • Strom計算數據。
  • Redis是個內存數據庫,用來保存數據。

Storm的核心概念

Storm 計算結構中的幾個核心概念為 topology,stream,spout,bolt,下面我們將依次介紹。

1.Topology

Topology 是 storm 中最核心的概念,其是運行在 storm 集群上的一個實時計算應用,相當於 hadoop 中的一個 job,區別於 job 的時,job 會有明確的開始和結束,而 topology 由於實時的流式計算的特殊性,從啟動的那一刻起會永遠的運行下去,直到手動停止。

Topology 由 stream,spouts,bolts 組成,可以描述為一個有向無環圖,如下:

大數據實戰項目必備技能三:storm

圖一 topology 示例

2.Stream

Stream 是 storm 中對數據流的抽象,是由無限制的 tuple 組成的序列。Tuple 可以理解為包含一個或多個鍵值對的 hash。Tuples 在 stream 中流經 bolts,被逐步處理,最終得到預設的結果。

Stream 可比作一條源源不絕的河流,tuple 就是組成這條河流的無數水滴。每一個 stream 在 storm 中都有一個唯一標示的 id。

3.Spout

從圖一可以看出,spout 是一個 topology 的數據源,負責連接數據源,並將數據轉化為 tuple emit 到 topology中,經由 bolts 處理。

Spout 提供了一對核心方法來保障 storm 在數據沒有被正確處理的情況下,不會被丟棄,仍能被重新處理,當然這是可選的,我們也可以不關心 tuple 是否被正確的處理,只負責向topology 中 emit 數據(在某些場景下可能不需要)。具體實現原理在後文會詳細介紹。

Storm + Kakfa 是很常見的組合,storm提供了storm-kafka擴展,封裝了多個可用的 kafka spouts 供直接使用,相關文檔可以參考

這裡

4.Bolt

Bolt 是 topology 中的數據處理單元,每個 bolt 都會對 stream 中的 tuple 進行數據處理。複雜的數據處理邏輯一般拆分成多個簡單的處理邏輯交由每個 Bolt 負責。

Bolt 可以執行豐富的數據處理邏輯,如過濾,聚合,鏈接,數據庫操作等等。

Bolt 可以接受任意個數據流中的 tuples,並在對數據進行處理後選擇性的輸出到多個流中。也就是說,bolt 可以訂閱任意數量的spouts 或其他 bolts emit 的數據流,這樣最終形成了複雜的數據流處理網絡,如圖一。

書籍介紹

大數據實戰項目必備技能三:storm

內容簡介 · · · · · ·

本書由基礎知識、安裝與部署、研發與維護、進階知識、企業應用5個模塊構成,並細分為20個章節,其中“基礎知識”6章、“安裝與部署”4章、“研發與維護”4章、“進階知識”5章、“企業應用”1章,分別介紹了Storm的安裝與配置、Storm的基本原理、Topology組件、Spout組件、Bolt組件、ZooKeeper集群、實戰環節等內容,包括理論基礎、環境搭建、研發準備、應用案例等。

本書理論聯繫實際,通過大量實例分析,讓讀者在較短的時間內掌握Storm的使用,搭建並研發出自己的基於Storm的大數據處理平臺。

本書適合所有大數據處理、實時流數據處理、Storm的開發者或愛好者,也適合高等院校和培訓學校相關專業的師生參考使用

大數據實戰項目必備技能三:storm

內容簡介:

微軟搜索技術部門高級研發工程師實戰經驗分享

從源代碼的角度深入剖析Storm設計與實現

學習如何實現和高效利用“實時的Hadoop”

大數據處理是當前計算機科技的熱點,而流式實時大數據處理更是這皇冠上璀璨的明珠。實時流數據處理在搜索引擎、社交網絡、電商網站、廣告平臺等領域有著相當廣泛的應用。Storm是極其高效、靈活、高擴展的流式數據處理平臺。它被Twitter、Taobao、Yahoo、Groupon等公司採用。

本書由微軟公司互聯網工程院經驗豐富的一線程序員操刀編寫,包含很多實戰經驗和使用心得,很好地結合了代碼分析和應用實例。本書對於進行流式數據處理的研究、Storm的深入理解以及實際應用都有很好的參考價值。

大數據實戰項目必備技能三:storm

內容簡介:《Storm分佈式實時計算模式》全書分為10章:

第1章介紹使用Storm建立一個分佈式流式計算應用所涉及的核心概念,包括Storm的數據結構、開發環境的搭建,以及Storm程序的開發和調試技術等;

第2章詳細講解Storm集群環境的安裝和搭建,以及如何將topology部署到分佈式環境中;

第3章通過傳感器數據實例詳細介紹Trident topology;T

第4章講解如何使用Storm和Trident進行實時趨勢分析;

第5章介紹如何使用Storm進行圖形分析,將數據持久化存儲在圖形數據庫中,並且查詢數據來發現其中潛在的聯繫;;

第6章講解如何在Storm上使用遞歸實現一個典型的人工智能算法;

第7章演示集成Storm和非事務型系統的複雜性,通過集成Strom和開源探索性分析架構Druid,實現一個可配置的實時系統來分析金融事件。

第8章探討Lambda體系結構的實現方法,講解如何將批處理機制和實時處理引擎結合起來構建一個可糾錯的分析系統;

第9章 講解如何將Pig腳本轉化為topology並且使用Storm-YARN部署topology,將批處理系統轉化為實時系統;

第10章 介紹如何在雲服務提供商提供的主機環境下部署和運行Storm。

今天就分享到這裡,如果大家覺得這些內容有用的話,希望大家多多關注,最後,送大家一碗雞湯,我先乾為敬:

總有許多事,需要你一個人扛。別畏懼孤獨,它能幫你劃清內心的清濁,是你無法拒絕的命運歷程;

別躲避困苦,莫讓冷世的塵埃,冰封你的笑容,遲滯你的步履。走得越久,時光越老,人心越淡。

忘不掉昨天,它就是束縛你的陰影;嚮往著明天,你才能描繪它的模樣。


分享到:


相關文章: