如何在 Heron 中实现自定义调度程序?
How to implement a custom scheduler in Heron?
我已经阅读了关于 Implementing a Custom Scheduler
的 Heron Documents
。而且我知道我应该实现一些接口来实现自定义调度程序,例如 ILauncher
、IPacking
、IScheduler
和 IUploader
。
我已经意识到我的 CustomScheduler
实现了 IScheduler
接口,我想在我的自定义调度程序中使用 LocalLauncher
、LocalUploader
和 default Packing algorithm
。
此外,我修改了位于 conf/local/
的名为 scheduler.yaml
的 heron 配置文件以使用自定义调度程序。同时,我将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)
我应该怎么做才能解决这个问题?感谢您的帮助!
您可以为 Heron 开发自定义调度程序 - 请遵循代码库中调度程序的任何实现。
出现异常的直接原因是您的自定义调度程序未与 heron 版本打包在一起。
要使您的自定义调度程序正常工作,您可以按照以下步骤操作:
- 将您的实现添加到目录
heron/schedulers/src/java/com/twitter/heron/scheduler
- 更新目录
heron/schedulers/src/java
中的 BUILD
文件
- 在
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=
关键是通过将您的 jar 文件复制到 .heron/lib/ 文件夹,将您编译的 .jar 文件提供给 heron。
我想实现自定义调度程序和打包算法而不重新编译 Heron。
我有一个名为 "packing" 的项目,它具有请求的 Maven 依赖项 heron.api 和 heron.spi。
我的 jar 名为“packing-0.0.1-SNAPSHOT-jar-with-dendencies.jar 用 maven 构建。
对我有用的是以下总结在一个小 shell 脚本中的步骤。我 运行 它从我的 packing-project 文件夹到 assembly-command 工作:
#!/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"
然后,只需将您的自定义打包或调度程序添加到您的配置中:
来自 packing.yaml 的示例:
heron.class.packing.algorithm: com.hcep.packing.CustomPacking
com.hcep.packing 是我打包项目中的包结构,CustomPacking 是我的打包 class。
我已经阅读了关于 Implementing a Custom Scheduler
的 Heron Documents
。而且我知道我应该实现一些接口来实现自定义调度程序,例如 ILauncher
、IPacking
、IScheduler
和 IUploader
。
我已经意识到我的 CustomScheduler
实现了 IScheduler
接口,我想在我的自定义调度程序中使用 LocalLauncher
、LocalUploader
和 default Packing algorithm
。
此外,我修改了位于 conf/local/
的名为 scheduler.yaml
的 heron 配置文件以使用自定义调度程序。同时,我将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)
我应该怎么做才能解决这个问题?感谢您的帮助!
您可以为 Heron 开发自定义调度程序 - 请遵循代码库中调度程序的任何实现。
出现异常的直接原因是您的自定义调度程序未与 heron 版本打包在一起。
要使您的自定义调度程序正常工作,您可以按照以下步骤操作:
- 将您的实现添加到目录
heron/schedulers/src/java/com/twitter/heron/scheduler
- 更新目录
heron/schedulers/src/java
中的BUILD
文件 - 在
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=
关键是通过将您的 jar 文件复制到 .heron/lib/ 文件夹,将您编译的 .jar 文件提供给 heron。
我想实现自定义调度程序和打包算法而不重新编译 Heron。
我有一个名为 "packing" 的项目,它具有请求的 Maven 依赖项 heron.api 和 heron.spi。
我的 jar 名为“packing-0.0.1-SNAPSHOT-jar-with-dendencies.jar 用 maven 构建。 对我有用的是以下总结在一个小 shell 脚本中的步骤。我 运行 它从我的 packing-project 文件夹到 assembly-command 工作:
#!/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"
然后,只需将您的自定义打包或调度程序添加到您的配置中:
来自 packing.yaml 的示例:
heron.class.packing.algorithm: com.hcep.packing.CustomPacking
com.hcep.packing 是我打包项目中的包结构,CustomPacking 是我的打包 class。