【问题标题】:How to implement a custom scheduler in Heron?如何在 Heron 中实现自定义调度程序?
【发布时间】:2018-03-25 11:57:21
【问题描述】:

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

我已经实现了实现IScheduler 接口的CustomScheduler,并且我想将LocalLauncherLocalUploaderdefault Packing algorithm 与我的自定义调度程序一起使用。

此外,我修改了位于conf/local/ 的名为scheduler.yaml 的苍鹭配置文件以使用自定义调度程序。同时,我将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)  

我应该怎么做才能解决这个问题?感谢您的帮助!

【问题讨论】:

    标签: streaming scheduled-tasks apache-storm heron


    【解决方案1】:

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

    我想实现自定义调度程序和打包算法无需重新编译 Heron

    我有一个名为“packing”的项目,它具有所需的 maven 依赖项 heron.api 和 heron.spi。

    我的 jar 名为“packing-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"
    

    然后,只需将您的自定义打包或调度程序添加到您的配置中:

    packing.yaml 中的示例:

    heron.class.packing.algorithm: com.hcep.packing.CustomPacking
    

    com.hcep.packing 是我的打包项目中的包结构,而 CustomPacking 是我的打包类。

    【讨论】:

      【解决方案2】:

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

      要使您的自定义调度程序正常工作,您可以按照以下步骤操作:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 如何将自定义调度程序部署到 Heron?我应该将我的 customScheduler.jar 上传到 heron-core.jar/lib/scheduler/ 吗?对吗?
        • 我已经用更多细节编辑了这个问题。谢谢你的帮助。
        猜你喜欢
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-08
        • 2021-05-05
        • 1970-01-01
        相关资源
        最近更新 更多