導讀:?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)取?