2013-10-27 2 views
6

другие пользователи Storm:соответствие между supervisor.slots.ports storm.yaml в и Config.setNumWorkers (#workers) вызов метода

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

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

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

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

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

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

ответ

4

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

Но, когда я смотрю на шторм UI он говорит мне "Num рабочих равен 2.

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

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

1

Вы имеете в основном это правильно.

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

1

supervisor.slots.ports является жестким пределом для всего грозового кластера для числа рабочих.

и

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

, что означает Конфиг.setNumWorkers (#workers) < = supervisor.slots.ports.

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

+0

Я не уверен, правильна ли эта характеристика: «supervisor.slots.ports - это жесткий предел для всего штормового кластера для числа рабочих». supervisor.slots.ports определяется для каждого диспетчера. Мне кажется, что количество слотов в грозном кластере будет тогда суммой всех слотов для всех супервайзеров. Таким образом, сумма слотов тогда будет жестким пределом. – Klaus

+0

Исправить, общее количество слотов - это сумма всех машин. – kartik