Как реализовать собственный планировщик в 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.

Чтобы заставить ваш собственный планировщик работать, вы можете выполнить следующие шаги:

  1. добавьте свою реализацию в каталог heron/schedulers/src/java/com/twitter/heron/scheduler
  2. обновить BUILD файл в каталоге heron/schedulers/src/java
  3. добавьте свою собственную цель построения планировщика в 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 - следуйте любой из реализаций планировщика в базе кода.

Другие вопросы по тегам