如何在Heron中实现自定义调度程序?

时间:2018-03-25 11:57:22

标签: streaming scheduled-tasks apache-storm heron

我已阅读关于Implementing a Custom SchedulerHeron Documents。我知道我应该实现一些接口来实现自定义调度程序,例如ILauncherIPackingISchedulerIUploader

我已经意识到我的CustomScheduler实施了IScheduler界面,我希望将LocalLauncherLocalUploaderdefault Packing algorithm与我的自定义调度程序一起使用。

更重要的是,我修改了位于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 个答案:

答案 0 :(得分:1)

您的异常的直接原因是您的自定义调度程序未与苍鹭版本一起打包。

要使自定义计划程序有效,您可以按照以下步骤操作:

  1. 将您的实施添加到目录heron/schedulers/src/java/com/twitter/heron/scheduler
  2. 更新目录BUILD
  3. 中的heron/schedulers/src/java文件
  4. tools/rules/heron_client.bzltools/rules/heron_core.bzl
  5. 添加自定义计划程序构建目标

    以下是本地调度程序如何打包的示例:https://github.com/apache/incubator-heron/search?utf8=%E2%9C%93&q=heron-local-scheduler&type=

答案 1 :(得分:1)

关键是通过将jar文件复制到.heron / lib / 文件夹中,将已编译的.jar文件提供给苍鹭。

我想实现自定义调度程序和打包算法而无需重新编译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我的包装类。

答案 2 :(得分:-1)

您可以为Heron开发自定义调度程序 - 请遵循代码库中调度程序的任何实现。