管理针对额外集群管理器的应用程序
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
评论
登录后参与评论
KnowForge