On 23 Jun 2011, at 16:55, Jeremiah Peschka wrote: > HTTP link walking will get you back the data in the way that you'd expect. > > It's a two-step process using PBC. MR link phases will give you a list of > [bucket, key, tag] that you can then use to pull back the records from Riak. > The new Java client at https://github.com/basho/riak-java-client/ does a 2 step link walk via map/reduce as a single API call (for the sake of API parity). There is an example in the integration tests.
> --- > Jeremiah Peschka > Founder, Brent Ozar PLF, LLC > > On Thursday, June 23, 2011 at 8:52 AM, Andrew Berman wrote: > >> Ah, ok, that makes sense. One more question, when I use the HTTP link >> walking, I do get the data back as expected, so is there a way to >> replicate this in a Map-Reduce job or using the Erlang PBC (which I >> forgot to mention is what I'm using and the reason I'm not using the >> HTTP link walking method)? >> >> --Andrew >> >> On Thu, Jun 23, 2011 at 8:39 AM, Mathias Meyer <math...@basho.com> wrote: >>> Andrew, >>> >>> the data looks like JSON, but it's not valid JSON. Have a look at the list >>> that's in the data section (which is your BERT encoded data), the first >>> character in that list is 131, which is not a valid UTF-8 character, and >>> JSON only allows valid UTF-8 characters. With a binary-encoded format, >>> there's always a chance for a control character like that to blow up the >>> JSON generated before and after the MapReduce code is executed. With JSON, >>> content agnosticism only goes as far as the set of legal characters allows. >>> >>> On a side note, if the data were a valid representation of a string, you >>> would see it as a string in the log file as well, not just as a list of >>> numbers. >>> >>> Mathias Meyer >>> Developer Advocate, Basho Technologies >>> >>> >>> On Donnerstag, 23. Juni 2011 at 17:31, Andrew Berman wrote: >>> >>>> But isn't the value itself JSON? Meaning this part: >>>> >>>> {struct, >>>> [{<<"bucket">>,<<"user">>}, >>>> {<<"key">>,<<"LikiWUPJSFuxtrhCYpsPfg">>}, >>>> {<<"vclock">>, >>>> >>>> <<"a85hYGBgzGDKBVIsLKaZdzOYEhnzWBmes6Yd58sCAA==">>}, >>>> {<<"values">>, >>>> [{struct, >>>> [{<<"metadata">>, >>>> {struct, >>>> [{<<"X-Riak-VTag">>, >>>> <<"1KnL9Dlma9Yg4eMhRuhwtx">>}, >>>> {<<"X-Riak-Last-Modified">>, >>>> <<"Fri, 10 Jun 2011 03:05:11 GMT">>}]}}, >>>> {<<"data">>, >>>> >>>> <<131,108,0,0,0,18,104,2,100,0,6,114,...>>}]}]} >>>> >>>> So the only thing that is not JSON is the data itself, but when I get >>>> the value, shouldn't I be getting the all the info above which is JSON >>>> encoded? >>>> >>>> Thank you all for your help, >>>> >>>> Andrew >>>> >>>> On Thu, Jun 23, 2011 at 8:17 AM, Sean Cribbs <s...@basho.com >>>> (mailto:s...@basho.com)> wrote: >>>>> The object has to be JSON-encoded to be marshalled into the Javascript VM, >>>>> and also on the way out if the Accept header indicates application/json. >>>>> So >>>>> you have two places where it needs to be encodable into JSON. >>>>> On Thu, Jun 23, 2011 at 11:14 AM, Andrew Berman <rexx...@gmail.com >>>>> (mailto:rexx...@gmail.com)> wrote: >>>>>> >>>>>> Mathias, >>>>>> >>>>>> I thought Riak was content agnostic when it came to the data being >>>>>> stored? The map phase is not running Riak.mapValuesJson, so why is >>>>>> the data itself going through the JSON parser? The JSON value >>>>>> returned by v with all the info is valid and I see the struct atom in >>>>>> there so mochijson2 can parse it properly, but I'm not clear why >>>>>> mochijson2 would be coughing at the data part. >>>>>> >>>>>> --Andrew >>>>>> >>>>>> On Thu, Jun 23, 2011 at 5:32 AM, Mathias Meyer <math...@basho.com >>>>>> (mailto:math...@basho.com)> wrote: >>>>>>> Andrew, >>>>>>> >>>>>>> you're indeed hitting a JSON encoding problem here. BERT is binary data, >>>>>>> and won't make the JSON parser happy when trying to deserialize it, >>>>>>> before >>>>>>> handing it into the map phase. You have two options here, and none of >>>>>>> them >>>>>>> will involve JavaScript as the MapReduce language. >>>>>>> >>>>>>> 1.) Use the Protobuff API, use Erlang functions to return the value or >>>>>>> object (e.g. riak_mapreduce:map_object_value or >>>>>>> riak_kv_mapreduce:map_identity), and then run MapReduce queries with the >>>>>>> content type 'application/x-erlang-binary'. However, you're constrained >>>>>>> by >>>>>>> client libraries here, e.g. Ruby and Python don't support this content >>>>>>> type >>>>>>> for MapReduce on the Protobuffs interface yet, so you'd either implement >>>>>>> something custom, or resort to a client that does, riak-erlang-client >>>>>>> comes >>>>>>> to mind, though it was proven to be possible using the Java client too, >>>>>>> thanks to Russell. See [1] and [2] >>>>>>> >>>>>>> 2.) Convert the result from BERT into a JSON-parseable structure inside >>>>>>> an Erlang map function, before it's returned to the client. >>>>>>> >>>>>>> The second approach certainly is less restrictive in terms of API usage, >>>>>>> but certainly involves some overhead inside of the MapReduce request >>>>>>> itself, >>>>>>> but is less prone to encoding/decoding issues with JSON. >>>>>>> >>>>>>> Mathias Meyer >>>>>>> Developer Advocate, Basho Technologies >>>>>>> >>>>>>> [1] >>>>>>> http://lists.basho.com/pipermail/riak-users_lists.basho.com/2011-June/004447.html >>>>>>> [2] >>>>>>> http://lists.basho.com/pipermail/riak-users_lists.basho.com/2011-June/004485.html >>>>>>> >>>>>>> On Donnerstag, 23. Juni 2011 at 07:59, Andrew Berman wrote: >>>>>>> >>>>>>>> Hey Ryan, >>>>>>>> >>>>>>>> Here is the error from the sasl log. It looks like some sort of >>>>>>>> encoding error. Any thoughts on how to fix this? I am storing the >>>>>>>> data as BERT encoded binary and I set the content-type as >>>>>>>> application/octet-stream. >>>>>>>> >>>>>>>> Thanks for your help! >>>>>>>> >>>>>>>> Andrew >>>>>>>> >>>>>>>> ERROR REPORT==== 9-Jun-2011::21:37:05 === >>>>>>>> ** Generic server <0.5996.21> terminating >>>>>>>> ** Last message in was {batch_dispatch, >>>>>>>> {map, >>>>>>>> {jsanon,<<"function(value) {return [value];}">>}, >>>>>>>> [{struct, >>>>>>>> [{<<"bucket">>,<<"user">>}, >>>>>>>> {<<"key">>,<<"LikiWUPJSFuxtrhCYpsPfg">>}, >>>>>>>> {<<"vclock">>, >>>>>>>> >>>>>>>> <<"a85hYGBgzGDKBVIsLKaZdzOYEhnzWBmes6Yd58sCAA==">>}, >>>>>>>> {<<"values">>, >>>>>>>> [{struct, >>>>>>>> [{<<"metadata">>, >>>>>>>> {struct, >>>>>>>> [{<<"X-Riak-VTag">>, >>>>>>>> <<"1KnL9Dlma9Yg4eMhRuhwtx">>}, >>>>>>>> {<<"X-Riak-Last-Modified">>, >>>>>>>> <<"Fri, 10 Jun 2011 03:05:11 GMT">>}]}}, >>>>>>>> {<<"data">>, >>>>>>>> >>>>>>>> <<131,108,0,0,0,18,104,2,100,0,6,114,...>>}]}]}]}, >>>>>>>> <<"user">>,none]}} >>>>>>>> ** When Server state == >>>>>>>> {state,<0.143.0>,riak_kv_js_map,#Port<0.92614>,true} >>>>>>>> ** Reason for termination == >>>>>>>> ** {function_clause,[{js_driver,eval_js, >>>>>>>> [#Port<0.92614>,{error,bad_encoding},5000]}, >>>>>>>> {riak_kv_js_vm,invoke_js,2}, >>>>>>>> {riak_kv_js_vm,define_invoke_anon_js,3}, >>>>>>>> {riak_kv_js_vm,handle_call,3}, >>>>>>>> {gen_server,handle_msg,5}, >>>>>>>> {proc_lib,init_p_do_apply,3}]} >>>>>>>> >>>>>>>> =CRASH REPORT==== 9-Jun-2011::21:37:05 === >>>>>>>> crasher: >>>>>>>> initial call: riak_kv_js_vm:init/1 >>>>>>>> pid: <0.5996.21> >>>>>>>> registered_name: [] >>>>>>>> exception exit: >>>>>>>> >>>>>>>> {function_clause,[{js_driver,eval_js,[#Port<0.92614>,{error,bad_encoding},5000]},{riak_kv_js_vm,invoke_js,2},{riak_kv_js_vm,define_invoke_anon_js,3},{riak_kv_js_vm,handle_call,3},{gen_server,handle_msg,5},{proc_lib,init_p_do_apply,3}]} >>>>>>>> in function gen_server:terminate/6 >>>>>>>> in call from proc_lib:init_p_do_apply/3 >>>>>>>> ancestors: [riak_kv_js_sup,riak_kv_sup,<0.128.0>] >>>>>>>> messages: [] >>>>>>>> links: [<0.142.0>,<0.6009.21>] >>>>>>>> dictionary: [] >>>>>>>> trap_exit: false >>>>>>>> status: running >>>>>>>> heap_size: 4181 >>>>>>>> stack_size: 24 >>>>>>>> reductions: 2586 >>>>>>>> neighbours: >>>>>>>> neighbour: >>>>>>>> [{pid,<0.6009.21>},{registered_name,[]},{initial_call,{riak_kv_mapper,init,[Argument__1]}},{current_function,{gen,do_call,4}},{ancestors,[riak_kv_mapper_sup,riak_kv_sup,<0.128.0>]},{messages,[]},{links,[<0.5996.21>,<12337.6227.21>,<0.162.0>]},{dictionary,[]},{trap_exit,false},{status,waiting},{heap_size,987},{stack_size,53},{reductions,1043}] >>>>>>>> =SUPERVISOR REPORT==== 9-Jun-2011::21:37:05 === >>>>>>>> Supervisor: {local,riak_kv_js_sup} >>>>>>>> Context: child_terminated >>>>>>>> Reason: >>>>>>>> >>>>>>>> {function_clause,[{js_driver,eval_js,[#Port<0.92614>,{error,bad_encoding},5000]},{riak_kv_js_vm,invoke_js,2},{riak_kv_js_vm,define_invoke_anon_js,3},{riak_kv_js_vm,handle_call,3},{gen_server,handle_msg,5},{proc_lib,init_p_do_apply,3}]} >>>>>>>> Offender: >>>>>>>> >>>>>>>> [{pid,<0.5996.21>},{name,undefined},{mfargs,{riak_kv_js_vm,start_link,undefined}},{restart_type,temporary},{shutdown,2000},{child_type,worker}] >>>>>>>> >>>>>>>> On Wed, Jun 22, 2011 at 6:10 PM, Ryan Zezeski <rzeze...@basho.com >>>>>>>> (mailto:rzeze...@basho.com) >>>>>>>> (mailto:rzeze...@basho.com)> wrote: >>>>>>>>> >>>>>>>>> Andrew, >>>>>>>>> Maybe you could elaborate on the error? I tested this against master >>>>>>>>> (commit below) just now with success. >>>>>>>>> 2b1a474f836d962fa035f48c05452e22fc6c2193 Change dependency to allow >>>>>>>>> for R14B03 as well as R14B02 >>>>>>>>> -Ryan >>>>>>>>> On Wed, Jun 22, 2011 at 7:03 PM, Andrew Berman <rexx...@gmail.com >>>>>>>>> (mailto:rexx...@gmail.com) >>>>>>>>> (mailto:rexx...@gmail.com)> wrote: >>>>>>>>>> >>>>>>>>>> Hello, >>>>>>>>>> I'm having issues link walking using the Map Reduce link function. >>>>>>>>>> I am using HEAD from Git, so it's possible that's the issue, but >>>>>>>>>> here is >>>>>>>>>> what is happening. >>>>>>>>>> I've got two buckets, user and user_email where user_email contains >>>>>>>>>> a link to the user. >>>>>>>>>> When I run this: >>>>>>>>>> { >>>>>>>>>> "inputs": [ >>>>>>>>>> [ >>>>>>>>>> "user_email", >>>>>>>>>> "myem...@email.com (mailto:myem...@email.com)" >>>>>>>>>> ] >>>>>>>>>> ], >>>>>>>>>> "query": [ >>>>>>>>>> { >>>>>>>>>> "link": { >>>>>>>>>> "bucket": "user", >>>>>>>>>> "tag": "user" >>>>>>>>>> } >>>>>>>>>> } >>>>>>>>>> ] >>>>>>>>>> } >>>>>>>>>> I only get [["user","LikiWUPJSFuxtrhCYpsPfg","user"]] returned. The >>>>>>>>>> second I add a map function, even the simplest one (function(v) { >>>>>>>>>> [v] } I >>>>>>>>>> get a "map_reduce error": >>>>>>>>>> { >>>>>>>>>> "inputs": [ >>>>>>>>>> [ >>>>>>>>>> "user_email", >>>>>>>>>> "myem...@email.com (mailto:myem...@email.com)" >>>>>>>>>> ] >>>>>>>>>> ], >>>>>>>>>> "query": [ >>>>>>>>>> { >>>>>>>>>> "link": {"bucket":"user", "tag":"user"} >>>>>>>>>> } >>>>>>>>>> ,{ >>>>>>>>>> "map": { >>>>>>>>>> "language": "javascript", >>>>>>>>>> "source": "function(v) { return[v]; }" >>>>>>>>>> } >>>>>>>>>> } >>>>>>>>>> ] >>>>>>>>>> } >>>>>>>>>> Is this functionality broken? I am following what it says on the >>>>>>>>>> Wiki for the MapRed version of link walking. When I use HTTP link >>>>>>>>>> walking, >>>>>>>>>> it works correctly. >>>>>>>>>> Thanks, >>>>>>>>>> Andrew >>>>>>>>>> _______________________________________________ >>>>>>>>>> riak-users mailing list >>>>>>>>>> riak-users@lists.basho.com (mailto:riak-users@lists.basho.com) >>>>>>>>>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> riak-users mailing list >>>>>>>> riak-users@lists.basho.com (mailto:riak-users@lists.basho.com) >>>>>>>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com >>>>>> >>>>>> _______________________________________________ >>>>>> riak-users mailing list >>>>>> riak-users@lists.basho.com (mailto:riak-users@lists.basho.com) >>>>>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com >>>>> >>>>> >>>>> >>>>> -- >>>>> Sean Cribbs <s...@basho.com (mailto:s...@basho.com)> >>>>> Developer Advocate >>>>> Basho Technologies, Inc. >>>>> http://www.basho.com/ >> >> _______________________________________________ >> riak-users mailing list >> riak-users@lists.basho.com >> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com > > _______________________________________________ > riak-users mailing list > riak-users@lists.basho.com > http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
_______________________________________________ riak-users mailing list riak-users@lists.basho.com http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com