Hi Eyal,

I used the same approach as Michael.

As far as I understand, your shared collection should be changeable.  So do
not forget use concurrent collection.

Solution for copies by worker are:

1) Represent one collection as group of collections (collection per
worker), using storm grouping make sure that input bolts emit to the
appropriate cache-bolts.

2) use external storage for state persistence.

It depends from your needs.

Best regards,
Dmytro Dragan
On Dec 4, 2014 10:54 PM, "Michael Rose" <mich...@fullcontact.com> wrote:

> Yes, as long as they're in the same JVM. If you have 4 workers, that's 4
> JVMs, and 4 copies of the data.
>
> Storm will ensure that if you have 4 bolts of type A, and 8 of type B,
> that 1 of type A and 2 of type B exist in each JVM. Since the singleton's
> field is static, it'll be shared.
>
> Michael Rose (@Xorlev <https://twitter.com/xorlev>)
> Senior Platform Engineer, FullContact <http://www.fullcontact.com/>
> mich...@fullcontact.com
>
> On Thu, Dec 4, 2014 at 1:34 PM, Eyal Golan <egola...@gmail.com> wrote:
>
>> Michael,
>> I understand your solution, however, if bolt of type A "wins" the
>> initialization, will bolts of type B see the same instance?
>>
>> Sent from my Android phone
>> On Dec 4, 2014 10:26 PM, "Eyal Golan" <egola...@gmail.com> wrote:
>>
>>> Thanks Michael and Ben !
>>>
>>> Sent from my Android phone
>>> On Dec 4, 2014 9:53 PM, "Flint, Ben" <bfl...@popcap.com> wrote:
>>>
>>>>  I’ve used Hazelcast for use cases like this with great success.  It
>>>> makes it relatively straightforward to implement a distributed data
>>>> structure.
>>>>
>>>>   From: Eyal Golan <egola...@gmail.com>
>>>> Reply-To: "user@storm.apache.org" <user@storm.apache.org>
>>>> Date: Thursday, December 4, 2014 at 11:40 AM
>>>> To: "user@storm.apache.org" <user@storm.apache.org>
>>>> Subject: Re: Shared static data between bolts
>>>>
>>>>   Thanks!
>>>> All the answers give me good idea.
>>>> Here's why I need this list be sharable.
>>>> One bolt needs the list for computation.
>>>> Another bolt will periodically update the list.
>>>> In other words, the list is changeable.
>>>>
>>>> I tried passing it in conf but there are some 3rd party libs in the
>>>> wrapper.
>>>>
>>>> Anyway, I also need to improve the topology. Separate bolt to two etc.
>>>> That way, it would be easier to handle that cache.
>>>>
>>>> One more question, I thought about giving hazelcast a try.
>>>> Create local node and then the bolts will have clients.
>>>>
>>>> What do you think?
>>>>
>>>> Sent from my Android phone
>>>> On Dec 4, 2014 9:14 PM, "Kushan Maskey" <
>>>> kushan.mas...@mmillerassociates.com> wrote:
>>>>
>>>>>  Hi Eyal,
>>>>>
>>>>>  I had the similar issue earlier. Static objects are not a good way of
>>>>> passing the variables around in Storm due to clustered nature of the 
>>>>> Storm.
>>>>> You will see null for all the static variables.
>>>>>
>>>>>  This is how I implemented mine, for instance I wanted to pass around
>>>>> the server properties such and host name and username/password. I read the
>>>>> properties file and then created a map of these properties then set it 
>>>>> into
>>>>> the Config object. Like below.
>>>>>
>>>>>  *In topology:*
>>>>>
>>>>>  Map<Stirng, Stirng> map = new HashMap();
>>>>> map.put("hostname", "localhost");
>>>>>  map.put("username", "testuser");
>>>>>  map.put("password", "testpassord");
>>>>> map.put("port", "1234");
>>>>>
>>>>> Config config = new Config();
>>>>>
>>>>> config.put("MY_MAP", map)
>>>>>  *In Bolts:*
>>>>>
>>>>> public void prepare(Map stormConf, TopologyContext context) {
>>>>>
>>>>> HashMap<Stirng, Stirng> map = stormConfig.get("MY_MAP");
>>>>>
>>>>> }
>>>>>  This how i resolved my problem.Try that if that helps.
>>>>>   --
>>>>> Kushan Maskey
>>>>> 817.403.7500
>>>>> M. Miller & Associates <http://mmillerassociates.com/>
>>>>> kushan.mas...@mmillerassociates.com
>>>>>
>>>>> On Thu, Dec 4, 2014 at 1:01 PM, Eyal Golan <egola...@gmail.com> wrote:
>>>>>
>>>>>> Hi all,
>>>>>> I am newbie with Storm and having some issues with static objects in
>>>>>> the topology.
>>>>>> In the main class, where I set the topology, I also set a static
>>>>>> object. It's actually a wrapper for a collection of strings.
>>>>>> This object needs to he shared between different bolts.
>>>>>> It's big so I want it to be only one instance.
>>>>>>
>>>>>> The problem is that when a bolt tries to get this static instance:
>>>>>> example - MyMain.Shared... It's null. Although I instantiated it in the
>>>>>> main method.
>>>>>>
>>>>>> I guess I'm doing something wrong.
>>>>>>
>>>>>> Thanks for any assistance.
>>>>>>
>>>>>> Eyal
>>>>>>
>>>>>> Sent from my Android phone
>>>>>>
>>>>>
>>>>>
>

Reply via email to