1. 程式人生 > >大資料(十五)

大資料(十五)

JStorm 是一個分散式實時計算引擎,是淘寶開源的 隨著Storm 的規模越來越大,發現原有的很多Storm設計,只能適合小叢集中執行,當叢集規模超過100臺時,均會出現一些或這或那的問題。JStorm 比Storm更穩定,更強大,更快, Storm上跑的程式,一行程式碼不變可以執行在JStorm上。 storm/Jstorm的安裝、配置、啟動幾乎一模一樣
從應用的角度,JStorm應用是一種遵守某種程式設計規範的分散式應用。從系統角度, JStorm是一套類似MapReduce的排程系統。 從資料的角度,JStorm是一套基於流水線的訊息處理機制。 在Storm和JStorm出現以前,市面上出現很多實時計算引擎,但自Storm和JStorm出現後,基本上可以說一統江湖
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自己重新獲取資料,手動重新再發送一次
開發經驗總結 https://github.com/alibaba/jstorm/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
運維經驗總結 https://github.com/alibaba/jstorm/wiki/%E8%BF%90%E7%BB%B4%E7%BB%8F%E9%AA%8C%E6%80%BB%E7%BB%93 常見問題 https://github.com/alibaba/jstorm/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98