快速入门

本文档介绍如何使用 YARN 服务框架在 YARN 上部署服务。

配置并启动 HDFS 和 YARN 组件

像往常一样启动 HDFS 和 YARN 的所有 Hadoop 组件。要启用 YARN 服务框架,请将此属性添加到 yarn-site.xml 并重新启动 ResourceManager 或在启动 ResourceManager 之前设置该属性。通过 CLI 或 REST API 使用 YARN 服务框架需要此属性。

  <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-sleepersleeper 服务。

yarn app -launch my-sleeper sleeper

有关使用 YARN 服务框架启动基于 Docker 的服务,请参阅 API 文档

通过 CLI 在 YARN 上管理服务

以下步骤将指导你使用 CLI 在 YARN 上部署服务。有关命令和选项的完整列表,请参阅 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

调整命令中的 ${NUMBER_OF_CONTAINERS} 也支持相对更改,例如 +2 或 -2。

停止服务

停止服务将停止该服务的全部容器和 ApplicationMaster,但不会删除服务的 state,例如 hdfs 上的服务根文件夹。

yarn app -stop ${SERVICE_NAME}

重新启动已停止的服务

重新启动已停止的服务很容易 - 只需调用 start!

yarn app -start ${SERVICE_NAME}

销毁服务

除了停止服务外,它还将删除 hdfs 上的服务根文件夹和 YARN 服务注册表中的记录。

yarn app -destroy ${SERVICE_NAME}

通过 REST API 在 YARN 上管理服务

yarn.webapp.api-service.enable 设置为 true 时,YARN API 服务器 REST API 作为 ResourceManager 的一部分被激活。

服务可以通过 ResourceManager Web 端点在 YARN 上部署。

有关详细的 API 规范,请参阅 API 文档

部署服务

将上述示例服务定义 POST 到 ResourceManager api-server 端点

POST  http://localhost:8088/app/v1/services

获取服务状态

GET  http://localhost:8088/app/v1/services/${SERVICE_NAME}

调整服务组件

PUT  http://localhost:8088/app/v1/services/${SERVICE_NAME}/components/${COMPONENT_NAME}

PUT 请求正文

{
    "name": "${COMPONENT_NAME}",
    "number_of_containers": ${COUNT}
}

例如

{
    "name": "sleeper",
    "number_of_containers": 2
}

停止服务

停止服务将停止该服务的全部容器和 ApplicationMaster,但不会删除服务的 state,例如 hdfs 上的服务根文件夹。

PUT  http://localhost:8088/app/v1/services/${SERVICE_NAME}

PUT 请求正文

{
  "name": "${SERVICE_NAME}",
  "state": "STOPPED"
}

重新启动已停止的服务

重新启动已停止的服务非常容易。

PUT  http://localhost:8088/app/v1/services/${SERVICE_NAME}

PUT 请求正文

{
  "name": "${SERVICE_NAME}",
  "state": "STARTED"
}

销毁服务

除了停止服务外,它还将删除 hdfs 上的服务根文件夹和 YARN 服务注册表中的记录。

DELETE  http://localhost:8088/app/v1/services/${SERVICE_NAME}

使用 YARN UI2 和 Timeline Service v2 的服务 UI

YARN UI2 中添加了一个新的 service 选项卡,专门用于以一流的方式显示 YARN 服务。服务框架将数据发布到 TimelineService,而 service UI 从 TimelineService 读取数据以呈现其内容。

启用 Timeline Service v2

有关如何启用 Timeline Service v2,请参阅 TimeLineService v2 文档

启用新的 YARN UI

yarn-site.xml 中设置以下配置并启动 ResourceManager。如果您从源代码构建,请确保在 mvn 命令中使用 -Pyarn-ui - 这将为新的 YARN UI 生成 war 文件。

  <property>
    <description>To enable RM web ui2 application.</description>
    <name>yarn.webapp.ui2.enable</name>
    <value>true</value>
  </property>

使用安全性运行

YARN 服务框架支持在安全(kerberized)环境中运行。用户在启动服务时需要指定 kerberos 主体名称和 keytab。例如,典型的配置如下所示

{
  "name": "sample-service",
  ...
  ...
  "kerberos_principal" : {
    "principal_name" : "hdfs-demo/[email protected]",
    "keytab" : "file:///etc/security/keytabs/hdfs.headless.keytab"
  }
}

请注意,principal_name 字段中需要 _HOST,因为 Hadoop 客户端验证服务器(在本例中为 AM)的主体在与服务器通信时是否存在主机名。* principal_name:启动服务的用户的本机名称 * keytab:keytab 的 URI。目前仅支持存在于裸机主机上的文件。* URI 以 file:// 开头 - 存储 keytab 的本地主机上的路径。假设管理员在 AM 启动之前预先在本地主机上安装了 keytab。

使用 Docker 运行

上述示例仅适用于基于非 Docker 容器的服务。YARN 服务框架还提供了一流的支持来管理基于 Docker 的服务。管理基于 Docker 的服务的大多数步骤都是相同的,只是在 Docker 中组件的 Artifact 类型为 DOCKER,而 Artifact id 是 Docker 镜像的名称。有关如何在 YARN 上设置 Docker 的详细信息,请查看 YARN 上的 Docker

有了 Docker 支持,它还开辟了一系列新的可能性来实现功能,例如使用 DNS 在 YARN 上发现服务容器。有关更多详细信息,请查看 ServiceDiscovery