我是apache storm的初学者,试图编写基本程序。我建立了一个由3名监督员组成的风暴群。我试图编写的程序是一个将一个主管添加0-99,另一个添加100-199,第三个添加200-299,然后让它们推回到nimbus,其中每个总数加在一起然后输出到一个文件。我如何制作这些循环中的每一个,这些循环将添加数字,将单独的工作分配给不同的主管?以下是我现在的代码,但我只是不明白我编写的代码中的风暴会如何以不同的方式发送作业。
import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.StormSubmitter;
import backtype.storm.task.OutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.testing.TestWordSpout;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.TopologyBuilder;
import backtype.storm.topology.base.BaseRichBolt;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;
import backtype.storm.utils.Utils;
import java.util.Map;
public class AddNumMain{
public class addNumBolt{
public int a = 0, b = 0, c = 0, total = 0;
public int addNums1(){
for(int i = 0; i < 99; i++) // job 1
a += i;
return a;
}
public int addNums2(){
for(int j = 100; j < 199; j++) // job 2
b += j;
return b;
}
public int addNums3(){
for(int t = 200; t < 299; jt++) // job 3
c += t;
return c;
}
public int total(){
total = a + b + c;
return total;
}
}
public static void main(){
TopologyBuilder builder = new TopologyBuilder();
Config conf = new Config();
conf.setDebug(true);
conf.setNumWorkers(3);
StormSubmitter.submitTopologyWithProgressBar(args[0], conf, builder.createTopology());
LocalCluster cluster = new LocalCluster();
cluser.submitTopology("myTopology", comf, builder.createTopology()); // need to add parameters
Utils.sleep(10000); //runs for 10 seconds before shutting cluster down
cluster.killTopology("myTopology");
cluster.shutdown();
}
}
答案 0 :(得分:0)
我认为你认为你是主管作为工作执行者。事实并非如此。 Nimbus,主管,zookeeper都是守护进程。他们不是真正的工作执行者。
Spout和bolt是在JVM内部运行的真正执行器。所以,如果你想按照0-99等进行工作分割,你必须使用螺栓1上的字段分组来分割流,并将流发送到3个螺栓。
以及另外1个信息Supervisor将负责管理工作人员(JVM)。