My bad. The parameter is called "nimbus.seeds" (former "nimbus.host") and not "nimbus.leader".
And I guess, "build/libs" is not your working directory. (See you IDE setting of your run configuration.) In doubt, include a "System.out.println(new File().getAbsolutePath());" (or similar) in your bolt code, to get the working directory. And check https://github.com/apache/storm/blob/master/storm-core/src/jvm/org/apache/storm/utils/Utils.java#L349 and https://github.com/apache/storm/blob/master/storm-core/src/jvm/org/apache/storm/utils/Utils.java#L452 You can also specify the location for storm.yaml via System.setProperty("storm.conf.file", <your-path>); (or -Dstorm.conf.file=<your-path>) -Matthias On 05/10/2016 06:24 AM, Navin Ipe wrote: > *@Spico: *The code as promised: > http://nrecursions.blogspot.in/2016/05/more-concepts-of-apache-storm-you-need.html#morecreativetopologystructures > *@Matthias:* Still no luck. I tried this in the bolt code: > Map conf = Utils.readStormConfig(); > conf.put("nimbus.leader", "localhost"); > > Also tried altering the storm.yaml file to have this: > ########### These MUST be filled in for a storm configuration > > storm.zookeeper.servers: > - "localhost" > # - "server2" > nimbus.seeds: ["localhost"] > > Am running this on LocalCluster, and strangely, the storm.yaml file is > in my ~/eclipseworkspace/apache-storm-1.0.0_release/conf/ folder, > although my project is in the ~/eclipseworkspace/MyStorm folder. > > Placed a copy of storm.yaml in my project folder and in the build/libs > folder. Still no luck. > For this person > <http://stackoverflow.com/questions/36742451/apache-storm-could-not-find-leader-nimbus-from-seed-hosts>, > it was a port issue. I don't think that's the case for me. > Is there anything else that could be tried out? > > > > On Mon, May 9, 2016 at 6:18 PM, Matthias J. Sax <mj...@apache.org > <mailto:mj...@apache.org>> wrote: > > Utils.readStormConfig() tries to read "./storm.yaml" from local disc > (ie, supervisor machine that executes the bolt) -- as it is using > "working-directory" a guess it does not find the file, and thus value > "nimbus.host" is not set. > > Make sure that storm.yaml is found be the worker, or set nimbus.host > manually in your bolt code: > > conf.put("nimbus.host", "<your-nimbus-host-name>"); > > (or "nimbus.leader" that replaces "nimbus.host" in Storm 1.0.0 > > > -Matthias > > On 05/09/2016 12:31 PM, Navin Ipe wrote: > > @Spico: Will share. > > > > The streams implementation is working beautifully. > > Only the topology killing is failing. > > > > *Tried:* > > Map conf = Utils.readStormConfig(); > > NimbusClient cc = > > NimbusClient.getConfiguredClient(conf); > > Nimbus.Client client = cc.getClient(); > > client.killTopology("myStorm"); > > > > *I get these errors:* > > 29442 [Thread-32-topologyKillerBolt-executor[16 16]] WARN > > o.a.s.u.NimbusClient - Ignoring exception while trying to get leader > > nimbus info from localhost. will retry with a different seed host. > > java.lang.RuntimeException: > > org.apache.storm.thrift.transport.TTransportException: > > java.net.ConnectException: Connection refused > > Caused by: org.apache.storm.thrift.transport.TTransportException: > > java.net.ConnectException: Connection refused > > Caused by: java.net.ConnectException: Connection refused > > 29445 [Thread-32-topologyKillerBolt-executor[16 16]] ERROR o.a.s.util - > > Async loop died! > > java.lang.RuntimeException: > > org.apache.storm.utils.NimbusLeaderNotFoundException: Could not find > > leader nimbus from seed hosts [localhost]. Did you specify a valid list > > of nimbus hosts for config nimbus.seeds? > > Caused by: org.apache.storm.utils.NimbusLeaderNotFoundException: Could > > not find leader nimbus from seed hosts [localhost]. Did you specify a > > valid list of nimbus hosts for config nimbus.seeds? > > 29462 [Thread-32-topologyKillerBolt-executor[16 16]] ERROR o.a.s.util - > > Halting process: ("Worker died") > > java.lang.RuntimeException: ("Worker died") > > > > The error is apparently on this line: NimbusClient cc = > > NimbusClient.getConfiguredClient(conf); > > > > > > > > On Mon, May 9, 2016 at 3:15 PM, Spico Florin <spicoflo...@gmail.com > <mailto:spicoflo...@gmail.com> > > <mailto:spicoflo...@gmail.com <mailto:spicoflo...@gmail.com>>> wrote: > > > > Hi! > > You welcome Navine. I'm also interested in the solution. Can you > > please share your remarks and (some code :)) after the > implementation? > > Thanks. > > Regards,\ > > Florin > > > > On Mon, May 9, 2016 at 7:20 AM, Navin Ipe > > <navin....@searchlighthealth.com > <mailto:navin....@searchlighthealth.com> > > <mailto:navin....@searchlighthealth.com > <mailto:navin....@searchlighthealth.com>>> wrote: > > > > @Matthias: That's genius! I didn't know streams and allGroupings > > could be used like that. > > In the way Storm introduced tick tuples, it'd have been nice if > > Storm had a native technique of doing all this, but the ideas > > you've come up with are extremely good. Am going to try > > implementing them right away. > > Thank you too Florin! > > > > On Mon, May 9, 2016 at 12:48 AM, Matthias J. Sax > > <mj...@apache.org <mailto:mj...@apache.org> > <mailto:mj...@apache.org <mailto:mj...@apache.org>>> wrote: > > > > To synchronize this, use an additional "shut down > bolt" that > > used > > parallelism of one. "shut down bolt" must be notified > by all > > parallel > > DbBolts after they performed the flush. If all > notifications are > > received, there are not in-flight message and thus "shut > > down bolt" can > > kill the topology safely. > > > > -Matthias > > > > > > > > On 05/08/2016 07:27 PM, Spico Florin wrote: > > > hi! > > > there is this solution of sending a poison pill > message from the > > > spout. on bolt wil receiv your poison pill and will > kill topology via > > > storm storm nimbus API. one potentential issue whith > this approach is > > > that due to your topology structure regarding the > parralelism of your > > > bolts nd the time required by themto excute their > bussineess logic, is > > > that the poison pill to be swallowed by the one bolt > responsilble for > > > killing the topology, before all the other messages > that are in-flight > > > to be processed. the conseuence is that you cannot > be sure that all the > > > messagess sent by the spout were processed. also > sharing the total > > > number of sent messages between the excutors in > order to shutdown when > > > all messages were processed coul be error prone > since tuple can be > > > processed many times (depending on your guaranteee > message processing) > > > or they could be failed. > > > i coul not find a solution for this. storm is > intended to run > > > forunbounded data. > > > i hope that thrse help, > > > regard, > > > florin > > > > > > > > > On Sunday, May 8, 2016, Matthias J. Sax > <mj...@apache.org <mailto:mj...@apache.org> <mailto:mj...@apache.org > <mailto:mj...@apache.org>> > > > <mailto:mj...@apache.org <mailto:mj...@apache.org> > <mailto:mj...@apache.org <mailto:mj...@apache.org>>>> wrote: > > > > > > You can get the number of bolt instances from > > TopologyContext that is > > > provided in Bolt.prepare() > > > > > > Furthermore, you could put a loop into your > topology, > > ie, a bolt reads > > > it's own output; if you broadcast (ie, > allGrouping) this > > > feedback-loop-stream you can let bolt instances talk > > to each other. > > > > > > builder.setBolt("DbBolt", new MyDBBolt()) > > > .shuffleGrouping("spout") > > > .allGrouping("flush-stream", "DbBolt"); > > > > > > where "flush-stream" is a second output stream of > > MyDBBolt() sending a > > > notification tuple after it received the > end-of-stream > > from spout; > > > furthermore, if a bolt received the signal via > > "flush-stream" from > > > **all** parallel bolt instances, it can flush to DB. > > > > > > Or something like this... Be creative! :) > > > > > > > > > -Matthias > > > > > > > > > On 05/08/2016 02:26 PM, Navin Ipe wrote: > > > > @Matthias: I agree about the batch processor, > but my > > superior took the > > > > decision to use Storm, and he visualizes more > > complexity later for > > > which > > > > he needs Storm. > > > > I had considered the "end of stream" tuple earlier > > (my idea was to > > > emit > > > > 10 consecutive nulls), but then the question > was how > > do I know how > > > many > > > > bolt instances have been created, and how do I > > notify all the bolts? > > > > Because it's only after the last bolt finishes > > writing to DB, that I > > > > have to shut down the topology. > > > > > > > > @Jason: Thanks. I had seen storm signals > earlier (I > > think from one of > > > > your replies to someone else) and I had a look at > > the code too, > > > but am a > > > > bit wary because it's no longer being > maintained and > > because of the > > > > issues: > https://github.com/ptgoetz/storm-signals/issues > > > > > > > > On Sun, May 8, 2016 at 5:40 AM, Jason Kusar > > <ja...@kusar.net <mailto:ja...@kusar.net> > <mailto:ja...@kusar.net <mailto:ja...@kusar.net>> > > > <javascript:;> > > > > <mailto:ja...@kusar.net <mailto:ja...@kusar.net> > <mailto:ja...@kusar.net > <mailto:ja...@kusar.net>> <javascript:;>>> wrote: > > > > > > > > You might want to check out Storm Signals. > > > > https://github.com/ptgoetz/storm-signals > > > > > > > > It might give you what you're looking for. > > > > > > > > > > > > On Sat, May 7, 2016, 11:59 AM Matthias J. Sax > > > <mj...@apache.org <mailto:mj...@apache.org> > <mailto:mj...@apache.org <mailto:mj...@apache.org>> <javascript:;> > > > > <mailto:mj...@apache.org > <mailto:mj...@apache.org> > > <mailto:mj...@apache.org <mailto:mj...@apache.org>> > <javascript:;>>> wrote: > > > > > > > > As you mentioned already: Storm is > designed > > to run topologies > > > > forever ;) > > > > If you have finite data, why do you > not use > > a batch > > > processor??? > > > > > > > > As a workaround, you can embed "control > > messages" in your > > > stream > > > > (or use > > > > an additional stream for them). > > > > > > > > If you want a topology to shut down > itself, > > you could use > > > > > > > > > > `NimbusClient.getConfiguredClient(conf).getClient().killTopology(name);` > > > > in your spout/bolt code. > > > > > > > > Something like: > > > > - Spout emit all tuples > > > > - Spout emit special "end of stream" > > control tuple > > > > - Bolt1 processes everything > > > > - Bolt1 forward "end of stream" control > > tuple (when it > > > received it) > > > > - Bolt2 processed everything > > > > - Bolt2 receives "end of stream" control > > tuple => flush to DB > > > > => kill > > > > topology > > > > > > > > But I guess, this is kinda weird pattern. > > > > > > > > -Matthias > > > > > > > > On 05/05/2016 06:13 AM, Navin Ipe wrote: > > > > > Hi, > > > > > > > > > > I know Storm is designed to run > forever. I > > also know about > > > > Trident's > > > > > technique of aggregation. But shouldn't > > Storm have a way to > > > > let bolts > > > > > know that a certain bunch of processing > > has been completed? > > > > > > > > > > Consider this topology: > > > > > Spout------>Bolt-A------>Bolt-B > > > > > | > |--->Bolt-B > > > > > | > \--->Bolt-B > > > > > |--->Bolt-A------>Bolt-B > > > > > | > |--->Bolt-B > > > > > | > \--->Bolt-B > > > > > \--->Bolt-A------>Bolt-B > > > > > > |--->Bolt-B > > > > > > \--->Bolt-B > > > > > > > > > > * From Bolt-A to Bolt-B, it is a > > FieldsGrouping. > > > > > * Spout emits only a few tuples > and then > > stops emitting. > > > > > * Bolt A takes those tuples and > > generates millions of > > > tuples. > > > > > > > > > > > > > > > *Bolt-B accumulates tuples that Bolt A > > sends and needs > > > to know > > > > when > > > > > Spout finished emitting. Only then can > > Bolt-B start > > > writing to > > > > SQL.* > > > > > > > > > > *Questions:* > > > > > 1. How can all Bolts B be notified > that it > > is time to > > > write to > > > > SQL? > > > > > 2. After all Bolts B have written to > SQL, > > how to know > > > that all > > > > Bolts B > > > > > have completed writing? > > > > > 3. How to stop the topology? I know of > > > > > localCluster.killTopology("HelloStorm"), > > but shouldn't there > > > > be a way to > > > > > do it from the Bolt? > > > > > > > > > > -- > > > > > Regards, > > > > > Navin > > > > > > > > > > > > > > > > > > > > -- > > > > Regards, > > > > Navin > > > > > > > > > > > > > -- > > Regards, > > Navin > > > > > > > > > > > > -- > > Regards, > > Navin > > > > > -- > Regards, > Navin
signature.asc
Description: OpenPGP digital signature