У кого-нибудь есть пример кода для mapreduce для Riak, который можно запустить на одном узле Riak.
Mapreduce с Риаком
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
Да, и я получаю несколько разных ошибок в зависимости от используемой конфигурации. например: ошибка исключения: нет совпадения правого значения {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
У вас работает пример Map Reduce из руководства? Если да, то, возможно, вы могли бы помочь мне и поговорить со мной, чтобы заставить его работать?
- person yazz.com; 23.01.2010
Документация немного непоследовательна, так как в клиентских примерах имена бакетов и объектов являются двоичными, а в примере с уменьшением карты используются атомы и строки.
- person Zed; 23.01.2010
Зед, ты звезда! Оно работает!!! Теперь я попытаюсь заставить его работать из модулей, но это здорово помогло. :)
- person yazz.com; 23.01.2010
Да, вы правы, я заменил атомы на строки, и мой предыдущий код теперь работает.
- person yazz.com; 23.01.2010
Вот пример о том, как сделать MapReduce с помощью функций JavaScript.
person
Augustus
schedule
28.03.2010