概述
Yarn Service 框架提供了一个类来支持和 API 来在 Yarn 中本地托管长期运行的服务。简而言之,它是一个容器编排平台,用于管理 YARN 上的容器化服务。它既支持 docker 容器,也支持传统的基于进程的容器。
该框架的职责包括执行配置解析和挂载、生命周期管理(如停止/启动/删除服务)、伸缩服务组件、在 YARN 上滚动升级服务、监控服务的健康和就绪情况等等。
yarn-service 框架主要包括以下组件:
- 运行在 YARN 上的核心框架(ApplicationMaster),作为容器协调器,负责所有服务生命周期管理。
- 一个 restful API-server,用户可以通过一个简单的 JSON 规范与 YARN 交互,部署/管理他们的服务。
- 由 YARN 服务注册表支持的 DNS 服务器,可通过标准的 DNS 查找在 YARN 上发现服务。
为啥要用
YARN Service 框架使得将现有服务导入 YARN 变得很容易。它隐藏了应用程序管理的所有复杂的底层细节,使用户不必被迫编写新代码。新服务的开发人员不必担心 YARN 的内部问题,只需要专注于服务的容器化。
此外,该特性的另一个巨大优势是,可以在单一平台上同时启用传统的批处理作业和长时间运行的服务!组合这些工作负载的好处有两个:
- 极大地简化了集群操作,因为只需要处理一个集群。
- 让批作业和服务共享一个集群可以极大地提高资源利用率。
怎么用
该特性处于 alpha (未验收测试)状态,因此 api、命令行可能会发生变化。
配置并启动HDFS和YARN组件
添加以下配置到 yarn-site.xml 中,通过CLI或REST API使用YARN Service框架需要这个配置。
<property>
<description>
Enable services rest api on ResourceManager.
</description>
<name>yarn.webapp.api-service.enable</name>
<value>true</value>
</property>
样例
下面是一个简单的服务定义,它通过编写一个简单的规范文件在YARN上启动容器,而不需要编写任何代码。
{
"name": "sleeper-service",
"version": "1.0",
"components" :
[
{
"name": "sleeper",
"number_of_containers": 1,
"launch_command": "sleep 900000",
"resource": {
"cpus": 1,
"memory": "256"
}
}
]
}
用户可以使用下面的命令简单地在YARN上运行一个预构建的示例服务:
yarn app -launch <service-name> <example-name>
下面的命令在YARN上启动一个名为my-sleeper的休眠服务。
yarn app -launch my-sleeper sleeper
通过 yarn cli 管理服务
下面的步骤将指导您使用CLI在YARN上部署服务。
部署服务
yarn app -launch ${SERVICE_NAME} ${PATH_TO_SERVICE_DEF_FILE}
参数
- SERVICE_NAME:服务的名称。请注意,对于当前用户运行的服务,这需要是唯一的。
- PATH_TO_SERVICE_DEF:JSON格式的服务定义文件的路径。
样例
yarn app -launch sleeper-service /path/to/local/sleeper.json
编辑服务组件
增加或减少组件的容器数量。
yarn app -flex ${SERVICE_NAME} -component ${COMPONENT_NAME} ${NUMBER_OF_CONTAINERS}
例如将名为 sleeper-service 的组件 sleeper 的容器数量改为2,绝对值。
yarn app -flex sleeper-service -component sleeper 2
flex命令中${NUMBER_OF_CONTAINERS}也支持相对更改,例如+2或-2。
停止、重启、销毁服务
yarn app -stop ${SERVICE_NAME}
yarn app -start ${SERVICE_NAME}
yarn app -destroy ${SERVICE_NAME}