Mapreduce с Риаком

У кого-нибудь есть пример кода для mapreduce для Riak, который можно запустить на одном узле Riak.


person yazz.com    schedule 23.01.2010    source источник
comment
Добрый день. Джек се мас? (единственный чешский, который я помню, когда жил под Оломоуцем). Я исследовал это, но в Интернете нет рабочих примеров.   -  person yazz.com    schedule 23.01.2010


Ответы (2)


cd ~/riak
erl -name [email protected] -setcookie riak -pa apps/riak/ebin

В оболочке:

# connect to the server
> {ok, Client} = riak:client_connect('[email protected]').
{ok,{riak_client,'[email protected]',<<6,201,208,64>>}}

# create and insert objects
> Client:put(riak_object:new(<<"groceries">>, <<"mine">>, ["eggs", "bacons"]), 1).
ok
> Client:put(riak_object:new(<<"groceries">>, <<"yours">>, ["eggs", "sausages"]), 1).
ok

# create Map and Reduce functions
> Count = fun(G, 'undefined', 'none') ->
            [dict:from_list([{I, 1} || I <- riak_object:get_value(G)])]
          end.
#Fun<erl_eval.18.105910772>
> Merge = fun(Gcounts, 'none') ->
            [lists:foldl(fun(G, Acc) ->
                           dict:merge(fun(_, X, Y) -> X+Y end, G, Acc)
                         end, dict:new(), Gcounts)] 
          end.
#Fun<erl_eval.12.113037538>

# do the map-reduce
> {ok, [R]} = Client:mapred([{<<"groceries">>, <<"mine">>},
                             {<<"groceries">>, <<"yours">>}],
                            [{'map', {'qfun', Count}, 'none', false},
                             {'reduce', {'qfun', Merge}, 'none', true}]).           
{ok,[{dict,...

> dict:to_list(R).
[{"eggs",2},{"susages",1},{"bacons",1}]

Для сервера я использовал абсолютно дефолтный конфиг:

$ hg clone http://hg.basho.com/riak/
$ cd riak
$ ./rebar compile generate
$ cd rel
$ ./riak/bin/riak start
person Zed    schedule 23.01.2010
comment
Да, и я получаю несколько разных ошибок в зависимости от используемой конфигурации. например: ошибка исключения: нет совпадения правого значения {error,{badarg,[{ets,match,[nodelocal_ring,{ring,'$1'}]}, {riak_ring_manager,get_my_ring,0}, {riak_mapreduce_fsm,init, 1}, {gen_fsm,init_it,6}, {proc_lib,init_p_do_apply,3}]}}: не очень полезно - person yazz.com; 23.01.2010
comment
У вас работает пример Map Reduce из руководства? Если да, то, возможно, вы могли бы помочь мне и поговорить со мной, чтобы заставить его работать? - person yazz.com; 23.01.2010
comment
Документация немного непоследовательна, так как в клиентских примерах имена бакетов и объектов являются двоичными, а в примере с уменьшением карты используются атомы и строки. - person Zed; 23.01.2010
comment
Зед, ты звезда! Оно работает!!! Теперь я попытаюсь заставить его работать из модулей, но это здорово помогло. :) - person yazz.com; 23.01.2010
comment
Да, вы правы, я заменил атомы на строки, и мой предыдущий код теперь работает. - person yazz.com; 23.01.2010

Вот пример о том, как сделать MapReduce с помощью функций JavaScript.

person Augustus    schedule 28.03.2010