溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

storm的基本概念安裝測試

發(fā)布時(shí)間:2020-07-19 16:51:40 來源:網(wǎng)絡(luò) 閱讀:526 作者:馬吉輝 欄目:大數(shù)據(jù)

strom簡介
官方網(wǎng)址:http://storm.apache.org/
是一個(gè)免費(fèi),開源的分布式實(shí)時(shí)計(jì)算系統(tǒng),使用它可以輕松實(shí)現(xiàn)數(shù)據(jù)流的實(shí)時(shí)處理,Strom很簡單,可以用任何編程語言

storm用例:實(shí)時(shí)在線分析 機(jī)器學(xué)習(xí),連續(xù)計(jì)算,分布式RPC,ETL等。
Strom的特點(diǎn):快速:基準(zhǔn)時(shí)鐘在超過一百萬元組(可以理解為數(shù)據(jù)包)每秒處理的每個(gè)節(jié)點(diǎn)
簡單的設(shè)置:有可擴(kuò)展性,容錯(cuò)性,保證了數(shù)據(jù)的處理能力,并且易于設(shè)置和操作

storm實(shí)時(shí)流式計(jì)算系統(tǒng)

storm集群與hadoop集群(MapReduce)對比
MapReduce是批處理流程 //hadoop處理海量歷史任務(wù),不能做到實(shí)時(shí)
storm沒有緩沖區(qū)原數(shù)據(jù)源源不斷的進(jìn)入處理系統(tǒng),這是流處理 //實(shí)時(shí)流計(jì)算,一直運(yùn)行直到停止。

Topology(拓?fù)洌┡c Mapreduce
一個(gè)關(guān)鍵的區(qū)別是: 一個(gè)MapReduce job 最終會(huì)結(jié)束, 而一個(gè)topology 永遠(yuǎn)會(huì)運(yùn)行(除非你手動(dòng)kill 掉)

Nimbus(作業(yè)控制和資源管理 master進(jìn)程) 與ResourManager
在Storm 的集群里面有兩種節(jié)點(diǎn): 控制節(jié)點(diǎn)(master node)和工作節(jié)點(diǎn)(worker node)??刂乒?jié)點(diǎn)上面運(yùn)行一個(gè)叫Nimbus 后臺(tái)程序,它的作用類似Hadoop 里面的JobTracker //JobTracker是整個(gè)集群中唯一的全局管理者,涉及的功能包括作業(yè)控制和資源管理。
Nimbus 負(fù)責(zé)在集群里面分發(fā)代碼,分配計(jì)算任務(wù)給機(jī)器, 并且監(jiān)控狀態(tài)。

Supervisor (worker 進(jìn)程)與NodeManager(YarnChild)
每一個(gè)工作節(jié)點(diǎn)上面運(yùn)行一個(gè)叫做Supervisor 的節(jié)點(diǎn)。Supervisor 會(huì)監(jiān)聽分配給它那臺(tái)機(jī)器的工作,根據(jù)需要啟動(dòng)/關(guān)閉工作進(jìn)程。每一個(gè)工作進(jìn)程執(zhí)行一個(gè)topology 的一個(gè)子集;一個(gè)運(yùn)行的topology 由運(yùn)行在很多機(jī)器上的很多工作進(jìn)程組成。


storm實(shí)時(shí)流式計(jì)算的工作機(jī)制
2個(gè)角色
nimbus是集群的主節(jié)點(diǎn):負(fù)責(zé)在集群里面分發(fā)代碼,分配計(jì)算任務(wù)給機(jī)器, 并且監(jiān)控狀態(tài)。//作業(yè)控制和資源管理
supervisor是集群的從節(jié)點(diǎn):每一個(gè)工作節(jié)點(diǎn)上面運(yùn)行一個(gè)叫做Supervisor 的節(jié)點(diǎn),每一個(gè)supervisor里面會(huì)有worker進(jìn)程在服務(wù)器上運(yùn)行著,這些worker是真正干活的。
nimbus和supervisor直接并沒有直接的聯(lián)系,而是需要第三方工具zookeeper實(shí)現(xiàn)的
第一個(gè)supervisor里面的worker會(huì)調(diào)用我們寫的一個(gè)類比如叫(采集水這個(gè)類),處理好了之后,會(huì)再次在這個(gè)worker里面封裝成一定的數(shù)據(jù)包的格式發(fā)出去,發(fā)給下一個(gè)worker,下一個(gè)worker會(huì)去處理上一個(gè)worker傳給他的結(jié)果,去調(diào)用我們寫的另一個(gè)邏輯(調(diào)用我們寫的類 過濾邏輯)然后,就是在第二個(gè)worker里面去處理,然后再封裝成一定的數(shù)據(jù)包的格式發(fā)出去,發(fā)給下一個(gè)worker。
下一個(gè)worker也是不知道自己怎么辦,而是調(diào)用我們程序自己寫的邏輯(比如調(diào)用沉淀這個(gè)類),處理完的數(shù)據(jù)再次的封裝成一個(gè)數(shù)據(jù)包傳給下一個(gè)worker。
最后一個(gè)處理步驟,會(huì)把處理的結(jié)果我們源源不斷的放在一個(gè)內(nèi)存數(shù)據(jù)庫中,(處理結(jié)果的使用者)誰要用就可以直接的去使用數(shù)據(jù)。

小結(jié):
整個(gè)處理流程的組織協(xié)調(diào)不用用戶去關(guān)系,用戶只需要去定義每一個(gè)步驟中的具體的業(yè)務(wù)處理邏輯
具體執(zhí)行任務(wù)的角色是worker,worker執(zhí)行任務(wù)時(shí)具體的行為則由我們定義的業(yè)務(wù)邏輯決定。

storm處理數(shù)據(jù)流程小結(jié)
1、客戶端client把任務(wù)(topology)提交給nimbus
2、nimbus會(huì)把任務(wù)分配的一些信息放在zookeeper上面;
3、supervisor會(huì)通過zookeeper領(lǐng)取到任務(wù)
4、supervisor再分配給worker去運(yùn)行我們的任務(wù)
官方解釋如下://這里的基本概念不懂的見下文
也可以叫做Topology運(yùn)行機(jī)制
(1)Storm 提交后,會(huì)把代碼首先存放到Nimbus 節(jié)點(diǎn)的inbox 目錄下,之后,會(huì)把當(dāng)前Storm運(yùn)行的配置生成一個(gè)stormconf.ser 文件放到Nimbus 節(jié)點(diǎn)的stormdist 目錄中,在此目錄中同時(shí)還有序列化之后的Topology 代碼文件;
(2)在設(shè)定Topology 所關(guān)聯(lián)的Spouts 和Bolts 時(shí),可以同時(shí)設(shè)置當(dāng)前Spout 和Bolt 的executor數(shù)目和task 數(shù)目,默認(rèn)情況下,一個(gè)Topology 的task 的總和是和executor 的總和一致的。之后,系統(tǒng)根據(jù)worker 的數(shù)目,盡量平均的分配這些task 的執(zhí)行。worker 在哪個(gè)supervisor節(jié)點(diǎn)上運(yùn)行是由storm 本身決定的;
(3)任務(wù)分配好之后,Nimbes 節(jié)點(diǎn)會(huì)將任務(wù)的信息提交到zookeeper 集群,同時(shí)在zookeeper集群中會(huì)有workerbeats 節(jié)點(diǎn),這里存儲(chǔ)了當(dāng)前Topology 的所有worker 進(jìn)程的心跳信息;
(4)Supervisor 節(jié)點(diǎn)會(huì)不斷的輪詢zookeeper 集群,在zookeeper 的assignments 節(jié)點(diǎn)中保存了所有Topology 的任務(wù)分配信息、代碼存儲(chǔ)目錄、任務(wù)之間的關(guān)聯(lián)關(guān)系等,Supervisor 通過輪詢此節(jié)點(diǎn)的內(nèi)容,來領(lǐng)取自己的任務(wù),啟動(dòng)worker 進(jìn)程運(yùn)行;
(5)一個(gè)Topology 運(yùn)行之后,就會(huì)不斷的通過Spouts 來發(fā)送Stream 流,通過Bolts 來不斷的處理接收到的Stream 流,Stream 流是×××的。
最后一步會(huì)不間斷的執(zhí)行,除非手動(dòng)結(jié)束Topology。

有幾點(diǎn)需要說明的地方:
(1)每個(gè)組件(Spout 或者Bolt)的構(gòu)造方法和declareOutputFields 方法都只被調(diào)用一次。
(2)open 方法、prepare 方法的調(diào)用是多次的。入口函數(shù)中設(shè)定的setSpout 或者setBolt 里的并行度參數(shù)指的是executor 的數(shù)目,是負(fù)責(zé)運(yùn)行組件中的task 的線程的數(shù)目,此數(shù)目是多少,上述的兩個(gè)方法就會(huì)被調(diào)用多少次,在每個(gè)executor 運(yùn)行的時(shí)候調(diào)用一次。相當(dāng)于一個(gè)線程的構(gòu)造方法。
(3)nextTuple 方法、execute 方法是一直被運(yùn)行的,nextTuple 方法不斷的發(fā)射Tuple,Bolt的execute 不斷的接收Tuple 進(jìn)行處理。只有這樣不斷地運(yùn)行,才會(huì)產(chǎn)生×××的Tuple 流,體現(xiàn)實(shí)時(shí)性。相當(dāng)于線程的run 方法。
(4)在提交了一個(gè)topology 之后,Storm 就會(huì)創(chuàng)建spout/bolt 實(shí)例并進(jìn)行序列化。之后,將序列化的component 發(fā)送給所有的任務(wù)所在的機(jī)器(即Supervisor 節(jié)點(diǎn)),在每一個(gè)任務(wù)上反序列化component。
(5)Spout 和Bolt 之間、Bolt 和Bolt 之間的通信,是通過zeroMQ 的消息隊(duì)列實(shí)現(xiàn)的。
(6)上圖沒有列出ack 方法和fail 方法,在一個(gè)Tuple 被成功處理之后,需要調(diào)用ack 方法來標(biāo)記成功,否則調(diào)用fail 方法標(biāo)記失敗,重新處理這個(gè)Tuple。

終止Topology
通過在Nimbus 節(jié)點(diǎn)利用如下命令來終止一個(gè)Topology 的運(yùn)行:
bin/storm kill topologyName
kill 之后,可以通過UI 界面查看topology 狀態(tài),會(huì)首先變成KILLED 狀態(tài),在清理完本地目錄和zookeeper 集群中的和當(dāng)前Topology 相關(guān)的信息之后,此Topology 就會(huì)徹底消失。

小結(jié)zookeeper在storm中的作用
1、nimbus會(huì)把任務(wù)分配的一些信息放在zookeeper上面;
2、supervisor會(huì)通過zookeeper領(lǐng)取到任務(wù)
3、numbus需要通過zookeeper去感知supervisor的健康狀態(tài)

Topology的概念類似于MapReduce中提交的一個(gè)任務(wù) job
每臺(tái)supervisor上會(huì)有多個(gè)worker進(jìn)程
每個(gè)worker進(jìn)程中運(yùn)行著若干個(gè)executor線程
每個(gè)executor中運(yùn)行著若干個(gè)相同的task

部署storm集群

strom里面處了Nimbus Supervisor 還需要依賴zookeeper,所以在安裝Strom的時(shí)候確保zookeeper安裝了
storm的配置與部署
下載storm,然后上傳到linux中
我們解壓后到conf目錄下修改配置
cd conf/
vi storm.yaml
告訴zookeeper在那幾臺(tái)機(jī)器上部署了
storm.zookeeper.servers:

  • "hadoop-server-00"
  • "hadoop-server-01"
  • "hadoop-server-02"
    告訴Strom nimbus在那臺(tái)主機(jī)上
    nimbus.host: "hadoop-server-00"
    保存退出

supervisor是不需要去指定的,他的數(shù)量是可以動(dòng)態(tài)的去增減

然后把他分發(fā)到每臺(tái)機(jī)器上去
scp -r apache-storm-0.9.2-incubating/ hadoop-server-01:/usr/local/apps/
scp -r apache-storm-0.9.2-incubating/ hadoop-server-02:/usr/local/apps/

啟動(dòng)storm要先啟動(dòng)zookeeper
進(jìn)入zookeeper的bin目錄下去啟動(dòng)zookeeper
./zkCli.sh start
./zkCli.sh status(查看他的狀態(tài))

啟動(dòng)Strom
bin目錄上
./storm nimbus(那臺(tái)機(jī)器上配置了nimbus就在那臺(tái)機(jī)器上啟動(dòng)nimbus)

在另外的兩臺(tái)機(jī)器上去啟動(dòng)Supervisor
01機(jī)器上的bin目錄上
./storm Supervisor
02機(jī)器上的bin目錄上
./storm Supervisor

可以通過jps來看進(jìn)程數(shù)
storm也是可以通過網(wǎng)頁來看的,但是必須要啟動(dòng)打開網(wǎng)頁的外部服務(wù)的進(jìn)程命令,也必須在啟動(dòng)nimbus的這臺(tái)機(jī)器上去啟動(dòng)這個(gè)進(jìn)程
啟動(dòng)外部服務(wù)的進(jìn)程命令是cd app/(strom安裝包)/bin/storm ui //直接執(zhí)行這個(gè)命令

jps查看進(jìn)程 ./strom ui
ui的進(jìn)程叫core
這樣我們就可以通過網(wǎng)頁來看Strom的狀態(tài)
HTTP://hadoop-server-00:8080

小結(jié): //這里是后臺(tái)啟動(dòng)
在nimbus 主機(jī)上
//啟動(dòng)協(xié)調(diào)管理nimbus
./storm nimbus 1>/dev/null 2>&1 &
//啟動(dòng)web 管理界面啟動(dòng)后可以通過nimbus 主機(jī)名:8080 端口進(jìn)行仿問
./storm ui 1>/dev/null 2>&1 &

在supervisor 主機(jī)上
./storm supervisor 1>/dev/null 2>&1 &

slots 代表:槽位,也就是work進(jìn)程,supervisor內(nèi)啟動(dòng)的進(jìn)程,默認(rèn)啟動(dòng)4個(gè)。當(dāng)你的機(jī)器的內(nèi)核非常好的時(shí)候,可以修改配置來增加槽位數(shù)
可以知道那個(gè)worker的數(shù)量 如果不指點(diǎn)默認(rèn)為4個(gè)

(在配置之前需要把進(jìn)程都停掉,按ctrl+c就可以停掉進(jìn)程了)
在配置項(xiàng)vi storm.yaml 里面最后增加(要頂格寫)
supervisor.slots.ports:
-6701
-6702
-6703
-6704
-6705
-6706

//這些數(shù)字表示worker顯示的端口

保存退出
完后,我們要把這個(gè)配置文件分發(fā)到另外兩臺(tái)機(jī)器上去
scp storm.yaml hadoop-server-01:/usr/local/apps/strom(安裝包)/conf/
scp storm.yaml hadoop-server-02:/usr/local/apps/strom(安裝包)/conf/
這樣每個(gè)最大的worker數(shù)量為6

啟動(dòng)Strom為后臺(tái)進(jìn)程
在00機(jī)器上
bin/storm nimbus 1>/dev/null 2>&1 & (就是啟動(dòng)nimbus 1到dev下的null目錄中【標(biāo)準(zhǔn)輸出從定性到這個(gè)文件中】 把2也從定性到1所去的地方,最后&表示為啟動(dòng)一個(gè)后臺(tái)進(jìn)程)
在00機(jī)器上
bin/storm supervisor 1>/dev/null 2>&1 &
注意:如果有錯(cuò)誤退出,我們可以看看日志文件
cd logs/
ll
less supervisor.log
在00機(jī)器上
bin/storm ui 1>/dev/null 2>&1 &
(為了在網(wǎng)頁中可以觀察,我們必須在啟動(dòng)nimbus的這臺(tái)機(jī)器上去啟動(dòng)ui)

我們切換到zookeeper下去打開zookeeper的客戶端
cd /apps/zookeeper(安裝包)/bin
./zkCli.sh
就會(huì)發(fā)現(xiàn)一個(gè)storm的節(jié)點(diǎn)
ls /strom
就會(huì)看到Strom下的節(jié)點(diǎn)
ls /strom/supervisor
就會(huì)看到supervisor下的節(jié)點(diǎn),每個(gè)supervisor就會(huì)有一個(gè)相應(yīng)的id和網(wǎng)頁上的id是一一對應(yīng)的

配置小結(jié):
Storm 相關(guān)配置項(xiàng)
在storm.yaml 中常用的幾個(gè)選項(xiàng)
storm.zookeeper.root
Storm 在zookeeper 集群中的根目錄,默認(rèn)是“/”

topology.workers
每個(gè)Topology 運(yùn)行時(shí)的worker 的默認(rèn)數(shù)目,若在代碼中設(shè)置,則此選項(xiàng)值被覆蓋

storm.zookeeper.servers
zookeeper 集群的節(jié)點(diǎn)列表

storm.local.dir
Storm 用于存儲(chǔ)jar 包和臨時(shí)文件的本地存儲(chǔ)目錄

ui.port
Storm 集群的UI 地址端口號,默認(rèn)是8080

nimbus.host:
Nimbus 節(jié)點(diǎn)的host

supervisor.slots.ports
Supervisor 節(jié)點(diǎn)的worker 占位槽,集群中的所有Topology 公用這些槽位數(shù),即使提交時(shí)設(shè)置了較大數(shù)值的槽位數(shù),系統(tǒng)也會(huì)按照當(dāng)前集群中實(shí)際剩余的槽位數(shù)來進(jìn)行分配,當(dāng)所有的槽位數(shù)都分配完時(shí),新提交的Topology 只能等待,系統(tǒng)會(huì)一直監(jiān)測是否有空余的槽位空出來,如果有,就再次給新提交的Topology 分配。

storm的編程基本概念
topology:拓?fù)湟步幸粋€(gè)任務(wù),只不過一旦啟動(dòng)起來就永不停歇,和mapreduce里的job類似只不過job處理完一個(gè)任務(wù)后就自動(dòng)停止了

topology內(nèi)部還分為spouts和bolts
spouts:拓?fù)涞南⒃?,類似于mapreduce中的map,為后續(xù)的處理流程讀取數(shù)據(jù)源(拿數(shù)據(jù))
bolts:拓?fù)涞奶幚磉壿媶卧ㄔ趕pouts之后的組件叫bolts),bolts可以有很多級,分別處理不同的功能,類似于mapreduce的reduce只不過bolts組件可以有任意多級(處理數(shù)據(jù))

tuple:消息元組//是作為spouts往bolts之間傳遞數(shù)據(jù),封裝數(shù)據(jù)之后叫做tuple,tuple框架來實(shí)現(xiàn)spouts往bolts之間的數(shù)據(jù)傳遞
tuple里面可以傳遞多個(gè)filed,每個(gè)filed可以定義一個(gè)名稱。
//spouts、bolts組件之間傳遞數(shù)據(jù)必須封裝在tuple中,tuple可以哦實(shí)現(xiàn)定義schema,規(guī)定有哪些字段。

組件與組件之間數(shù)據(jù)傳遞的路線//叫做streaming

stream:流 //數(shù)據(jù)的流向
stream grouping:流里面的分組策略也可以叫做數(shù)據(jù)流向的策略,可以理解為MapReduce中的shuffle階段,指的是在stream中兩頭的運(yùn)行實(shí)例之間數(shù)據(jù)的分發(fā)規(guī)則,
類比mapreduce中的maptask-->reduce task之間的partition(劃分)策略(有很多策略)

tasks:任務(wù)處理單元
executor:工作進(jìn)程(是在workers的線程)
workers:工作進(jìn)程(是一個(gè)多線程的程序)
tasks在executor里面 executor在workers里面

configuration:topology的配置


編程的時(shí)候要導(dǎo)入storm的jar包 我們在用集群區(qū)工作的時(shí)候,每一個(gè)集群機(jī)器都應(yīng)該創(chuàng)建一個(gè)storm分析之后的目錄
3臺(tái)機(jī)器,就應(yīng)該在3臺(tái)機(jī)器上去創(chuàng)建
我們編好java程序后打成jar包,長傳到linux機(jī)器上面去,
其實(shí)storm和mapreduce程序的編寫差不多
執(zhí)行storm的命令為
在bin目錄下
./storm jar ~/phonetopo.jar 客戶端主類 參數(shù)
~/phonetopo.jar:表示,用戶主目錄下的phonetopo.jar
參數(shù)為:集群提交的時(shí)候,給他的名稱

啟動(dòng)后我們可以通過命令來查看
bin/strom list
程序會(huì)一直運(yùn)行下去,實(shí)時(shí)在線分析

我們用命令去關(guān)閉程序
bin/storm kill phone-topo(phone-topo:客戶端給的名字)

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI