大數(shù)據(jù)實戰(zhàn)項目必備技能三:storm

導讀:?Storm是一個分布式計算框架笨腥,主要使用Clojure與Java語言編寫,最初是由Nathan Marz帶領(lǐng)Backtype公司團隊創(chuàng)建堵未,在Backtype公司被Twitter公司收購后進行開源。最初的版本是在2011年9月17日發(fā)行,版本號0.5.0清女。

2013年9月,Apache基金會開始接管并孵化Storm項目晰筛。Apache Storm是在Eclipse Public License下進行開發(fā)的嫡丙,它提供給大多數(shù)企業(yè)使用拴袭。經(jīng)過1年多時間,2014年9月曙博,Storm項目成為Apache的頂級項目拥刻。目前,Storm的最新版本1.1.0父泳。

Storm是一個免費開源的分布式實時計算系統(tǒng)般哼。Storm能輕松可靠地處理無界的數(shù)據(jù)流,就像Hadoop對數(shù)據(jù)進行批處理惠窄;

Storm與Hadoop的區(qū)別

Storm用于實時計算蒸眠,Hadoop用于離線計算。

Storm處理的數(shù)據(jù)保存在內(nèi)存中杆融,源源不斷楞卡;Hadoop處理的數(shù)據(jù)保存在文件系統(tǒng)中,一批一批處理脾歇。

Storm的數(shù)據(jù)通過網(wǎng)絡(luò)傳輸進來蒋腮;Hadoop的數(shù)據(jù)保存在磁盤中。

Storm與Hadoop的編程模型相似

Storm hadoop 角色 Nimbus JobTracker Supervisor TaskTracker Worker Child 應(yīng)用名稱 Topology Job 編程接口 Spout/Bolt Mapper/Reducer hadoop的相關(guān)名稱

Job:任務(wù)名稱

JobTracker:項目經(jīng)理(JobTracker對應(yīng)于NameNode藕各;JobTracker是一個master服務(wù)池摧,軟件啟動之后JobTracker接收Job,負責調(diào)度Job的每一個子任務(wù)task運行于TaskTracker上激况,并監(jiān)控它們险绘,如果發(fā)現(xiàn)有失敗的task就重新運行它。)

TaskTracker:開發(fā)組長(TaskTracker對應(yīng)于DataNode誉碴;TaskTracker是運行在多個節(jié)點上的slaver服務(wù)宦棺。TaskTracker主動與JobTracker通信,接收作業(yè)黔帕,并負責直接執(zhí)行每一個任務(wù)代咸。)

Child:負責開發(fā)的人員

Mapper/Reduce:開發(fā)人員中的兩種角色,一種是服務(wù)器開發(fā)成黄、一種是客戶端開發(fā)

storm相關(guān)名稱

Topology:任務(wù)名稱

Nimbus:項目經(jīng)理

Supervisor:開組長

Worker:開人員

Spout/Bolt:開人員中的兩種角色呐芥,一種是服務(wù)器開發(fā)、一種是客戶端開發(fā)

Storm應(yīng)用場景

Storm用來實時計算源源不斷產(chǎn)生的數(shù)據(jù)奋岁,如同流水線生產(chǎn)思瘟,Storm能用到很多場景中,包括:實時分析闻伶、在線機器學習滨攻、連續(xù)計算等。

推薦系統(tǒng):實時推薦,根據(jù)下單或加入購物車推薦相關(guān)商品

金融系統(tǒng):實時分析股票信息數(shù)據(jù)

預警系統(tǒng):根據(jù)實時采集數(shù)據(jù)光绕,判斷是否到了預警閾值女嘲。

網(wǎng)站統(tǒng)計:實時銷量、流量統(tǒng)計诞帐,如淘寶雙11效果圖

Sotrm特點

適用場景廣泛:Storm可以適用實時處理消息欣尼、更新數(shù)據(jù)庫、持續(xù)計算等場景停蕉。

可伸縮性高:Storm的可伸縮性可以讓Storm每秒處理的消息量達到很高愕鼓。擴展一個實時計算任務(wù),你所需要做的就是加機器并且提高這個計算任務(wù)的并行度慧起。Storm使用Zookeeper來協(xié)調(diào)機器內(nèi)的各種配置使得Storm的集群可以很容易的擴展拒啰。

保證無數(shù)據(jù)丟失:Storm保證所有的數(shù)據(jù)都被處理。

異常健壯:Storm集群非常容易管理完慧,輪流重啟節(jié)點不影響應(yīng)用谋旦。

容錯性好:在消息處理過程中出現(xiàn)異常,Storm會進行重試屈尼。

Storm編程模型

storm01.png

元組(Tuple

元組(Tuple)册着,是消息傳遞的基本單元,是一個命名的值列表脾歧,元組中的字段可以是任何類型的對象甲捏。Storm使用元組作為其數(shù)據(jù)模型,元組支持所有的基本類型鞭执、字符串和字節(jié)數(shù)組作為字段值司顿,只要實現(xiàn)類型的序列化接口就可以使用該類型的對象。元組本來應(yīng)該是一個key-value的Map兄纺,但是由于各個組件間傳遞的元組的字段名稱已經(jīng)事先定義好大溜,所以只要按序把元組填入各個value即可,所以元組是一個value的List估脆。

流(Stream)

流是Storm的核心抽象钦奋,是一個無界的元組系列,源源不斷傳遞的元組就組成了流疙赠,在分布式環(huán)境中并行地進行創(chuàng)建和處理

水龍頭(Spout)

Spout是拓撲的流的來源付材,是一個拓撲中產(chǎn)生源數(shù)據(jù)流的組件。通常情況下圃阳,Spout會從外部數(shù)據(jù)源中讀取數(shù)據(jù)厌衔,然后轉(zhuǎn)換為拓撲內(nèi)部的源數(shù)據(jù)。

Spout可以是可靠的捍岳,也可以是不可靠的富寿。如果Storm處理元組失敗睬隶,可靠的Spout能夠重新發(fā)射,而不可靠的Spout就盡快忘記發(fā)出的元組作喘。

Spout可以發(fā)出超過一個流。

Spout的主要方法是nextTuple()晕城。NextTuple()會發(fā)出一個新的Tuple到拓撲泞坦,如果沒有新的元組發(fā)出,則簡單返回砖顷。

Spout的其他方法是ack()和fail()贰锁。當Storm檢測到一個元組從Spout發(fā)出時,ack()和fail()會被調(diào)用滤蝠,要么成功完成通過拓撲豌熄,要么未能完成。Ack()和fail()僅被可靠的Spout調(diào)用物咳。IRichSpout是Spout必須實現(xiàn)的接口锣险。

轉(zhuǎn)接頭(Bolt)

在拓撲中所有處理都在Bolt中完成,Bolt是流的處理節(jié)點览闰,從一個拓撲接收數(shù)據(jù)芯肤,然后執(zhí)行進行處理的組件。Bolt可以完成過濾压鉴、業(yè)務(wù)處理崖咨、連接運算厢岂、連接與訪問數(shù)據(jù)庫等任何操作寄锐。

Bolt是一個被動的角色,七接口中有一個execute()方法蕾久,在接收到消息后會調(diào)用此方法婉宰,用戶可以在其中執(zhí)行自己希望的操作歌豺。

Bolt可以完成簡單的流的轉(zhuǎn)換,而完成復雜的流的轉(zhuǎn)換通常需要多個步驟心包,因此需要多個Bolt世曾。

Bolt可以發(fā)出超過一個的流。

拓撲(Topology)

拓撲(Topology)是Storm中運行的一個實時應(yīng)用程序谴咸,因為各個組件間的消息流動而形成邏輯上的拓撲結(jié)構(gòu)轮听。

把實時應(yīng)用程序的運行邏輯打成jar包后提交到Storm的拓撲(Topology)。Storm的拓撲類似于MapReduce的作業(yè)(Job)岭佳。其主要的區(qū)別是血巍,MapReduce的作業(yè)最終會完成,而一個拓撲永遠都在運行直到它被殺死珊随。一個拓撲是一個圖的Spout和Bolt的連接流分組述寡。

Storm核心組件

nimbus是整個集群的控管核心柿隙,負責topology的提交、運行狀態(tài)監(jiān)控鲫凶、任務(wù)重新分配等工作禀崖。

zk就是一個管理者,監(jiān)控者螟炫。

總體描述:nimbus下命令(分配任務(wù))波附,zk監(jiān)督執(zhí)行(心跳監(jiān)控,worker昼钻、supurvisor的心跳都歸它管)掸屡,supervisor領(lǐng)旨(下載代碼),招募人馬(創(chuàng)建worker和線程等)然评,worker仅财、executor就給我干活!task就是具體要干的活碗淌。

主控節(jié)點與工作節(jié)點

Storm集群中有兩類節(jié)點:主控節(jié)點(Master Node)和工作節(jié)點(Worker Node)盏求。其中,主控節(jié)點只有一個亿眠,而工作節(jié)點可以有多個风喇。

Nimbus進程與Supervisor進程

主控節(jié)點運行一個稱為Nimbus的守護進程類似于Hadoop的JobTracker。Nimbus負責在集群中分發(fā)代碼缕探,對節(jié)點分配任務(wù)魂莫,并監(jiān)視主機故障。

每個工作節(jié)點運行一個稱為Supervisor的守護進程爹耗。Supervisor監(jiān)聽其主機上已經(jīng)分配的主機的作業(yè)耙考,啟動和停止Nimbus已經(jīng)分配的工作進程。

流分組(Stream grouping)

流分組潭兽,是拓撲定義中的一部分倦始,為每個Bolt指定應(yīng)該接收哪個流作為輸入。流分組定義了流/元組如何在Bolt的任務(wù)之間進行分發(fā)山卦。Storm內(nèi)置了8種流分組方式鞋邑。

工作進程(Worker)

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

執(zhí)行器(Executor)

一個線程就是一個executor,一個線程會處理一個或多個任務(wù)铸本。

任務(wù)(Task)

一個任務(wù)就是一個task肮雨。

實時計算常用架構(gòu)圖

后臺系統(tǒng) -->Flume集群-->Kafka集群-->Storm集群-->Redis集群

Flume獲取數(shù)據(jù)。

Kafka臨時保存數(shù)據(jù)箱玷。

Strom計算數(shù)據(jù)怨规。

Redis是個內(nèi)存數(shù)據(jù)庫陌宿,用來保存數(shù)據(jù)。

Storm的核心概念

Storm 計算結(jié)構(gòu)中的幾個核心概念為?topology波丰,stream壳坪,spout,bolt掰烟,下面我們將依次介紹爽蝴。

1.Topology

Topology 是 storm 中最核心的概念,其是運行在 storm 集群上的一個實時計算應(yīng)用媚赖,相當于 hadoop 中的一個 job霜瘪,區(qū)別于 job 的時珠插,job 會有明確的開始和結(jié)束惧磺,而 topology 由于實時的流式計算的特殊性,從啟動的那一刻起會永遠的運行下去捻撑,直到手動停止磨隘。

Topology 由 stream,spouts顾患,bolts 組成番捂,可以描述為一個有向無環(huán)圖,如下:

圖一 topology 示例

2.Stream

Stream 是 storm 中對數(shù)據(jù)流的抽象江解,是由無限制的 tuple 組成的序列设预。Tuple 可以理解為包含一個或多個鍵值對的 hash。Tuples 在 stream 中流經(jīng) bolts犁河,被逐步處理鳖枕,最終得到預設(shè)的結(jié)果。

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

3.Spout

從圖一可以看出灭翔,spout 是一個 topology 的數(shù)據(jù)源魏烫,負責連接數(shù)據(jù)源,并將數(shù)據(jù)轉(zhuǎn)化為 tuple emit 到 topology中肝箱,經(jīng)由 bolts 處理哄褒。

Spout 提供了一對核心方法來保障 storm 在數(shù)據(jù)沒有被正確處理的情況下,不會被丟棄煌张,仍能被重新處理读处,當然這是可選的,我們也可以不關(guān)心 tuple 是否被正確的處理唱矛,只負責向topology 中 emit 數(shù)據(jù)(在某些場景下可能不需要)罚舱。具體實現(xiàn)原理在后文會詳細介紹井辜。

Storm + Kakfa 是很常見的組合,storm提供了storm-kafka擴展管闷,封裝了多個可用的 kafka spouts 供直接使用粥脚,相關(guān)文檔可以參考這里

4.Bolt

Bolt 是 topology 中的數(shù)據(jù)處理單元包个,每個 bolt 都會對 stream 中的 tuple 進行數(shù)據(jù)處理刷允。復雜的數(shù)據(jù)處理邏輯一般拆分成多個簡單的處理邏輯交由每個 Bolt 負責。

Bolt 可以執(zhí)行豐富的數(shù)據(jù)處理邏輯碧囊,如過濾树灶,聚合,鏈接糯而,數(shù)據(jù)庫操作等等天通。

Bolt 可以接受任意個數(shù)據(jù)流中的 tuples,并在對數(shù)據(jù)進行處理后選擇性的輸出到多個流中熄驼。也就是說像寒,bolt 可以訂閱任意數(shù)量的spouts 或其他 bolts emit 的數(shù)據(jù)流,這樣最終形成了復雜的數(shù)據(jù)流處理網(wǎng)絡(luò)瓜贾,如圖一诺祸。

書籍介紹

內(nèi)容簡介 · · · · · ·

本書由基礎(chǔ)知識、安裝與部署祭芦、研發(fā)與維護筷笨、進階知識、企業(yè)應(yīng)用5個模塊構(gòu)成龟劲,并細分為20個章節(jié)胃夏,其中“基礎(chǔ)知識”6章、“安裝與部署”4章咸灿、“研發(fā)與維護”4章构订、“進階知識”5章、“企業(yè)應(yīng)用”1章避矢,分別介紹了Storm的安裝與配置悼瘾、Storm的基本原理、Topology組件审胸、Spout組件亥宿、Bolt組件、ZooKeeper集群砂沛、實戰(zhàn)環(huán)節(jié)等內(nèi)容烫扼,包括理論基礎(chǔ)、環(huán)境搭建碍庵、研發(fā)準備映企、應(yīng)用案例等悟狱。

本書理論聯(lián)系實際,通過大量實例分析堰氓,讓讀者在較短的時間內(nèi)掌握Storm的使用挤渐,搭建并研發(fā)出自己的基于Storm的大數(shù)據(jù)處理平臺。

本書適合所有大數(shù)據(jù)處理双絮、實時流數(shù)據(jù)處理浴麻、Storm的開發(fā)者或愛好者,也適合高等院校和培訓學校相關(guān)專業(yè)的師生參考使用

內(nèi)容簡介:

微軟搜索技術(shù)部門高級研發(fā)工程師實戰(zhàn)經(jīng)驗分享

從源代碼的角度深入剖析Storm設(shè)計與實現(xiàn)

學習如何實現(xiàn)和高效利用“實時的Hadoop”

大數(shù)據(jù)處理是當前計算機科技的熱點囤攀,而流式實時大數(shù)據(jù)處理更是這皇冠上璀璨的明珠软免。實時流數(shù)據(jù)處理在搜索引擎、社交網(wǎng)絡(luò)焚挠、電商網(wǎng)站膏萧、廣告平臺等領(lǐng)域有著相當廣泛的應(yīng)用。Storm是極其高效宣蔚、靈活向抢、高擴展的流式數(shù)據(jù)處理平臺认境。它被Twitter胚委、Taobao、Yahoo叉信、Groupon等公司采用亩冬。

本書由微軟公司互聯(lián)網(wǎng)工程院經(jīng)驗豐富的一線程序員操刀編寫,包含很多實戰(zhàn)經(jīng)驗和使用心得硼身,很好地結(jié)合了代碼分析和應(yīng)用實例硅急。本書對于進行流式數(shù)據(jù)處理的研究、Storm的深入理解以及實際應(yīng)用都有很好的參考價值佳遂。

內(nèi)容簡介:《Storm分布式實時計算模式》全書分為10章:

第1章介紹使用Storm建立一個分布式流式計算應(yīng)用所涉及的核心概念营袜,包括Storm的數(shù)據(jù)結(jié)構(gòu)、開發(fā)環(huán)境的搭建丑罪,以及Storm程序的開發(fā)和調(diào)試技術(shù)等荚板;

第2章詳細講解Storm集群環(huán)境的安裝和搭建,以及如何將topology部署到分布式環(huán)境中吩屹;

第3章通過傳感器數(shù)據(jù)實例詳細介紹Trident topology跪另;T

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

第5章介紹如何使用Storm進行圖形分析煤搜,將數(shù)據(jù)持久化存儲在圖形數(shù)據(jù)庫中免绿,并且查詢數(shù)據(jù)來發(fā)現(xiàn)其中潛在的聯(lián)系;擦盾;

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

第7章演示集成Storm和非事務(wù)型系統(tǒng)的復雜性淌哟,通過集成Strom和開源探索性分析架構(gòu)Druid,實現(xiàn)一個可配置的實時系統(tǒng)來分析金融事件辽故。

第8章探討Lambda體系結(jié)構(gòu)的實現(xiàn)方法绞绒,講解如何將批處理機制和實時處理引擎結(jié)合起來構(gòu)建一個可糾錯的分析系統(tǒng);

第9章 講解如何將Pig腳本轉(zhuǎn)化為topology并且使用Storm-YARN部署topology榕暇,將批處理系統(tǒng)轉(zhuǎn)化為實時系統(tǒng)蓬衡;

第10章 介紹如何在云服務(wù)提供商提供的主機環(huán)境下部署和運行Storm。

今天就分享到這里彤枢,如果大家覺得這些內(nèi)容有用的話狰晚,希望大家多多關(guān)注,最后缴啡,送大家一碗雞湯壁晒,我先干為敬:

總有許多事,需要你一個人扛业栅。別畏懼孤獨秒咐,它能幫你劃清內(nèi)心的清濁,是你無法拒絕的命運歷程碘裕;

別躲避困苦携取,莫讓冷世的塵埃,冰封你的笑容帮孔,遲滯你的步履雷滋。走得越久,時光越老文兢,人心越淡晤斩。

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

對大數(shù)據(jù)感興趣的朋友可以加我的群? 615997810? 一起交流學習兼呵,還有免費資料可以領(lǐng)取?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兔辅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子萍程,更是在濱河造成了極大的恐慌幢妄,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茫负,死亡現(xiàn)場離奇詭異蕉鸳,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門潮尝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榕吼,“玉大人,你說我怎么就攤上這事勉失「迹” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵乱凿,是天一觀的道長顽素。 經(jīng)常有香客問我,道長徒蟆,這世上最難降的妖魔是什么胁出? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮段审,結(jié)果婚禮上全蝶,老公的妹妹穿的比我還像新娘。我一直安慰自己寺枉,他們只是感情好抑淫,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姥闪,像睡著了一般始苇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甘畅,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天埂蕊,我揣著相機與錄音往弓,去河邊找鬼疏唾。 笑死,一個胖子當著我的面吹牛函似,可吹牛的內(nèi)容都是我干的槐脏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼撇寞,長吁一口氣:“原來是場噩夢啊……” “哼顿天!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蔑担,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤牌废,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后啤握,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸟缕,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了懂从。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片授段。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖番甩,靈堂內(nèi)的尸體忽然破棺而出侵贵,到底是詐尸還是另有隱情,我是刑警寧澤缘薛,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布窍育,位于F島的核電站,受9級特大地震影響宴胧,放射性物質(zhì)發(fā)生泄漏蔫骂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一牺汤、第九天 我趴在偏房一處隱蔽的房頂上張望辽旋。 院中可真熱鬧,春花似錦檐迟、人聲如沸补胚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溶其。三九已至,卻和暖如春敦间,著一層夾襖步出監(jiān)牢的瞬間瓶逃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工廓块, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厢绝,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓带猴,卻偏偏與公主長得像昔汉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拴清,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容