【问题标题】:Mapreduce with Riak使用 Riak 的 Mapreduce
【发布时间】:2010-03-29 02:01:13
【问题描述】:

谁有可以在单个 Riak 节点上运行的 Riak 的 mapreduce 示例代码。

【问题讨论】:

  • 多布雷窝。杰克塞马斯? (当我住在奥洛穆茨附近时,我记得唯一的捷克人)。我确实对此进行了研究,但网络上没有可用的示例。

标签: erlang mapreduce riak


【解决方案1】:
cd ~/riak
erl -name zed@127.0.0.1 -setcookie riak -pa apps/riak/ebin

在外壳中:

# connect to the server
> {ok, Client} = riak:client_connect('riak@127.0.0.1').
{ok,{riak_client,'riak@127.0.0.1',<<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

【讨论】:

  • 是的,根据我使用的配置,我会遇到几个不同的错误。例如:异常错误:右侧值不匹配 {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}]}} :不是很有帮助
  • 手册中的 Map Reduce 示例对您有用吗?如果是这样,也许你可以帮助我并说服我让它工作?
  • 文档有点不一致,因为在客户端示例中,存储桶和对象名称是二进制文件,但在 map-reduce 示例中,它们使用原子和字符串。
  • Zed,你是明星!有用!!!现在,我将尝试让它从模块中工作,但这是一个很大的帮助。 :)
  • 是的,你是对的,我用原子替换了字符串,我之前的代码现在可以工作了。
【解决方案2】:

这里是example,介绍如何使用 JavaScript 函数进行 MapReduce。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多