服务端扩展

管理针对额外集群管理器的应用程序

师成师成· 更新于 2026-09-29· 阅读 7 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

1.6.0 新增。

注意

不稳定

在 Kyuubi 中,Kyuubi 服务端使用 ApplicationManager 模块来管理由其自身启动的所有应用,包括各种类型的 Kyuubi 引擎和自包含应用。

ApplicationManager 利用由 org.apache.kyuubi.engine.ApplicationOperation 派生的应用操作实现所提供的方法,来监控这些应用的状态,并在应用变为孤儿进程时终止它们,以避免引入更多问题。未来还可能引入更多方法。

ApplicationOperation 的实现通常基于集群管理器(如 Hadoop YARN、Kubernetes 等)提供的客户端或 API 构建。

目前,Kyuubi 已支持以下几种内置的应用操作:

  • JpsApplicationOperation:一种通过本地进程管理应用的操作,例如本地模式的 Spark 应用
  • YarnApplicationOperation:一种通过 Hadoop Yarn 集群管理应用的操作,例如运行在 Yarn 上的 Spark 应用
  • KubernetesApplicationOperation:一种通过 k8s 集群管理应用的操作,例如运行在 k8s 上的 Spark 应用

除了这些内置实现之外,Kyuubi 还支持通过 Java ServiceLoader (SPI) 加载自定义的 ApplicationOperation,以支持额外的集群管理器。

本文其余部分将介绍构建和启用自定义操作的规范与步骤。

trait ApplicationOperation {

/**

  • 初始化实例的步骤。
    */
    def initialize(conf: KyuubiConf): Unit

/**

  • 清理实例的步骤
    */
    def stop(): Unit

/**

  • 在其他方法之前调用,用于快速跳过
  • @param clusterManager 底层的集群管理器或本地实例
    */
    def isSupported(clusterManager: Option[String]): Boolean

/**

  • 通过唯一的应用标签终止应用/引擎
  • @param tag 引擎实例的唯一应用标签。
  •        例如,
  •        如果使用 Hadoop Yarn,对于 Spark 应用,
  •        该标签将通过 spark.yarn.tags 预设
  • @return 包含描述终止过程响应信息的消息。
  • @note 对于实现类,请抑制异常并始终返回 KillResponse
    */
    def killApplicationByTag(tag: String): KillResponse

/**

  • 通过唯一的应用标签获取引擎/应用状态
  • @param tag 引擎实例的唯一应用标签。
  • @return ApplicationInfo
    */
    def getApplicationInfoByTag(tag: String): ApplicationInfo
    }

    /**

  • (是否已终止,提示信息)
    */
    type KillResponse = (Boolean, String)

ApplicationInfo 用于表示应用信息,包括应用 id、名称、状态、URL 地址和错误消息。

object ApplicationState extends Enumeration {
  type ApplicationState = Value
  val PENDING, RUNNING, FINISHED, KILLED, FAILED, ZOMBIE, NOT_FOUND, UNKNOWN = Value
}

case class ApplicationInfo(
id: String,
name: String,
state: ApplicationState,
url: Option[String] = None,
error: Option[String] = None)

关于应用状态的映射,你可以参考 yarn 的实现:

def toApplicationState(state: YarnApplicationState): ApplicationState = state match {
  case YarnApplicationState.NEW => ApplicationState.PENDING
  case YarnApplicationState.NEW_SAVING => ApplicationState.PENDING
  case YarnApplicationState.SUBMITTED => ApplicationState.PENDING
  case YarnApplicationState.ACCEPTED => ApplicationState.PENDING
  case YarnApplicationState.RUNNING => ApplicationState.RUNNING
  case YarnApplicationState.FINISHED => ApplicationState.FINISHED
  case YarnApplicationState.FAILED => ApplicationState.FAILED
  case YarnApplicationState.KILLED => ApplicationState.KILLED
  case _ =>
    warn(s"The yarn driver state: $state is not supported, " +
      "mark the application state as UNKNOWN.")
    ApplicationState.UNKNOWN
}

构建自定义应用操作

  • 引用 kyuubi-server

    <dependency>
       <groupId>org.apache.kyuubi</groupId>
       <artifactId>kyuubi-server_2.12</artifactId>
       <version>1.5.2-incubating</version>
       <scope>provided</scope>
    </dependency>
  • 创建一个实现了 org.apache.kyuubi.engine.ApplicationOperation 的自定义类。

  • 创建一个 META-INF.services 目录,并在其中创建一个名为 org.apache.kyuubi.engine.ApplicationOperation 的文件:

    META-INF.services/org.apache.kyuubi.engine.ApplicationOperation

    然后将你的自定义应用操作的完全限定类名添加到该文件中。

启用自定义应用操作

注意

Kyuubi 使用 Java SPI 加载自定义的应用操作

  • 编译并将 jar 包放入 $KYUUBI_HOME/jars

评论

登录后参与评论

正在加载评论…