Storm知識(shí)點(diǎn)

1.1 簡(jiǎn)單介紹

實(shí)時(shí)處理Stream流的能力,有容錯(cuò)性,保證性處理機(jī)制镀岛。對(duì)于輸入數(shù)據(jù),支持消息隊(duì)列友驮,像RabbitMQ, JMS, Kafka等或者傳統(tǒng)的數(shù)據(jù)庫(kù)和Hbase漂羊。

1.2 基本概念

  1. Stream
    Stream 是最基礎(chǔ)的抽象和核心概念,一個(gè)沒(méi)有開(kāi)始和結(jié)束的一連串?dāng)?shù)據(jù)喊儡,可以并行創(chuàng)建拨与,被分布式組件并行消費(fèi)。
  2. Tuple
    在Storm上下文中艾猜,stream是一連串沒(méi)有結(jié)束tuple(元組)买喧;

A tuple is a named list of values, where each value can be any type

tuple就是一個(gè)值(有名稱(chēng))列表,tuple中的值可以是任何類(lèi)型的匆赃,Storm需要知道怎么序列化Tuple的類(lèi)型淤毛,storm中的tuple支持私有類(lèi)型、字符串算柳、字節(jié)數(shù)組等作為它的字段值低淡,如果使用其他類(lèi)型,就需要序列化該類(lèi)型瞬项。

@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
       //定義輸出字段描述
       declarer.declareStream("source", new Fields("sentence", "sentence.length"));
}

@Override
public void nextTuple() {
    if(index >= sentences.length){
        return; 
        }
    //發(fā)送字符串
    this.collector.emit("source", new Values(sentences[index], sentences[index].length()), "messageID_"+index);
    index++;
    Utils.sleep(100);
}

1.3 其它簡(jiǎn)單概念

  1. 拓?fù)?Topology):打包好的實(shí)時(shí)應(yīng)用計(jì)算任務(wù)蔗蹋,同Hadoop的MapReduce任務(wù)相似。
  2. 元組(Tuple):是Storm提供的一個(gè)輕量級(jí)的數(shù)據(jù)格式囱淋,可以用來(lái)包裝你需要實(shí)際處理的數(shù)據(jù)猪杭。
  3. 流(Streams):數(shù)據(jù)流(Stream)是Storm中對(duì)數(shù)據(jù)進(jìn)行的抽象,它是時(shí)間上無(wú)界的tuple元組序列(無(wú)限的元組序列)?
  4. Spout(噴嘴):Storm中流的來(lái)源妥衣。Spout從外部數(shù)據(jù)源皂吮,如消息隊(duì)列中讀取元組數(shù)據(jù)并吐到拓?fù)淅铩?/li>
  5. Bolts:在拓?fù)渲兴械挠?jì)算邏輯都是在Bolt中實(shí)現(xiàn)的。
  6. 任務(wù)(Tasks):每個(gè)Spout和Bolt會(huì)以多個(gè)任務(wù)(Task)的形式在集群上運(yùn)行税手。
  7. 組件(Component):是對(duì)Bolt和Spout的統(tǒng)稱(chēng)蜂筹。

1.4 Storm集群架構(gòu)

Storm集群采用主從架構(gòu)方式,主節(jié)點(diǎn)是Nimbus芦倒,從節(jié)點(diǎn)是Supervisor艺挪,有關(guān)調(diào)度相關(guān)的信息存儲(chǔ)到ZooKeeper集群中。


集群架構(gòu)
  1. Nimbus
    Storm集群的Master節(jié)點(diǎn)兵扬,負(fù)責(zé)分發(fā)用戶(hù)代碼麻裳,指派給具體的Supervisor節(jié)點(diǎn)上的Worker節(jié)點(diǎn),去運(yùn)行Topology對(duì)應(yīng)的組件(Spout/Bolt)的Task周霉。
  2. Supervisor
    Storm集群的從節(jié)點(diǎn)掂器,負(fù)責(zé)管理運(yùn)行在Supervisor節(jié)點(diǎn)上的每一個(gè)Worker進(jìn)程的啟動(dòng)和終止。通過(guò)Storm的配置文件中的supervisor.slots.ports配置項(xiàng)俱箱,可以指定在一個(gè)Supervisor上最大允許多少個(gè)Slot国瓮,每個(gè)Slot通過(guò)端口號(hào)來(lái)唯一標(biāo)識(shí),一個(gè)端口號(hào)對(duì)應(yīng)一個(gè)Worker進(jìn)程(如果該Worker進(jìn)程被啟動(dòng))狞谱。
  3. Worker
    運(yùn)行具體處理組件邏輯的進(jìn)程乃摹。Worker運(yùn)行的任務(wù)類(lèi)型只有兩種,一種是Spout任務(wù)跟衅,一種是Bolt任務(wù)孵睬。
  4. Task
    worker中每一個(gè)spout/bolt的線程稱(chēng)為一個(gè)task. 在storm0.8之后,task不再與物理線程對(duì)應(yīng)伶跷,不同spout/bolt的task可能會(huì)共享一個(gè)物理線程掰读,該線程稱(chēng)為executor秘狞。
  5. ZooKeeper
    用來(lái)協(xié)調(diào)Nimbus和Supervisor,如果Supervisor因故障出現(xiàn)問(wèn)題而無(wú)法運(yùn)行Topology蹈集,Nimbus會(huì)第一時(shí)間感知到烁试,并重新分配Topology到其它可用的Supervisor上運(yùn)行

1.5 Topology運(yùn)行

在Storm中,一個(gè)實(shí)時(shí)應(yīng)用的計(jì)算任務(wù)被打包作為T(mén)opology發(fā)布,這同Hadoop的MapReduce任務(wù)相似拢肆。但是有一點(diǎn)不同的是:在Hadoop中减响,MapReduce任務(wù)最終會(huì)執(zhí)行完成后結(jié)束;而在Storm中郭怪,Topology任務(wù)一旦提交后永遠(yuǎn)不會(huì)結(jié)束支示,除非你顯示去停止任務(wù)。計(jì)算任務(wù)Topology是由不同的Spouts和Bolts鄙才,通過(guò)數(shù)據(jù)流(Stream)連接起來(lái)的圖?一個(gè)Storm在集群上運(yùn)行一個(gè)Topology時(shí)颂鸿,主要通過(guò)以下3個(gè)實(shí)體來(lái)完成Topology的執(zhí)行工作:
(1). Worker(進(jìn)程)
(2). Executor(線程)
(3). Task


3者之間的關(guān)系

worker進(jìn)程(不同的jvm)執(zhí)行的是1個(gè)topology的子集。1個(gè)worker進(jìn)程會(huì)啟動(dòng)1個(gè)或多個(gè)executor線程來(lái)執(zhí)行topology的component(spout或bolt)咒循。因此据途,1個(gè)運(yùn)行中的topology就是由集群中多臺(tái)物理機(jī)上的多個(gè)worker進(jìn)程組成的。

executor是1個(gè)被worker進(jìn)程啟動(dòng)的單獨(dú)線程叙甸。每個(gè)executor只會(huì)運(yùn)行topology的1個(gè)component(spout或bolt)的task(注:task可以是1個(gè)或多個(gè)颖医,storm默認(rèn)是1個(gè)component只生成1個(gè)task,executor線程里會(huì)在每次循環(huán)里順序調(diào)用所有task實(shí)例)裆蒸。

task是最終運(yùn)行spout或bolt中代碼的單元(注:1個(gè)task即為spout或bolt的1個(gè)實(shí)例熔萧,executor線程在執(zhí)行期間會(huì)調(diào)用該task的nextTuple或execute方法)。topology啟動(dòng)后僚祷,1個(gè)component(spout或bolt)的task數(shù)目是固定不變的佛致,但該component使用的executor線程數(shù)可以動(dòng)態(tài)調(diào)整(例如:1個(gè)executor線程可以執(zhí)行該component的1個(gè)或多個(gè)task實(shí)例)。默認(rèn)情況下task的數(shù)目等于executor線程數(shù)目辙谜,即1個(gè)executor線程只運(yùn)行1個(gè)task俺榆。


Topology處理流程圖

1.6 Storm Streaming Grouping

在Storm中, 開(kāi)發(fā)者可以為上游spout/bolt發(fā)射出的tuples指定下游bolt的哪個(gè)/哪些task(s)來(lái)處理該tuples装哆。這種指定在storm中叫做對(duì)stream的分組罐脊,即stream grouping

  1. Shuffle Grouping :隨機(jī)分組,上游spout/bolt發(fā)射的tuples被隨機(jī)地在下游bolt的tasks中選擇一個(gè)來(lái)處理蜕琴。bolt的tasks之間的負(fù)載比較均衡萍桌。
  2. Fields Grouping :根據(jù)指定的字段的值進(jìn)行分組,舉個(gè)栗子凌简,流按照“user-id”進(jìn)行分組上炎,那么具有相同的“user-id”的tuple會(huì)發(fā)到同一個(gè)task,而具有不同“user-id”值的tuple可能會(huì)發(fā)到不同的task上雏搂。這種情況常常用在單詞計(jì)數(shù)藕施,而實(shí)際情況是很少用到寇损,因?yàn)槿绻硞€(gè)字段的某個(gè)值太多,就會(huì)導(dǎo)致task不均衡的問(wèn)題。task不共享同一個(gè)對(duì)象,不是單實(shí)例的塑径。
  3. All grouping :廣播分組:將所有的tuple都復(fù)制之后再分發(fā)給Bolt所有的task纽窟,每一個(gè)訂閱數(shù)據(jù)流的task都會(huì)接收到一份相同的完全的tuple的拷貝。
  4. Global grouping :全局分組憨愉,這種分組會(huì)將所有的tuple都發(fā)到一個(gè)taskid最小的task上烦绳。由于所有的tuple都發(fā)到唯一一個(gè)task上,勢(shì)必在數(shù)據(jù)量大的時(shí)候會(huì)造成資源不夠用的情況配紫。所有上游消息全部匯總径密,便于合并、統(tǒng)計(jì)等躺孝。
  5. None grouping :不分組 目前等同于shuffle grouping享扔。
  6. LocalOrShuffle Grouping : 如果下游bolt的某些task與上游spout/bolt的某些task運(yùn)行在同一個(gè)worker進(jìn)程中,那么上游spout/bolt的這些task所發(fā)射的所有tuples均由下游bolt的同進(jìn)程的tasks來(lái)處理植袍;否則惧眠,這種分組方式等同于shuffle grouping。因優(yōu)先選擇同進(jìn)程task間傳輸而降低tuple網(wǎng)絡(luò)傳輸代價(jià)于个,但因?qū)ふ彝M(jìn)程的task而消耗CPU和內(nèi)存資源
  7. Direct grouping :直接分組氛魁,允許上游spout/bolt決定其發(fā)射出的任一tuple由下游bolt的哪個(gè)task接收并處理
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市厅篓,隨后出現(xiàn)的幾起案子秀存,更是在濱河造成了極大的恐慌,老刑警劉巖羽氮,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件或链,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡档押,警方通過(guò)查閱死者的電腦和手機(jī)澳盐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)汇荐,“玉大人洞就,你說(shuō)我怎么就攤上這事∠铺裕” “怎么了旬蟋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)革娄。 經(jīng)常有香客問(wèn)我倾贰,道長(zhǎng)冕碟,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任匆浙,我火速辦了婚禮安寺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘首尼。我一直安慰自己挑庶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布软能。 她就那樣靜靜地躺著迎捺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪查排。 梳的紋絲不亂的頭發(fā)上凳枝,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音跋核,去河邊找鬼岖瑰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛砂代,可吹牛的內(nèi)容都是我干的蹋订。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼泊藕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辅辩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起娃圆,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤玫锋,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后讼呢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體撩鹿,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年悦屏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了节沦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡础爬,死狀恐怖甫贯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情看蚜,我是刑警寧澤叫搁,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響渴逻,放射性物質(zhì)發(fā)生泄漏疾党。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一惨奕、第九天 我趴在偏房一處隱蔽的房頂上張望雪位。 院中可真熱鬧,春花似錦梨撞、人聲如沸雹洗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)队伟。三九已至,卻和暖如春幽勒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背港令。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工啥容, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人顷霹。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓咪惠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親淋淀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遥昧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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

  • 一、Storm簡(jiǎn)介 Storm是一個(gè)免費(fèi)并開(kāi)源的分布式實(shí)時(shí)計(jì)算系統(tǒng)朵纷。利用Storm可以很容易做到可靠地處理無(wú)限的數(shù)...
    達(dá)微閱讀 909評(píng)論 0 3
  • 本文借鑒官文袍辞,添加了一些解釋和看法鞋仍,其中有些理解,寫(xiě)的比較粗糙搅吁,有問(wèn)題的地方希望大家指出威创。寫(xiě)這篇文章,是想把一些官...
    達(dá)微閱讀 964評(píng)論 0 0
  • Storm是一個(gè)免費(fèi)并開(kāi)源的分布式實(shí)時(shí)計(jì)算系統(tǒng)谎懦。利用Storm可以很容易做到可靠地處理無(wú)限的數(shù)據(jù)流肚豺,像Hadoop...
    timothyue1閱讀 589評(píng)論 0 0
  • 1 Storm概述 Storm 是一個(gè)實(shí)時(shí)的、分布式的界拦、可靠的流式數(shù)據(jù)處理系統(tǒng)吸申。它的工作就是委派各種組件分別 獨(dú)立...
    lgh1008閱讀 1,593評(píng)論 0 0
  • Storm入門(mén)系列之一:storm核心概念及特性 本文的將介紹一些 storm 入門(mén)的基礎(chǔ)知識(shí),包括 storm ...
    zhaif閱讀 3,113評(píng)論 0 17