并行映射上的worker_limit_reached减少了作业

时间:2015-08-27 17:18:40

标签: riak riak-search

我有50个主机试图在Riak下面运行地图减少工作。我收到以下错误,其中一些主持人抱怨worker_limit已到达。

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

  

{ “相”:0, “错误”: “[worker_limit_reached]”, “输入”: “{<< \” provisionentry \ “>>,<< \” R89Okhz49SDje0y0qvcnkK7xLH0 \“&GT ;>}“,”类型“:”结果“,”堆栈“:”[]“}查询MapReduce(path ='/ mapred',reply_headers = {'content-length':'144','access- control-allow-headers':'Content-Type','server':'MochiWeb / 1.1 WebMachine / 1.10.8(假冒,盗窃)','连接':'关闭','日期':'星期四, 2015年8月27日00:32:22 GMT','access-control-allow-origin':'*','access-control-allow-methods':'POST,GET,OPTIONS','content-type':' application / json'},verb ='POST',headers = {'Content-Type':'application / json'},data = MapReduceJob(inputs = MapReduceInputs(bucket ='provisionentry',key = u'34245e92-ccb5- 42e2-a1d9-74ab1c6af8bf',index ='testid_bin'),query = [MapReduceQuery(map = MapReduceQuerySpec(language ='erlang',module ='datatools',function ='map_object_key_value'))])))

1 个答案:

答案 0 :(得分:1)

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

适用于定期管理任务,或者在可以限制作业数量时进行预先计算。

由于作业的地图阶段是覆盖查询,因此您需要在每个地图中至少包含1 / n_val(四舍五入)vnodes,每个地图使用1个工作人员。由于您无法保证所选的覆盖范围集不会重叠,因此您不应期望能够同时运行比工作人员限制设置更多的地图缩减工作。

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

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