worker_limit_reached на параллельной карте сокращает количество рабочих мест

У меня есть 50 хостов, пытающихся запустить карту ниже на Riak. Я получаю сообщение об ошибке ниже, когда некоторые из хостов жалуются на worker_limit достигается

Хотите узнать, могу ли я настроить систему, чтобы избежать этой ошибки? Не удалось найти слишком много документации по worker_limit,

{"Фаза":0,"Ошибка":"[worker_limit_reached]","вход":"{<< \" provisionentry \ ">>,<< \" R89Okhz49SDje0y0qvcnkK7xLH0 \ ">>}","типа":"result","stack":"[]"} с запросом MapReduce(path='/mapred', reply_headers={'content-length': '144', 'access-control-allow-headers': 'Content-Type', 'server': 'MochiWeb/1.1 WebMachine/1.10.8 (тот самый подделка, хотя)', 'connection': 'close', 'date': ' Четверг, 27 августа 2015 00:32:22 GMT', 'access-control-allow-origin': '*', 'access-control-allow-method': 'POST, GET, OPTIONS', 'content-type': 'application/json'}, глагол ='POST', заголовки ={'Content-Type': 'application/json'}, data=MapReduceJob(input =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 ответ

Снижение карты в Riak плохо масштабируется и поэтому не работает как часть службы, ориентированной на пользователя.

Он подходит для периодических административных задач или предварительных расчетов, когда количество заданий может быть ограничено.

Поскольку фаза карты задания является запросом покрытия, вам нужно будет задействовать как минимум 1/n_val (округленный) vnode на каждой карте, используя по 1 работника на каждой. Поскольку вы не можете гарантировать, что выбранные наборы покрытий не перекрываются, не следует ожидать, что вы сможете одновременно выполнять больше заданий по сокращению карты, чем заданное вами ограничение рабочего объема.

Рабочий предел по умолчанию равен 50 ( https://github.com/basho/riak_pipe/blob/develop/src/riak_pipe_vnode.erl#L86), но вы можете изменить его, установив {worker_limit, 50} в разделе riak_pipe файла app.config или advanced.config.

Помните, что каждый работник - это процесс, поэтому вам может потребоваться увеличить лимит процесса для виртуальной машины Erlang.

Другие вопросы по тегам