日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
CentOS6.8安裝并使用JStorm集群

JStorm 是參考 Apache Storm 實現(xiàn)的實時流式計算框架,在網(wǎng)絡(luò)IO、線程模型、資源調(diào)度、可用性及穩(wěn)定性上做了持續(xù)改進(jìn),已被越來越多企業(yè)使用。

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供靖安網(wǎng)站建設(shè)、靖安做網(wǎng)站、靖安網(wǎng)站設(shè)計、靖安網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、靖安企業(yè)網(wǎng)站模板建站服務(wù),十年靖安做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

從應(yīng)用的角度,JStorm應(yīng)用是一種遵守某種編程規(guī)范的分布式應(yīng)用。從系統(tǒng)角度, JStorm是一套類似MapReduce的調(diào)度系統(tǒng)。 從數(shù)據(jù)的角度,JStorm是一套基于流水線的消息處理機(jī)制。

實時計算現(xiàn)在是大數(shù)據(jù)領(lǐng)域中最火爆的一個方向,因為人們對數(shù)據(jù)的要求越來越高,實時性要求也越來越快,傳統(tǒng)的Hadoop MapReduce,逐漸滿足不了需求,因此在這個領(lǐng)域需求不斷。

Storm組件和Hadoop組件對比

JStorm Hadoop
角色 Nimbus JobTracker
Supervisor TaskTracker
Worker Child
應(yīng)用名稱 Topology Job
編程接口 Spout/Bolt Mapper/Reducer

優(yōu)點

在Storm和JStorm出現(xiàn)以前,市面上出現(xiàn)很多實時計算引擎,但自Storm和JStorm出現(xiàn)后,基本上可以說一統(tǒng)江湖: 究其優(yōu)點:

  • 開發(fā)非常迅速:接口簡單,容易上手,只要遵守Topology、Spout和Bolt的編程規(guī)范即可開發(fā)出一個擴(kuò)展性極好的應(yīng)用,底層RPC、Worker之間冗余,數(shù)據(jù)分流之類的動作完全不用考慮
  • 擴(kuò)展性極好:當(dāng)一級處理單元速度,直接配置一下并發(fā)數(shù),即可線性擴(kuò)展性能
  • 健壯強:當(dāng)Worker失效或機(jī)器出現(xiàn)故障時, 自動分配新的Worker替換失效Worker
  • 數(shù)據(jù)準(zhǔn)確性:可以采用Ack機(jī)制,保證數(shù)據(jù)不丟失。 如果對精度有更多一步要求,采用事務(wù)機(jī)制,保證數(shù)據(jù)準(zhǔn)確。
  • 實時性高: JStorm 的設(shè)計偏向單行記錄,因此,在時延較同類產(chǎn)品更低

應(yīng)用場景

JStorm處理數(shù)據(jù)的方式是基于消息的流水線處理, 因此特別適合無狀態(tài)計算,也就是計算單元的依賴的數(shù)據(jù)全部在接受的消息中可以找到, 并且最好一個數(shù)據(jù)流不依賴另外一個數(shù)據(jù)流。

因此,常常用于:

  • 日志分析,從日志中分析出特定的數(shù)據(jù),并將分析的結(jié)果存入外部存儲器如數(shù)據(jù)庫。目前,主流日志分析技術(shù)就使用JStorm或Storm
  • 管道系統(tǒng), 將一個數(shù)據(jù)從一個系統(tǒng)傳輸?shù)搅硗庖粋€系統(tǒng), 比如將數(shù)據(jù)庫同步到Hadoop
  • 消息轉(zhuǎn)化器, 將接受到的消息按照某種格式進(jìn)行轉(zhuǎn)化,存儲到另外一個系統(tǒng)如消息中間件
  • 統(tǒng)計分析器, 從日志或消息中,提煉出某個字段,然后做count或sum計算,最后將統(tǒng)計值存入外部存儲器。中間處理過程可能更復(fù)雜。
  • 實時推薦系統(tǒng), 將推薦算法運行在jstorm中,達(dá)到秒級的推薦效果

基本概念

首先,JStorm有點類似于Hadoop的MR(Map-Reduce),但是區(qū)別在于,hadoop的MR,提交到hadoop的MR job,執(zhí)行完就結(jié)束了,進(jìn)程就退出了,而一個JStorm任務(wù)(JStorm中稱為topology),是7*24小時永遠(yuǎn)在運行的,除非用戶主動kill。

JStorm組件

接下來是一張比較經(jīng)典的Storm的大致的結(jié)構(gòu)圖(跟JStorm一樣):

圖中的水龍頭(好吧,有點俗)就被稱作spout,閃電被稱作bolt。

在JStorm的topology中,有兩種組件:spout和bolt。

# spout

spout代表輸入的數(shù)據(jù)源,這個數(shù)據(jù)源可以是任意的,比如說kafaka,DB,HBase,甚至是HDFS等,JStorm從這個數(shù)據(jù)源中不斷地讀取數(shù)據(jù),然后發(fā)送到下游的bolt中進(jìn)行處理。

# bolt

bolt代表處理邏輯,bolt收到消息之后,對消息做處理(即執(zhí)行用戶的業(yè)務(wù)邏輯),處理完以后,既可以將處理后的消息繼續(xù)發(fā)送到下游的bolt,這樣會形成一個處理流水線(pipeline,不過更精確的應(yīng)該是個有向圖);也可以直接結(jié)束。

通常一個流水線的最后一個bolt,會做一些數(shù)據(jù)的存儲工作,比如將實時計算出來的數(shù)據(jù)寫入DB、HBase等,以供前臺業(yè)務(wù)進(jìn)行查詢和展現(xiàn)。

組件的接口

JStorm框架對spout組件定義了一個接口:nextTuple,顧名思義,就是獲取下一條消息。執(zhí)行時,可以理解成JStorm框架會不停地調(diào)這個接口,以從數(shù)據(jù)源拉取數(shù)據(jù)并往bolt發(fā)送數(shù)據(jù)。

同時,bolt組件定義了一個接口:execute,這個接口就是用戶用來處理業(yè)務(wù)邏輯的地方。

每一個topology,既可以有多個spout,代表同時從多個數(shù)據(jù)源接收消息,也可以多個bolt,來執(zhí)行不同的業(yè)務(wù)邏輯。

調(diào)度和執(zhí)行

接下來就是topology的調(diào)度和執(zhí)行原理,對一個topology,JStorm最終會調(diào)度成一個或多個worker,每個worker即為一個真正的操作系統(tǒng)執(zhí)行進(jìn)程,分布到一個集群的一臺或者多臺機(jī)器上并行執(zhí)行。

而每個worker中,又可以有多個task,分別代表一個執(zhí)行線程。每個task就是上面提到的組件(component)的實現(xiàn),要么是spout要么是bolt。

用戶在提交一個topology的時候,會指定以下的一些執(zhí)行參數(shù):

#總worker數(shù)

即總的進(jìn)程數(shù)。舉例來說,我提交一個topology,指定worker數(shù)為3,那么最后可能會有3個進(jìn)程在執(zhí)行。之所以是可能,是因為根據(jù)配置,JStorm有可能會添加內(nèi)部的組件,如_acker或者_(dá)_topology_master(這兩個組件都是特殊的bolt),這樣會導(dǎo)致最終執(zhí)行的進(jìn)程數(shù)大于用戶指定的進(jìn)程數(shù)。我們默認(rèn)是如果用戶設(shè)置的worker數(shù)小于10個,那么__topology_master 只是作為一個task存在,不獨占worker;如果用戶設(shè)置的worker數(shù)量大于等于10個,那么__topology_master作為一個task將獨占一個worker

#每個component的并行度

上面提到每個topology都可以包含多個spout和bolt,而每個spout和bolt都可以單獨指定一個并行度(parallelism),代表同時有多少個線程(task)來執(zhí)行這個spout或bolt。

JStorm中,每一個執(zhí)行線程都有一個task id,它從1開始遞增,每一個component中的task id是連續(xù)的。

還是上面這個topology,它包含一個spout和一個bolt,spout的并行度為5,bolt并行度為10。那么我們最終會有15個線程來執(zhí)行:5個spout執(zhí)行線程,10個bolt執(zhí)行線程。

這時spout的task id可能是1~5,bolt的task id可能是6~15,之所以是可能,是因為JStorm在調(diào)度的時候,并不保證task id一定是從spout開始,然后到bolt的。但是同一個component中的task id一定是連續(xù)的。

#每個component之間的關(guān)系

即用戶需要去指定一個特定的spout發(fā)出的數(shù)據(jù)應(yīng)該由哪些bolt來處理,或者說一個中間的bolt,它發(fā)出的數(shù)據(jù)應(yīng)該被下游哪些bolt處理。

還是以上面的topology為例,它們會分布在3個進(jìn)程中。JStorm使用了一種均勻的調(diào)度算法,因此在執(zhí)行的時候,你會看到,每個進(jìn)程分別都各有5個線程在執(zhí)行。當(dāng)然,由于spout是5個線程,不能均勻地分配到3個進(jìn)程中,會出現(xiàn)一個進(jìn)程只有1個spout線程的情況;同樣地,也會出現(xiàn)一個進(jìn)程中有4個bolt線程的情況。

在一個topology的運行過程中,如果一個進(jìn)程(worker)掛掉了,JStorm檢測到之后,會不斷嘗試重啟這個進(jìn)程,這就是7*24小時不間斷執(zhí)行的概念。

消息的通信

上面提到,spout的消息會發(fā)送給特定的bolt,bolt也可以發(fā)送給其他的bolt,那這之間是如何通信的呢?

首先,從spout發(fā)送消息的時候,JStorm會計算出消息要發(fā)送的目標(biāo)task id列表,然后看目標(biāo)task id是在本進(jìn)程中,還是其他進(jìn)程中,如果是本進(jìn)程中,那么就可以直接走進(jìn)程內(nèi)部通信(如直接將這個消息放入本進(jìn)程中目標(biāo)task的執(zhí)行隊列中);如果是跨進(jìn)程,那么JStorm會使用netty來將消息發(fā)送到目標(biāo)task中。

實時計算結(jié)果輸出

JStorm是7*24小時運行的,外部系統(tǒng)如果需要查詢某個特定時間點的處理結(jié)果,并不會直接請求JStorm(當(dāng)然,DRPC可以支持這種需求,但是性能并不是太好)。一般來說,在JStorm的spout或bolt中,都會有一個定時往外部存儲寫計算結(jié)果的邏輯,這樣數(shù)據(jù)可以按照業(yè)務(wù)需求被實時或者近實時地存儲起來,然后直接查詢外部存儲中的計算結(jié)果即可。

以上內(nèi)容直接粘貼JStorm官網(wǎng),切勿吐槽

二、 Jstorm 集群安裝

1、系統(tǒng)環(huán)境準(zhǔn)備

# OS: CentOS 6.8 mininal
# host.ip: 10.1.1.78 aniutv-1
# host.ip: 10.1.1.80 aniutv-2
# host.ip: 10.1.1.97 aniutv-5

2、安裝目錄自定義

jstorm : /opt/jstorm (源碼安裝);

zookeeper : /opt/zookeeper(源碼安裝);

java : /usr/java/jdk1.7.0_79 (rpm包安裝)

3、zookeeper 集群安裝

zookeeper 集群參考(http://blog.csdn.net/wh211212/article/details/56014983)

4、zeromq 安裝

zeromq下載地址:http://zeromq.org/area:download/

下載zeromq-4.2.1.tar.gz 到/usr/local/src

cd /usr/local/src && tar -zxf zeromq-4.2.1.tar.gz -C /opt

cd /opt/zeromq-4.2.1 && ./configure && make && sudo make install && sudo ldconfig

5、jzmq安裝

cd /opt && git clone  https://github.com/nathanmarz/jzmq.git

./autogen.sh && ./configure && make && make install

6、JStorm安裝

wget https://github.com/alibaba/jstorm/releases/download/2.1.1/jstorm-2.1.1.zip -P /usr/local/src
cd /usr/local/src && unzip jstorm-2.1.1.zip -d /opt
cd /opt && mv jstorm-2.1.1 jstorm
# mkdir /opt/jstorm/jstorm_data
echo '# jstorm env' >> ~/.bashrc
echo 'export JSTORM_HOME=/opt/jstorm' >> ~/.bashrc
echo 'export PATH=$PATH:$JSTORM_HOME/bin' >> ~/.bashrc
source ~/.bashrc

# JStorm 配置

sed -i /'storm.zookeeper.servers:/a\ - "10.1.1.78"' /opt/jstorm/conf/storm.yaml
sed -i /'storm.zookeeper.servers:/a\ - "10.1.1.80"' /opt/jstorm/conf/storm.yaml
sed -i /'storm.zookeeper.servers:/a\ - "10.1.1.97"' /opt/jstorm/conf/storm.yaml
sed -i /'storm.zookeeper.root/a\ nimbus.host: "10.1.1.78"' /opt/jstorm/conf/storm.yaml

配置項:

storm.zookeeper.servers: 表示zookeeper 的地址;

nimbus.host: 表示nimbus的地址;

storm.zookeeper.root: 表示JStorm在zookeeper中的根目錄,當(dāng)多個JStorm共享一個zookeeper時,需要設(shè)置該選項,默認(rèn)即為“/jstorm”;

storm.local.dir: 表示JStorm臨時數(shù)據(jù)存放目錄,需要保證JStorm程序?qū)υ撃夸浻袑憴?quán)限;

java.library.path: Zeromq 和java zeromq library的安裝目錄,默認(rèn)”/usr/local/lib:/opt/local/lib:/usr/lib”;

supervisor.slots.ports: 表示Supervisor 提供的端口Slot列表,注意不要和其他端口發(fā)生沖突,默認(rèn)是68xx,而Storm的是67xx;

topology.enable.classloader: false, 默認(rèn)關(guān)閉classloader,如果應(yīng)用的jar與JStorm的依賴的jar發(fā)生沖突,比如應(yīng)用使用thrift9,但jstorm使用thrift7時,就需要打開classloader。建議在集群級別上默認(rèn)關(guān)閉,在具體需要隔離的topology上打開這個選項。

# 下面命令只需要在安裝 jstorm_ui 和提交jar節(jié)點的機(jī)器上面執(zhí)行即可

mkdir ~/.jstorm
cp -f $JSTORM_HOME/conf/storm.yaml ~/.jstorm

7、安裝JStorm Web UI

強制使用tomcat7.0或以上版本,切記拷貝**~/.jstorm/storm.yaml,** Web UI 可以和Nimbus在同一個節(jié)點上

mkdir ~/.jstorm
cp -f $JSTORM_HOME/conf/storm.yaml ~/.jstorm
下載tomcat 7.x (以apache-tomcat-7.0.37 為例)
tar -xzf apache-tomcat-7.0.75.tar.gz
cd apache-tomcat-7.0.75
cd webapps
cp $JSTORM_HOME/jstorm-ui-2.1.1.war ./
mv ROOT ROOT.old
ln -s jstorm-ui-2.1.1 ROOT   
# 另外不是 ln -s jstorm-ui-2.1.1.war ROOT 這個要小心
cd ../bin
./startup.sh

8、JStorm啟動

1.在nimbus 節(jié)點(10.1.1.78)上執(zhí)行 “nohup jstorm nimbus &”, 查看$JSTORM_HOME/logs/nimbus.log檢查有無錯誤

2.在supervisor節(jié)點(10.1.1.78,10.1.1.80,10.1.1.97)上執(zhí)行 “nohup jstorm supervisor &”, 查看$JSTORM_HOME/logs/supervisor.log檢查有無錯誤

9、JStorm Web UI

JStorm集群啟動成功截圖如下:

CentOS 6.8 實戰(zhàn)部署JStorm集群CentOS 6.8 實戰(zhàn)部署JStorm集群

# JStorm 集群安裝問題總結(jié)

1、注意/etc/hosts設(shè)置,添加相對應(yīng)的ip hostname

2、設(shè)置ssh免密操作(此步驟在zookeeper集群完成)

3、注意各服務(wù)的環(huán)境變量設(shè)置


分享標(biāo)題:CentOS6.8安裝并使用JStorm集群
網(wǎng)站路徑:http://www.dlmjj.cn/article/djgpigp.html