Cómo depurar el programa Storm en eclipse
Storm proporciona dos modos de funcionamiento: modo local y modo distribuido. El modo local es útil para desarrollar y depurar topologías de tormentas.
Storm dispone de dos modos de funcionamiento: modo local y modo distribuido.
En modo local, Storm se ejecuta completamente en proceso simulando nodos trabajadores con subprocesos. El modo local es muy útil para pruebas y desarrollo de topología
porque la mayoría de los desarrolladores de programas usan Windows para el desarrollo de programas si no están instalados en la computadora local
En el entorno Storm, no se pueden desarrollar programas, desarrollar y depurar programas Storm. Si tiene problemas con este problema, utilice los métodos proporcionados en este artículo.
2. Pasos de implementación
Cómo depurar el programa Storm basado en eclipse + maven, los pasos son los siguientes:
1. Configurar el entorno de desarrollo (eclipse + maven, yo uso Estos son eclipse Kepler y maven3.1.1)
2. Cree un proyecto maven y modifique pom.xml, el contenido de pom.xml (la máquina está conectada a Internet, descargue el archivo jar de dependencia requerido)
Github pom.xml introduce demasiadas dependencias, algunas de las cuales son innecesarias.
3. Escriba un programa Storm y especifique que se ejecute en modo local.
El programa proporcionado en este artículo es wordcount
Lo importante es la frase LocalCluster cluster = new LocalCluster();
Config conf = new Config();
conf .setDebug(true);
conf.setNumWorkers(2);
Clúster LocalCluster = nuevo LocalCluster();
cluster.submitTopology("prueba ", conf, builder. createTopology());
Utils.sleep(10000);
cluster.killTopology("test");
cluster. apagado( );
archivo pom.xml
& lt;proyecto xmlns="colecciones-comunes
< /project
programa tormenta
Package.p>importar backtype.storm.Config
importar backtype.storm.LocalCluster
importar backtype.storm.Config;
importar backtype.storm.LocalCluster
importar java.util.HashMap
importar java.util.Map;
p>
importar storm.starter.spout.
importar backtype.storm.topology.base.BaseBasicBolt;
importar backtype.storm.tuple .Tuple;
import backtype.storm.tuple.Values;
/****
* Esta topología demuestra la agrupación de flujos y las múltiples líneas de Storm
* Función.
*/
clase pública WordCountTopology {
clase pública estática SplitSentence extiende BaseBasicBolt {
@Override
ejecución pública vacía (entrada de tupla, recopilador BasicOutputCollector) {
prueba {
String msg = input.getString(0);
System.out.println( msj + "-------------------");
if (msg ! = null) {
String[] s = msg.split(" ");
for (String cadena: s) {
coleccionista.emit(nuevos valores(cadena))emit(nuevos valores(cadena)) ;
}
}
} captura (Excepción e) {
e.printStackTrace();
}
}
}
@Override
public void declareOutputFields( OutputFieldsDeclarer declarante) {
declarante .declare(new Fields("word"));
}
}
}
clase pública estática WordCount extiende BaseBasicBolt {
Map
@Override
public void ejecutar( Tupla tupla, recopilador BasicOutputCollector ) {
Cadena palabra = tuple.getString(0);
Recuento entero = counts.get(palabra);
if (recuento == nulo)
recuento = 0;
recuento++;
recuentos.put(palabra, recuento);
recopilador.emit(nuevos valores( palabra))emit(new Values(word, count));
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarante) {
declarante .declare(new Fields("palabra", "count"));< /p>
}
}
public static void main( String[ ] args) arroja una excepción {
TopologyBuilder builder = nuevo Topo
logyBuilder();
builder.setSpout("spout", nuevo RandomSentenceSpout(), 5);
builder.setBolt("split", nuevo SplitSentence(), 8). shuffleGrouping(
" pico");
builder.setBolt("count", new WordCount(), 12).fieldsGrouping("split",
nuevos campos("palabra"));
Config conf = new Config();
conf.setDebug(true);
if (args ! = null && args.length > 0) {
conf.setNumWorkers(3);
StormSubmitter.submitTopology(args[0], conf,
constructor. createTopology());
} else {
conf.setMaxTaskParallelism(3);
Clúster LocalCluster = new LocalCluster();
cluster.createTopology());
Thread.sleep(10000
cluster.shutdown()
}
; }
}
}
paquete storm.starter.spout;
importar backtype.storm.spout.SpoutOutputCollector; >
importar backtype.storm.task.TopologyContext