JStorm源碼分析-4.Nimbus服務(wù)器

在jstorm的架構(gòu)中娇未,Nimbus的作用是用來操作Topology墨缘、上傳/下載文件、獲取集群狀態(tài)和拓?fù)錉顟B(tài)等忘蟹。主要作用是接收client的請求飒房,并在計(jì)算之后,修改zk上的數(shù)據(jù)媚值。

1.啟動(dòng)

使用下面的命令就可以啟動(dòng)nimbus服務(wù)器端了

jstorm nimbus

jstorm是一個(gè)python腳本狠毯,會(huì)組裝java命令后啟動(dòng)NimbusServer

java -server 
-Djstorm.home=/Users/shishengjie/software/jstorm-0.9.1 
-Dstorm.options= 
-Djava.library.path=/usr/local/lib:/opt/local/lib:/usr/lib  
-Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 
-Dlogfile.name=nimbus.log 
-Dlog4j.configuration=File:/Users/shishengjie/software/jstorm-0.9.1/conf/jstorm.log4j.properties  
-cp /Users/shishengjie/software/jstorm-0.9.1/jstorm-client-extension-0.9.1.jar:/Users/shishengjie/software/jstorm-0.9.1/jstorm-client-0.9.1.jar:/Users/shishengjie/software/jstorm-0.9.1/jstorm-server-0.9.1.jar:/Users/shishengjie/software/jstorm-0.9.1/lib/kryo-2.17.jar:/
com.alibaba.jstorm.daemon.nimbus.NimbusServer 

在使用idea調(diào)試的時(shí)候,我們需要把相關(guān)的參數(shù)設(shè)置進(jìn)去褥芒。

2. NimbusServer

2.1 啟動(dòng)過程

NimbusServer的啟動(dòng)過程主要是在launchServer方法中嚼松,

  1. 讀取配置嫡良,首先從defaults.yaml中讀取默認(rèn)配置;然后從storm.conf.file指定的文件(如果沒有献酗,從classpath查找storm.yaml)寝受;最后從命令行讀取storm.options中的配置,并依次覆蓋罕偎。
  2. 檢查conf配置是否為集群模式很澄,storm.cluster.mode默認(rèn)是distributed
  3. 初始化關(guān)閉hook,會(huì)在jvm關(guān)閉時(shí)執(zhí)行cleanup方法
  4. 創(chuàng)建NimbusData颜及,主要是初始化兩個(gè)用于上傳和下載的map甩苛,這個(gè)map帶有過期清除功能,過期后可以回調(diào)指定方法俏站。
  5. 使用Curator客戶端創(chuàng)建leaderSelector讯蒲,用于nimbus客戶端選擇leader,選舉成為leader后會(huì)調(diào)用listener中的方法肄扎。
  6. 如果未獲得leader角色墨林,會(huì)初始化follower的線程,該線程的主要工作是清理已經(jīng)分配完成的本地文件,從master下載文件犯祠。

2.2 leader

成為leader后旭等,nimbus服務(wù)器需要很多初始化操作:

  1. 獲取hostname和port(配置:nimbus.thrift.port默認(rèn)為7627),將master的host和port寫入到zk下面的/jstorm/master節(jié)點(diǎn)的內(nèi)容里雷则;
  2. cleanupCorruptTopologies清除中斷的拓?fù)淞疚恚趜k中有記錄但是本地dir上面沒有的拓?fù)浔徽J(rèn)為是被中斷的。在zk中找 /jstorm/topology/下面的節(jié)點(diǎn)月劈,本地路徑/local-storm-dir/nimbus/stormdist下面是拓?fù)淞斜恚瑢k中的列表移除本地有的,剩下都是本地沒有的藤乙,清除的操作就是從zk中移除節(jié)點(diǎn)猜揪。
  3. initGroup初始化group: 如果配置了分組模式(nimbus.groupfile.path中指定了文件路徑,如conf下的group.ini)那么會(huì)解析這個(gè)文件坛梁,并將group信息保存到NimbusData中而姐。
  4. initTopologyAssign初始化TopologyAssign,這是一個(gè)單例,TopologyAssign線程,用于為topology的task分配資源
  5. initTopologyStatus,初始化狀態(tài),更新 /jstorm/topology/的子節(jié)點(diǎn)的StormBase的狀態(tài)為StatusType.startup
  6. initMonitor初始化監(jiān)視器,nimbus.monitor.freq.secs 10s運(yùn)行一次,根據(jù)心跳時(shí)間查找dead的task,修改zk中topology的狀態(tài)為monitor
  7. initCleaner初始化清理器划咐,每隔一段時(shí)間(默認(rèn)600秒)拴念,清理/LOCAL-DIR/nimbus/inbox中上傳的jar包
  8. 創(chuàng)建ServiceHandler,其實(shí)現(xiàn)了thrift的nimbus服務(wù),處理client的請求
  9. initThrift初始化thrift服務(wù)器褐缠,用來處理client端的請求

3. 提供的服務(wù)

3.1 getClusterInfo

這個(gè)服務(wù)用于從zk中獲取集群當(dāng)前狀態(tài):

  1. 從zk獲取 /jstorm/topology/下獲取子節(jié)點(diǎn)和里面的內(nèi)容StormBase政鼠,遍歷topology,獲取每個(gè)拓?fù)涞腁ssignment队魏,獲取group信息公般,封裝到TopologySummary
  2. 獲取Supervisor的狀態(tài),從/jstorm/supervisors下的所有子節(jié)點(diǎn),內(nèi)容是SupervisorInfo,將supervisors和assignments封裝為SupervisorSummary
  3. 封裝為ClusterSummary返回

3.2 上傳文件

beginFileUpload
開始上傳文件主要確定了文件的上傳后的路徑和文件名:{localdir}/nimbus/inbox/stormjar-{uuid}.jar官帘,然后創(chuàng)建操作文件的Channel瞬雹,加入到Uploader中。

uploadhunk
傳入文件的全路徑后和寫入的byte數(shù)組刽虹,從Uploader獲取Channel酗捌,將數(shù)據(jù)寫入文件

finishFileUpload
結(jié)束上傳,從Uploader獲取Channel涌哲,關(guān)閉意敛。

3.3 下載文件

beginFileDownload
創(chuàng)建BufferFileInputStream,然后生成一個(gè)uuid作為id返回給client端膛虫。將id和BufferFileInputStream實(shí)例保存到Downloaders中草姻。
downloadChunk
client端傳入了id,從Downloaders中獲取BufferFileInputStream稍刀,然后讀取一個(gè)chunk放入byte數(shù)組并返回撩独。

3.4 killTopologyWithOpts

首先,確定topology是否處于激活狀態(tài)账月,再修改/jstorm/topology/{topologyId}的內(nèi)容是StormBase的狀態(tài)為StatusType.kill

3.5 activate與deactivate

修改/jstorm/topology/{topologyId}的內(nèi)容是StormBase的狀態(tài)為StatusType.activate和StatusType.inactivate

3.6 rebalance

首先综膀,確定topology是否處于激活狀態(tài),再修改/jstorm/topology/{topologyId}的內(nèi)容是StormBase的狀態(tài)為StatusType.rebalance

可以看到局齿,nimbus的主要作用是獲取配置剧劝,修改zk的配置,具體的實(shí)現(xiàn)還需要Supervisor進(jìn)行相應(yīng)的操作抓歼。下一節(jié)讥此,我們分析Supervisor的啟動(dòng)和工作方式。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谣妻,一起剝皮案震驚了整個(gè)濱河市萄喳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹋半,老刑警劉巖他巨,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異减江,居然都是意外死亡染突,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門辈灼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來份企,“玉大人,你說我怎么就攤上這事茵休⌒桨簦” “怎么了手蝎?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長俐芯。 經(jīng)常有香客問我棵介,道長,這世上最難降的妖魔是什么吧史? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任邮辽,我火速辦了婚禮,結(jié)果婚禮上贸营,老公的妹妹穿的比我還像新娘吨述。我一直安慰自己,他們只是感情好钞脂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布揣云。 她就那樣靜靜地躺著,像睡著了一般冰啃。 火紅的嫁衣襯著肌膚如雪邓夕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天阎毅,我揣著相機(jī)與錄音焚刚,去河邊找鬼。 笑死扇调,一個(gè)胖子當(dāng)著我的面吹牛矿咕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狼钮,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼碳柱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了燃领?” 一聲冷哼從身側(cè)響起士聪,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猛蔽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灵寺,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡曼库,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了略板。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毁枯。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖叮称,靈堂內(nèi)的尸體忽然破棺而出种玛,到底是詐尸還是另有隱情藐鹤,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布赂韵,位于F島的核電站娱节,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏祭示。R本人自食惡果不足惜肄满,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望质涛。 院中可真熱鬧稠歉,春花似錦、人聲如沸汇陆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毡代。三九已至阅羹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間月趟,已是汗流浹背灯蝴。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留孝宗,地道東北人穷躁。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像因妇,于是被迫代替她去往敵國和親问潭。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

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

  • 這是一個(gè)JStorm使用教程婚被,不包含環(huán)境搭建教程狡忙,直接在公司現(xiàn)有集群上跑任務(wù),關(guān)于JStorm集群環(huán)境搭建址芯,后續(xù)研...
    Coselding閱讀 6,336評論 1 9
  • Date: Nov 17-24, 2017 1. 目的 積累Storm為主的流式大數(shù)據(jù)處理平臺(tái)對實(shí)時(shí)數(shù)據(jù)處理的相關(guān)...
    一只很努力爬樹的貓閱讀 2,174評論 0 4
  • Strom集群結(jié)構(gòu)是有一個(gè)主節(jié)點(diǎn)(nimbus)和多個(gè)工作節(jié)點(diǎn)(supervisor)組成的主從結(jié)構(gòu)灾茁,主節(jié)點(diǎn)通過配...
    看山遠(yuǎn)兮閱讀 2,855評論 0 7
  • 愛是什么呢 它總會(huì)有千萬種聲音 但我想 它是恰好 恰好的遇見 恰好的牽手 恰好的親吻 恰好的變成互相的影子 然后這...
    南是南風(fēng)閱讀 157評論 0 0
  • 我以為我在改北专,也以為你很在乎我,也同樣在磨合旬陡。我努力去做你心中的完人拓颓,可能我做的不到位入不了眼。又或許這一切只...
    抹不去的味道閱讀 225評論 0 0