1

我有 50 台主机试图在 Riak 上运行下面的 map reduce 作业。我收到以下错误,其中一些主机抱怨worker_limit已到达。

寻找有关我是否可以调整系统以避免此错误的一些见解?找不到太多关于worker_limit.

{"phase":0,"error":"[worker_limit_reached]","input":"{<<\"provisionentry\">>,<<\"R89Okhz49SDje0y0qvcnkK7xLH0\">>}","type":" result","stack":"[]"} with query MapReduce(path='/mapred', reply_headers={'content-length': '144', 'access-control-allow-headers': 'Content-Type ', 'server': 'MochiWeb/1.1 WebMachine/1.10.8 (that head fake, tho)', 'connection': 'close', 'date': 'Thu, 27 Aug 2015 00:32:22 GMT', 'access-control-allow-origin': '*', 'access-control-allow-methods': 'POST, GET, OPTIONS', 'content-type': 'application/json'}, verb='POST' , headers={'内容类型': 'application/json'}, data=MapReduceJob(inputs=MapReduceInputs(bucket='provisionentry', key=u'34245e92-ccb5-42e2-a1d9-74ab1c6af8bf', index='testid_bin'), query=[MapReduceQuery(map=MapReduceQuerySpec (语言='erlang',模块='datatools',函数='map_object_key_value'))]))

4

1 回答 1

1

Riak 中的 Map reduce 不能很好地扩展,因此不能很好地作为面向用户的服务的一部分。

它适用于定期管理任务,或作业数量有限时的预计算。

由于作业的地图阶段是覆盖查询,因此您需要在每个地图中至少包含 1/n_val(向上取整)vnode,每个使用 1 个工作人员。由于您不能保证所选覆盖集不重叠,因此您不应期望能够同时运行比工作人员限制设置更多的 map reduce 作业。

默认工作人员限制为 50 ( https://github.com/basho/riak_pipe/blob/develop/src/riak_pipe_vnode.erl#L86 ),但您可以通过{worker_limit, 50}在 app.config 或高级的 riak_pipe 部分中进行设置来调整它。配置。

请记住,每个工作人员都是一个进程,因此您可能还需要增加 erlang VM 的进程限制。

于 2015-09-01T04:01:19.693 回答