Yarn Service
一个容器编排平台,用于管理YARN上的容器化服务。它既支持docker容器,也支持传统的基于进程的容器。
https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/yarn-service/YarnServiceAPI.html#Examples
- 执行配置解析和挂载;
- 生命周期管理(如停止/启动/删除服务);
- 伸缩服务组件;
- 在YARN上滚动升级服务;
- 监控服务的健康和就绪情况等等。
提供 Json 配置文件,来运行Long Time Service,不需要写复杂的AM。
- 一个核心框架(AM)扮演容器编排,负责所有的服务的生命周期管理。
- RESTful服务器用于用户交互 ,部署、管理服务。
- DNS服务依赖YARN Service Registry允许发现服务。
配置
yarn-site.xml
<property>
<description>
Enable services rest api on ResourceManager.
</description>
<name>yarn.webapp.api-service.enable</name>
<value>true</value>
</property>
CLI
# 启动一个Service,对于当前用户,SERVICE_NAME必须唯一
$ yarn app -launch ${SERVICE_NAME} ${PATH_TO_SERVICE_DEFINE_FILE}
# 对Service的组件进行扩充/缩减,支持绝对值和相对值(+2, -2)
$ yarn app -flex ${SERVICE_NAME} -component ${COMPONENT_NAME} ${NUMBER_OF_CONTAINERS}
# 停止服务
$ yarn app -stop ${SERVICE_NAME}
# 重启一个停掉的服务
$ yarn app -start ${SERVICE_NAME}
# 删掉服务(会删除HDFS该服务的目录以及Yarn Service Registry记录
$ yarn app -destroy ${SERVICE_NAME}
Restful API
见官网 http://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/yarn-service/QuickStart.html#Manage_services_on_YARN_via_REST_API
服务注册(Service Registry)TODO
服务发现(Service Discovery)
DNS Server 的 DNS lookup 实现 Yarn 上的服务发现,比如HBase集群部署在Yarn上时的master-region通信。
- container分配的节点是随机的,在创建时无法指定master/region在哪个节点,因此需要一种规范机制。
框架的AM会将Container的信息(如hostname和ip)注册到Yarn Service Registry,DNS Server将Yarn Service Registry中的信息转换成DNS record,Client就可以通过标准的DNS查询发现container的ip信息。
- 对于非Docker容器,支持forward DNS lookup,不支持 reverse DNS lookup;
- 对于Docker容器,支持forward DNS lookup 和 reverse DNS lookup;
- 此外,DNS支持配置 static zone files 进行 forward和reverse lookup;
配置(TODO-Registry DNS)
系统服务
系统服务是管理员配置的服务,在ResourceManager的bootstrap过程中自动部署。
YarnFiles配置文件存储:${yarn.service.system-service.dir}/<Launch-Mode>/<Users>/<Yarnfiles>
- Launch-Mode 分为
sync和async; - Users 指的操作系统用户;
- Yarnfiles指的是配置文件,必须是以
.yarnfile结尾;
使用
配置文件
sleeper.json
{
"name": "sleeper-service",
"version": "1.0",
"components" :
[
{
"name": "sleeper",
"number_of_containers": 1,
"launch_command": "sleep 900000",
"resource": {
"cpus": 1,
"memory": "256"
},
"configuration": {
"properties": {
"yarn.service.container-health-threshold.percent": "90",
"yarn.service.container-health-threshold.window-secs": "400",
"yarn.service.container-health-threshold.init-delay-secs": "800"
}
}
}
]
}
启动