На каждую машину в грозовом кластере назначать строго по одному спецболту

Я хотел бы запустить специальный болт на каждой машине в моем кластере.

У Storm есть подключаемый планировщик, но документации очень мало. Есть только один понятный пример из Сюминмин. Как можно реализовать этот шаблон с помощью IScheduler?

Пример

У нас есть TCPBolt, который слушает порт 8765. TCPBolt параллелизм == размер кластера. Нам нужно запустить один экземпляр этого болта на каждой машине.


person mboadas    schedule 02.11.2014    source источник


Ответы (1)


Пример и исходный код содержат достаточно демонстрационного кода для этого.

Сначала вам нужно установить номер задачи TCPBolt в качестве номера хоста вашего кластера.

Затем в вашем IScheduler impl, используя данные в private Map<String, SchedulerAssignmentImpl> assignments;, чтобы проверить, назначен ли TCPBolt хосту (в SchedulerAssignmentImpl, используя данные Map<ExecutorDetails, WorkerSlot> executorToSlot;)

Наконец, если он не назначен, используйте следующий код для назначения

// re-get the aviableSlots
availableSlots = cluster.getAvailableSlots(specialSupervisor);
 
// since it is just a demo, to keep things simple, we assign all the
// executors into one slot.
cluster.assign(availableSlots.get(0), topology.getId(), executors);

Это просто грубая идея. Надеюсь, поможет.

person DeepNightTwo    schedule 19.11.2014