соответствие между supervisor.slots.ports storm.yaml и вызовом метода Config.setNumWorkers(#workers)

другие пользователи Storm:

Рекомендации по настройке штормового кластера (https://github.com/nathanmarz/storm/wiki/Setting-up-a-Storm-cluster) указывают, что свойство конфигурации supervisor.slots.ports должно быть установлено таким образом, что для каждого рабочего процесса на машине вы выделяете отдельный порт.

Насколько я понимаю, каждый рабочий является экземпляром JVM, который прослушивает команды от контроллера nimbus. Поэтому имеет смысл, чтобы каждый прослушивал отдельный порт.

Однако в backtype.storm.Config также есть метод, который позволяет определить количество рабочих процессов. Что, если вызов setNumWorkers попытается установить больше воркеров, чем вы настроили для портов? Казалось бы, это все портит.

Единственное, что мне имеет смысл, это то, что конфигурация yaml определяет верхнюю границу количества рабочих процессов. Каждая топология может запрашивать выделение некоторых рабочих процессов. Но если бы я отправил две топологии (в какой-то конкретный кластер), каждая из которых вызывала бы Config.setNumWorkers(2), то мне лучше было бы настроить четыре порта.

Это правильная идея?

Заранее спасибо .. -Крис


person Chris Bedford    schedule 27.10.2013    source источник


Ответы (3)


Ну, я думаю, что верхняя оценка была верной. Я настроил штормовой кластер из одной машины на своем ноутбуке, затем создал ExclamationTopology (из storm-starter). Я установил только двух рабочих процессов, но у ExclamationTopology есть вызов > conf.setNumWorkers(3);

Но когда я смотрю на пользовательский интерфейс шторма, он говорит мне, что «Число рабочих» равно 2.

Таким образом, кажется, что то, что вы установили в файле storm.yaml, является верхней границей, и если вы запросите больше рабочих процессов, чем вы настроили порты, вы просто получите максимальное доступное количество.

(предостережение: я только начинаю вникать в эти вещи и ни в коем случае не являюсь экспертом, так что есть вероятность, что я что-то упустил. Но приведенный выше отчет — это то, что я наблюдал.)

person Chris Bedford    schedule 27.10.2013

Вы в принципе правильно поняли.

Существует важное различие между слотами и рабочими. Слоты — это места, где можно реализовать рабочих. Когда вы настраиваете супервизор, скажем, на 10 слотов, вы настраиваете его для одновременного запуска до 10 воркеров на этом супервизоре. Если вы запросите больше рабочих, чем слотов, Storm сделает все возможное, чтобы запланировать работу в доступных слотах (в некоторых случаях это означает, например, что рабочий может войти в слот, выполнить некоторую работу, а затем быть замененным). другим работником, чтобы топология могла продолжаться), в некотором смысле не иначе, чем ОС планирует запуск процессов на ограниченном количестве «слотов» (процессоров/ядер/гиперпотоков/независимо от того), что у нее есть.

person G Gordon Worley III    schedule 27.10.2013

supervisor.slots.ports — жесткое ограничение для всего штормового кластера на количество воркеров.

а также

Config.setNumWorkers(#workers) — это мягкое ограничение для этой топологии на количество рабочих процессов.

это означает Config.setNumWorkers(#workers) ‹= supervisor.slots.ports.

допустим, у нас всего 8 портов. Топология настроит количество рабочих на 6. Он получит 6 из 8, а оставшиеся 2 рабочих порта не будут использоваться.

person kartik    schedule 04.01.2015
comment
Я не уверен, что эта характеристика верна: supervisor.slots.ports — это жесткое ограничение для всего штормового кластера на количество воркеров. supervisor.slots.ports определяется для каждого супервизора. Мне кажется, что количество слотов в штормовом кластере будет суммой всех слотов во всех супервизорах. Таким образом, сумма слотов будет жестким ограничением. - person Klaus; 22.11.2015
comment
Правильно, общее количество слотов - это сумма всех машин. - person kartik; 22.11.2015