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

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

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

{"фаза":0,"ошибка":"[worker_limit_reached]","вход":"{‹‹\"provisionentry\">>,‹‹\"R89Okhz49SDje0y0qvcnkK7xLH0\">>}","type":" результат","стек":"[]"} с запросом MapReduce(path='/mapred', answer_headers={'content-length': '144', 'access-control-allow-headers': 'Content-Type ', 'сервер': 'MochiWeb/1.1 WebMachine/1.10.8 (эта головная подделка, правда)', 'соединение': 'закрыто', 'дата': 'Чт, 27 августа 2015 г., 00:32:22 по Гринвичу', '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'))]))


person GSR    schedule 27.08.2015    source источник


Ответы (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.

person Joe    schedule 01.09.2015