Контроль за планированием / размещением в Apache Storm - PullRequest
0 голосов
/ 04 февраля 2020

Я использую топологию WordCount в кластере Storm, состоящем из 2 узлов. Один узел является главным узлом (с Nimbus, UI и Logviewer), и оба из них являются супервизорами с 1 рабочим в каждом. Другими словами, мой главный узел также является супервизором, а второй узел - только супервизором. Как я уже сказал, на одного руководителя приходится 1 работник.

Используемая мной топология настроена так, что она использует этих двух рабочих (setNumWorkers(2)). Подробно, топология имеет 1 носик с 2 резьбами, 1 сплит болт и 1 кол болт. Когда я развертываю топологию с планировщиком по умолчанию, у первого супервизора есть 1 нить носика и болт split , а у второго супервизора есть 1 нить носика и count болт.

Учитывая этот контекст, как я могу контролировать размещение операторов (носик / болт) между этими двумя рабочими? Для исследовательских целей мне нужно иметь некоторый контроль над размещением этих операторов между узлами. Тем не менее, механизм кажется прозрачным в Storm, и такой элемент управления не доступен для конечного пользователя.

Надеюсь, мой вопрос достаточно ясен. Не стесняйтесь спрашивать дополнительные детали. Я знаю, что мне может понадобиться покопаться в исходном коде Storm и перекомпилировать. Хорошо. Я ищу отправную точку и советы о том, как действовать.

Я использую версию Storm 2.1.0.

1 Ответ

1 голос
/ 04 февраля 2020

Планирование выполняется подключаемым планировщиком в Storm. См. Документацию по http://storm.apache.org/releases/2.1.0/Storm-Scheduler.html.

. Вы можете посмотреть на DefaultScheduler для справки https://github.com/apache/storm/blob/v2.1.0/storm-server/src/main/java/org/apache/storm/scheduler/DefaultScheduler.java. Это планировщик по умолчанию, используемый Storm, и он немного обработан для запрета «плохих» работников в назначении, но в остальном в основном выполняет циклическое назначение.

Если вы не хотите реализовывать кластер для всего планировщика вы можете настроить кластер на использование ResourceAwareScheduler и использовать вместо этого стратегию планирования на уровне топологии. Вы можете установить это, установив config.setTopologyStrategy(YourStrategyHere.class) при отправке вашей топологии. Вы захотите реализовать этот интерфейс https://github.com/apache/storm/blob/e909b3d604367e7c47c3bbf3ec8e7f6b672ff778/storm-server/src/main/java/org/apache/storm/scheduler/resource/strategies/scheduling/IStrategy.java#L43, и вы можете найти пример реализации в https://github.com/apache/storm/blob/c427119f24bc0b14f81706ab4ad03404aa85aede/storm-server/src/main/java/org/apache/storm/scheduler/resource/strategies/scheduling/DefaultResourceAwareStrategy.java

Редактировать: если вы реализуете либо IStrategy, либо IScheduler, им нужно go в банке, которую вы положили в storm/lib на машине Nimbus. Стратегия или планировщик должны находиться на пути к классам процесса Nimbus.

...