提交任務:storm jar storm-starter-topologies-1.0.1.jar org.apache.storm.starter.wordcounttopology word-count
查詢任務:storm list
kill任務:storm kill word-count
1) 使用rebalance命令動態調整併發度
storm提供了rebalance命令,可以動態調整topology的worker數量和component的併發度,而不用修改topology的**。如果想動態增加某個component的併發度,需要設定component的numtask數量或者maxtaskparallelism的引數值,並且大於併發度引數值(parallelism_hint)的值。如果不設定numtask數量,預設值等同於併發度,重新平衡的時候就只能減少併發度,而不能再增加了。
sentencespout spout=new sentencespout();
splitsentencebolt splitbolt=new splitsentencebolt();
wordcountbolt countbolt=new wordcountbolt();
reportbolt reportbolt=new reportbolt();
topologybuilder builder=new topologybuilder();
// 設定併發為2個executor,每個task指派各自的executor執行緒
builder.setspout(sentence_spout_id,spout,5).setmaxtaskparallelism(10);
// 設定併發為2個executor,每個executor執行2個task
builder.setbolt(split_bolt_id,splitbolt,8).shufflegrouping(sentence_spout_id).setnumtasks(16);
// 有時候我們需要將特定資料的tuple路由到特殊的bolt例項中,在此我們使用fieldsgrouping
// 來保證所有"word"字段值相同的tuple會被路由到同乙個wordcountbolt例項中
builder.setbolt(count_bolt_id,countbolt,12).fieldsgrouping(split_bolt_id,new fields("words"));
builder.setbolt(report_bolt_id,reportbolt).globalgrouping(count_bolt_id);
/*map conf=new hashmap();
conf.put(config.topology_workers,4);
conf.put(config.topology_debug,true);*/
config conf = new config();
conf.setdebug(true);
conf.setnumworkers(3);
localcluster cluster=new localcluster();
cluster.submittopology(topology_name,conf,builder.createtopology());
// thread.sleep(1000);
// cluster.shutdown();
在構建topology的過程中,指定了spout的初始併發度為5,也就是會啟動5個executor執行緒來執行,然後設定最大併發度為10,上限為10個executor執行緒;同時也指定了split初始併發度為8,最大的task數量為16個。在執行過程中,我們發現spout或者split的效能是瓶頸,可以通過調整併發度來提供效能。spout併發度上限為10個,split的最大併發度為16個。
storm rebalance word-count -w 10 -n 4 -e spout=8 -e split=12
storm通過自己內部的重新部署和分配,來完成併發度的調整。等待10s後,topology進入重新分配狀態,等重新分配完成後,就可以在storm ui上看見新的結果了。
Storm效能優化
如何找到topology的效能瓶頸?效能優化的第一步就是找到瓶頸在 從瓶頸處入手,解決關鍵點問題,事半功倍。除了通過系統命令檢視cpu使用,jstack檢視堆疊的呼叫情況以外,還可以通過storm自身提供的資訊來對效能做出相應的判斷。在storm 的ui中,對沒過topology都提供了相應的統計資...
MySQL 效能優化 經驗
1.為查詢快取優化你的查詢 大多數的mysql伺服器都開啟了查詢快取。這是提高性最有效的方法之一,而且這是被mysql的資料庫引擎處理的。當有很多相同的查詢被執行了多次的時候,這些查詢結果會被放到乙個快取中,這樣,後續的相同的查詢就不用操作表而直接訪問快取結果了。這裡最主要的問題是,對於程式設計師來...
Oracle Proc程式設計效能優化經驗
proc 是oracle提供的一種資料庫操作的api。它是基於esql技術的,需要預編譯後才可以變成普通c 非常不直觀,使用起來不太方便,閱讀也存在困難。下面以乙個簡單需求進行舉例說明 要求把db1裡面一張資料表tbl hch test的資料匯出到db2的同名表。最快的方法當然是使用oracle的資...