自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Storm分布式實(shí)時(shí)大數(shù)據(jù)處理框架

大數(shù)據(jù)
按照storm作者的說(shuō)法,Storm對(duì)于實(shí)時(shí)計(jì)算的意義類似于Hadoop對(duì)于批處理的意義。Hadoop提供了map、reduce原語(yǔ),使我們的批處理程序變得簡(jiǎn)單和高效。

1.什么是Storm

Storm是Twitter開源的分布式實(shí)時(shí)大數(shù)據(jù)處理框架,被業(yè)界稱為實(shí)時(shí)版Hadoop。隨著越來(lái)越多的場(chǎng)景對(duì)Hadoop的MapReduce高延遲無(wú)法容忍,比如網(wǎng)站統(tǒng)計(jì)、推薦系統(tǒng)、預(yù)警系統(tǒng)、金融系統(tǒng)(高頻交易、股票)等等,大數(shù)據(jù)實(shí)時(shí)處理解決方案(流計(jì)算)的應(yīng)用日趨廣泛,目前已是分布式技術(shù)領(lǐng)域最新爆發(fā)點(diǎn),而Storm更是流計(jì)算技術(shù)中的佼佼者和主流。

按照storm作者的說(shuō)法,Storm對(duì)于實(shí)時(shí)計(jì)算的意義類似于Hadoop對(duì)于批處理的意義。Hadoop提供了map、reduce原語(yǔ),使我們的批處理程序變得簡(jiǎn)單和高效。同樣,Storm也為實(shí)時(shí)計(jì)算提供了一些簡(jiǎn)單高效的原語(yǔ),而且Storm的Trident是基于Storm原語(yǔ)更高級(jí)的抽象框架,類似于基于Hadoop的Pig框架,讓開發(fā)更加便利和高效。

2.Storm應(yīng)用場(chǎng)景

推薦系統(tǒng)(實(shí)時(shí)推薦,根據(jù)下單或加入購(gòu)物車推薦相關(guān)商品)、金融系統(tǒng)、預(yù)警系統(tǒng)、網(wǎng)站統(tǒng)計(jì)(實(shí)時(shí)銷量、流量統(tǒng)計(jì),如淘寶雙11效果圖)、交通路況實(shí)時(shí)系統(tǒng)等等。

3.Storm的一些特性

1.適用場(chǎng)景廣泛: storm可以實(shí)時(shí)處理消息和更新DB,對(duì)一個(gè)數(shù)據(jù)量進(jìn)行持續(xù)的查詢并返回客戶端(持續(xù)計(jì)算),對(duì)一個(gè)耗資源的查詢作實(shí)時(shí)并行化的處理(分布式方法調(diào)用,即DRPC),storm的這些基礎(chǔ)API可以滿足大量的場(chǎng)景。

2. 可伸縮性高: Storm的可伸縮性可以讓storm每秒可以處理的消息量達(dá)到很高。擴(kuò)展一個(gè)實(shí)時(shí)計(jì)算任務(wù),你所需要做的就是加機(jī)器并且提高這個(gè)計(jì)算任務(wù)的并行度 。Storm使用ZooKeeper來(lái)協(xié)調(diào)集群內(nèi)的各種配置使得Storm的集群可以很容易的擴(kuò)展。

3. 保證無(wú)數(shù)據(jù)丟失: 實(shí)時(shí)系統(tǒng)必須保證所有的數(shù)據(jù)被成功的處理。 那些會(huì)丟失數(shù)據(jù)的系統(tǒng)的適用場(chǎng)景非常窄, 而storm保證每一條消息都會(huì)被處理, 這一點(diǎn)和S4相比有巨大的反差。

4. 異常健壯: storm集群非常容易管理,輪流重啟節(jié)點(diǎn)不影響應(yīng)用。

5. 容錯(cuò)性好:在消息處理過(guò)程中出現(xiàn)異常, storm會(huì)進(jìn)行重試

6. 語(yǔ)言無(wú)關(guān)性: Storm的topology和消息處理組件(Bolt)可以用任何語(yǔ)言來(lái)定義, 這一點(diǎn)使得任何人都可以使用storm.

4.storm集群結(jié)構(gòu)

Nimbus 和Supervisors 之間所有的協(xié)調(diào)工作是通過(guò) 一個(gè)Zookeeper 集群。

Nimbus進(jìn)程和 Supervisors 進(jìn)程是無(wú)法直接連接,并且是無(wú)狀態(tài)的; 所有的狀態(tài)維持在Zookeeper中或保存在本地磁盤上。

意味著你可以 kill -9 Nimbus 或Supervisors 進(jìn)程,而不需要做備份。

這種設(shè)計(jì)導(dǎo)致storm集群具有令人難以置信的穩(wěn)定性,并且無(wú)耦合。

5.storm工作原理

Nimbus 負(fù)責(zé)在集群分發(fā)的代碼,topo只能在nimbus機(jī)器上提交,將任務(wù)分配給其他機(jī)器,和故障監(jiān)測(cè)。

Supervisor,監(jiān)聽分配給它的節(jié)點(diǎn),根據(jù)Nimbus 的委派在必要時(shí)啟動(dòng)和關(guān)閉工作進(jìn)程。 每個(gè)工作進(jìn)程執(zhí)行topology 的一個(gè)子集。一個(gè)運(yùn)行中的topology 由很多運(yùn)行在很多機(jī)器上的工作進(jìn)程組成。

在Storm中有對(duì)于流stream的抽象,流是一個(gè)不間斷的無(wú)界的連續(xù)tuple,注意Storm在建模事件流時(shí),把流中的事件抽象為tuple即元組

Storm認(rèn)為每個(gè)stream都有一個(gè)源,也就是原始元組的源頭,叫做Spout(管口)

處理stream內(nèi)的tuple,抽象為Bolt,bolt可以消費(fèi)任意數(shù)量的輸入流,只要將流方向?qū)蛟揵olt,同時(shí)它也可以發(fā)送新的流給其他bolt使用,這樣一來(lái),只要打開特定的spout再將spout中流出的tuple導(dǎo)向特定的bolt,bolt又對(duì)導(dǎo)入的流做處理后再導(dǎo)向其他bolt或者目的地。

可以認(rèn)為spout就是水龍頭,并且每個(gè)水龍頭里流出的水是不同的,我們想拿到哪種水就擰開哪個(gè)水龍頭,然后使用管道將水龍頭的水導(dǎo)向到一個(gè)水處理器(bolt),水處理器處理后再使用管道導(dǎo)向另一個(gè)處理器或者存入容器中。

為了增大水處理效率,我們很自然就想到在同個(gè)水源處接上多個(gè)水龍頭并使用多個(gè)水處理器,這樣就可以提高效率。

這是一張有向無(wú)環(huán)圖,Storm將這個(gè)圖抽象為Topology(拓?fù)?,Topo就是storm的Job抽象概念,一個(gè)拓?fù)渚褪且粋€(gè)流轉(zhuǎn)換圖

圖中每個(gè)節(jié)點(diǎn)是一個(gè)spout或者bolt,每個(gè)spout或者bolt發(fā)送元組到下一級(jí)組件。

而Spout到單個(gè)Bolt有6種流分組策略。

6.Topology

Storm將流中元素抽象為tuple,一個(gè)tuple就是一個(gè)值列表value list,list中的每個(gè)value可以是任意可序列化的類型。拓?fù)涞拿總€(gè)節(jié)點(diǎn)都要說(shuō)明它所發(fā)射出的元組的字段的name,其他節(jié)點(diǎn)只需要訂閱該name就可以接收處理。

7.storm相關(guān)概念

Streams:消息流

消息流是一個(gè)沒有邊界的tuple序列,而這些tuples會(huì)被以一種分布式的方式并行創(chuàng)建和處理。 每個(gè)tuple可以包含多列,字段類型可以是: integer, long, short, byte, string, double, float, boolean和byte array。 你還可以自定義類型 — 只要你實(shí)現(xiàn)對(duì)應(yīng)的序列化器。

Spouts:消息源

Spouts是topology消息生產(chǎn)者。Spout從一個(gè)外部源(消息隊(duì)列)讀取數(shù)據(jù)向topology發(fā)出tuple。 消息源Spouts可以是可靠的也可以是不可靠的。一個(gè)可靠的消息源可以重新發(fā)射一個(gè)處理失敗的tuple, 一個(gè)不可靠的消息源Spouts不會(huì)。

Spout類的方法nextTuple不斷發(fā)射tuple到topology,storm在檢測(cè)到一個(gè)tuple被整個(gè)topology成功處理的時(shí)候調(diào)用ack, 否則調(diào)用fail。

storm只對(duì)可靠的spout調(diào)用ack和fail。

Bolts:消息處理者

消息處理邏輯被封裝在bolts里面,Bolts可以做很多事情: 過(guò)濾, 聚合, 查詢數(shù)據(jù)庫(kù)等。

Bolts可以簡(jiǎn)單的做消息流的傳遞。復(fù)雜的消息流處理往往需要很多步驟, 從而也就需要經(jīng)過(guò)很多Bolts。第一級(jí)Bolt的輸出可以作為下一級(jí)Bolt的輸入。而Spout不能有一級(jí)。

Bolts的主要方法是execute(死循環(huán))連續(xù)處理傳入的tuple,成功處理完每一個(gè)tuple調(diào)用OutputCollector的ack方法,以通知storm這個(gè)tuple被處理完成了。當(dāng)處理失敗時(shí),可以調(diào)fail方法通知Spout端可以重新發(fā)送該tuple。

流程是: Bolts處理一個(gè)輸入tuple, 然后調(diào)用ack通知storm自己已經(jīng)處理過(guò)這個(gè)tuple了。storm提供了一個(gè)IBasicBolt會(huì)自動(dòng)調(diào)用ack。

Bolts使用OutputCollector來(lái)發(fā)射tuple到下一級(jí)Blot。

責(zé)任編輯:未麗燕 來(lái)源: 今日頭條
相關(guān)推薦

2017-11-03 15:05:56

Storm數(shù)據(jù)處理服務(wù)器

2018-08-24 10:28:41

大數(shù)據(jù)數(shù)據(jù)分析工具

2016-11-08 12:49:27

大數(shù)據(jù)分布式系統(tǒng)Druid-IO

2023-12-18 11:21:40

MongoDB數(shù)據(jù)庫(kù)

2012-12-06 10:59:51

大數(shù)據(jù)

2019-06-27 09:12:43

FlinkStorm框架

2015-03-16 14:54:06

大數(shù)據(jù)流式大數(shù)據(jù)大數(shù)據(jù)處理

2011-12-22 09:21:04

云計(jì)算Hadoop大數(shù)據(jù)

2015-11-09 09:58:31

大數(shù)據(jù)Lambda架構(gòu)

2023-12-19 08:03:25

存儲(chǔ)大數(shù)據(jù)節(jié)點(diǎn)

2015-10-15 14:05:51

StormSparkMapReduce

2018-05-24 13:51:04

華為云

2013-10-16 11:36:08

分布式大數(shù)據(jù)

2015-03-18 09:33:41

大數(shù)據(jù)分布式系統(tǒng)事務(wù)處理

2017-08-22 11:10:44

大數(shù)據(jù)分布式調(diào)度

2017-02-15 14:36:12

開源大數(shù)據(jù)TensorFlowO

2012-05-18 10:49:36

SAP大數(shù)據(jù)HANA

2013-09-23 09:24:33

2018-04-03 10:33:15

大數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)