Как реализовать собственный планировщик в Heron?
Я прочитал Heron Documents
около Implementing a Custom Scheduler
, И я знал, что мне нужно реализовать некоторые интерфейсы для реализации пользовательского планировщика, такие как ILauncher
, IPacking
, IScheduler
а также IUploader
,
Я понял, что мой CustomScheduler
что реализовано IScheduler
интерфейс, и я хочу использовать LocalLauncher
, LocalUploader
а также default Packing algorithm
с моим пользовательским планировщиком.
Более того, я изменил файл конфигурации heron с именем scheduler.yaml
который расположен в conf/local/
использовать пользовательский планировщик. В то же время я добавил CustomScheduler.jar
в heron-core/lib/scheduler/
, Однако, как показывает журнал, что-то не так:
[2018-04-15 20:44:27 -0700] [STDERR] stderr: Exception in thread "main"
[2018-04-15 20:44:27 -0700] [STDERR] stderr: com.twitter.heron.spi.scheduler.SchedulerException: Failed to instantiate scheduler using class 'com.zyt.heron.custom.scheduler.CustomScheduler'
[2018-04-15 20:44:27 -0700] [STDERR] stderr: at com.twitter.heron.scheduler.utils.LauncherUtils.getSchedulerInstance(LauncherUtils.java:120)
[2018-04-15 20:44:27 -0700] [STDERR] stderr: at com.twitter.heron.scheduler.SchedulerMain.runScheduler(SchedulerMain.java:382)
[2018-04-15 20:44:27 -0700] [STDERR] stderr: at com.twitter.heron.scheduler.SchedulerMain.main(SchedulerMain.java:218)
что я должен сделать, чтобы решить эту проблему? Спасибо за вашу помощь!
3 ответа
Ключ должен предоставить ваши скомпилированные файлы.jar heron, скопировав ваши файлы jar в папку.heron/lib/.
Я хочу реализовать собственный планировщик и алгоритм упаковки без перекомпиляции Heron.
У меня есть проект под названием "упаковка", который имеет запрошенные maven зависимости heron.api и heron.spi.
Мой jar-файл называется "packaging-0.0.1-SNAPSHOT-jar-with-dendencies.jar, созданный с помощью maven. Для меня работают следующие шаги, обобщенные в небольшом shell-скрипте. Я запускаю его из папки своего проекта упаковки сборочно-командным работам:
#!/bin/bash
mvn assembly:assembly
cp target/packing-0.0.1-SNAPSHOT-jar-with-dependencies.jar $HOME/.heron/lib/packing/
cp target/packing-0.0.1-SNAPSHOT-jar-with-dependencies.jar $HOME/.heron/lib/scheduler/
echo "updated packing plan and scheduler"
Затем просто добавьте свою пользовательскую упаковку или планировщик в вашу конфигурацию:
Пример из упаковки.
heron.class.packing.algorithm: com.hcep.packing.CustomPacking
при этом com.hcep.packing является моей структурой пакета в моем проекте упаковки, а CustomPacking - моим классом упаковки.
Непосредственная причина вашего исключения состоит в том, что ваш пользовательский планировщик не включен в выпуск Heron.
Чтобы заставить ваш собственный планировщик работать, вы можете выполнить следующие шаги:
- добавьте свою реализацию в каталог
heron/schedulers/src/java/com/twitter/heron/scheduler
- обновить
BUILD
файл в каталогеheron/schedulers/src/java
- добавьте свою собственную цель построения планировщика в
tools/rules/heron_client.bzl
а такжеtools/rules/heron_core.bzl
Вот пример того, как упакован локальный планировщик: https://github.com/apache/incubator-heron/search?utf8=%E2%9C%93&q=heron-local-scheduler&type=
Вы можете разработать собственный планировщик для Heron - следуйте любой из реализаций планировщика в базе кода.