大資料 十五 JStorm

2021-07-09 14:20:16 字數 2830 閱讀 9861

jstorm 是乙個分布式實時計算引擎,是**開源的

隨著storm 的規模越來越大,發現原有的很多storm設計,只能適合小集群中執行,當集群規模超過100台時,均會出現一些或這或那的問題。jstorm 比storm更穩定,更強大,更快, storm上跑的程式,一行**不變可以執行在jstorm上。

storm/jstorm的安裝、配置、啟動幾乎一模一樣

從應用的角度,jstorm應用是一種遵守某種程式設計規範的分布式應用。從系統角度, jstorm是一套

類似mapreduce的排程系統。 從資料的角度,jstorm是一套基於流水線的訊息處理機制。

在storm和jstorm出現以前,市面上出現很多實時計算引擎,但自storm和jstorm出現後,基本上可以說

一統江湖

原始碼

文件 /wiki/jstorm-chinese-documentation

jstorm/storm優點

:開發非常迅速:介面簡單,容易上手,只要遵守topology、spout和bolt的程式設計規範即可開發出乙個擴充套件性極好的應用,底層rpc、worker之間冗餘,資料分流之類的動作完全不用考慮

擴充套件性極好:當一級處理單元速度,直接配置一下併發數,即可線性擴充套件效能

健壯強:當worker失效或機器出現故障時, 自動分配新的worker替換失效worker

資料準確性:可以採用ack機制,保證資料不丟失。 如果對精度有更多一步要求,採用

事務機制,保證資料準確。

應用場景

:日誌分析,從日誌中分析出特定的資料,並將分析的結果存入外部儲存器如資料庫。目前,主流日誌分析技術就使用jstorm或storm

管道系統, 將乙個資料從乙個系統傳輸到另外乙個系統, 比如將資料庫同步到hadoop

訊息轉化器, 將接受到的訊息按照某種格式進行轉化,儲存到另外乙個系統如訊息中介軟體

統計分析器, 從日誌或訊息中,提煉出

某個字段,然後做count或sum計算,最後將統計值存入外部儲存器。中間處理過程可能更複雜。

資源slot

在jstorm中,資源型別分為4種, cpu, memory,disk, port, 不再侷限於storm的port。 即乙個supervisor可以提供多少個cpu slot,多少個memory slot, 多少個disk slot, 多少個port slot

乙個worker就消耗乙個port slot, 預設乙個task會消耗乙個cpu slot和乙個memory slot

當task執行任務較重時,可以申請更多的cpu slot,

當task需要更多記憶體時,可以申請更多的記憶體slot,

當task 磁碟讀寫較多時,可以申請磁碟slot,則該磁碟slot給該task獨享。

ack機制:通過ack機制,很容易做到保證所有資料均被處理,一條都不漏。

當spout觸發fail動作時,不會自動重發失敗的tuple,需要spout自己重新獲取資料,手動重新再傳送一次

開發經驗總結

/wiki/%e5%bc%80%e5%8f%91%e7%bb%8f%e9%aa%8c%e6%80%bb%e7%bb%93

在架構上,推薦 「訊息中介軟體 + jstorm + 外部儲存」 3架馬車式架構

jstorm從訊息中介軟體中取出資料,計算出結果,儲存到外部儲存上

通常訊息中介軟體推薦使用rocketmq,kafka

外部儲存推薦使用hbase,mysql

該架構,非常方便jstorm程式進行重啟(如因為增加業務公升級程式)

非事務環境中,盡量使用ibasicbolt

對於metaq 和 kafka,

拉取的頻率不要太小,低於100ms時,容易造成metaq/kafka 空轉次數偏多

一次獲取資料block大小推薦是2m或1m,太大記憶體gc壓力比較大,太小效率比較低。

推薦乙個worker執行2個task

使用zookeeper時, 建議使用curator,但不要使用過高的curator版本.curator是netflix開源的一套zookeeper客戶端框架. netflix在使用zookeeper的過程中發現zookeeper自帶的客戶端太底層, 應用方在使用的時候需要自己處理很多事情, 於是在它的基礎上包裝了一下, 提供了一套更好用的客戶端框架.

如果直接實現irichbolt

emit(string streamid, tuple anchor, list tuple)後續component會向acker傳送ack響應

emit(string streamid, list tuple)後續component不會向acker傳送ack響應

ibasicbolt 都會自動使用第乙個介面

ibatchbolt 都會自動使用第二個介面

推薦使用ibasicbolt

運維經驗總結

/wiki/%e8%bf%90%e7%bb%b4%e7%bb%8f%e9%aa%8c%e6%80%bb%e7%bb%93

常見問題

/wiki/%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98

CM CDH構建企業大資料平台系列(十五)

一 什麼叫構建本地yum源?構建本地yum源又叫部署本地庫,實際上就是安裝乙個映象伺服器 映象伺服器 mirror server 與主伺服器的服務內容都是一樣的,只是放在不同的地方,分擔主機的負載。簡單來說就是和照鏡子似的,能看,但不是原版的。在網上內容完全相同而且同步更新的兩個或多個伺服器,除主伺...

大資料學習之十五 sqoop的安裝和使用

1.概念了解 sqoop主要用於hadoop與傳統的資料庫 mysql postgresql.間進行資料的傳遞,可以將乙個關係型資料庫 例如 mysql,oracle,postgrep等 中的資料導到hadoop的hdfs中,也可以將hdfs的資料導進到關係型資料庫中。2.sqoop的安裝 1 將壓...

資料結構(十五)

每組測試第1行包含2個正整數n和 m 1 000 分別是插入元素的個數 以及需要列印的路徑條數。下一行給出區間 10000,10000 內的 n個要被插入乙個初始為空的小頂堆的整數。最後一行給出 m個下標。對輸入中給出的每個下標i,在一行中輸出從h i 到根結點的路徑上的資料。數字間以1個空格分隔,...