• Hadoop 3.1.1


    快速开始

    本文描述了如何用 Yarn 服务框架在 Yarn 上部署服务。

    配置和启动 HDFS 和 Yarn 组件

    首先启动 HDFS 和 Yarn 的各个组件。为启用 Yarn 服务框架,添加以下参数到 yarn-site.xml 文件中并重启 ResourceManager,或在 ResourceManager 启动前就设置号。该参数是启用 Yarn 服务框架的 CLI 和 REST API 所必需的。

    <property>
      <description>
        在 ResourceManager 启用 Yarn 服务框架的 REST API。
      </description>
      <name>yarn.webapp.api-service.enable</name>
      <value>true</value>
    </property>

    示例服务

    以下是一个简单的服务定义,它通过一个简单的说明文件在 Yarn 上启动容器执行睡眠命令,整个过程无需写任何代码。

    {
      "name": "sleeper-service",
      "components" : 
        [
          {
            "name": "sleeper",
            "number_of_containers": 1,
            "launch_command": "sleep 900000",
            "resource": {
              "cpus": 1, 
              "memory": "256"
           }
          }
        ]
    }

    执行以下命令,用户可以简单地运行一个预先提供的样例服务:

    yarn app -launch <service-name> <example-name>

    举例来说,以下命令在 Yarn 上启动了一个 sleeper 服务并命名为 my-sleeper。

    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,但不会删除服务的状态,如在 HDFS 上的服务的根目录。

    yarn app -stop ${SERVICE_NAME}

    重启一个停止的服务

    重启一个停止的服务非常容易,只需调用启动命令!

    yarn app -start ${SERVICE_NAME}

    销毁一个服务

    在停止服务之外,它还会删除该服务在 HDFS 上的根目录以及在 Yarn Service Registry 里的记录。

    yarn app -destroy ${SERVICE_NAME}

    通过 REST API 管理 Yarn 上的服务

    当 yarn.webapp.api-service.enable 为 true时,YARN API Server REST API 作为 ResourceManager 的一部分被激活。

    可以通过 ResourceManager 的网络入口在 Yarn 上部署服务。

    参阅 API 文档以获得更多 API 说明。

    部署一个服务

    POST 提交前面提供的样例服务的定义到 ResourceManager API 服务入口:

    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,但不会删除服务的状态,如在 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 Service Registry 里的记录。

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

    嵌入 Yarn UI2 的 Service UI 和 Timeline Service v2

    一个新的 service 分页加入了 Yarn UI2 以最佳地展示所有的 Yarn 服务。服务框架会把数据写到 TimelineService,而 service UI 从 TimelineService 读取数据并渲染网页内容。

    启用 Timeline Service v2

    请参阅 TimeLineService v2 文档以了解如何启用 Timeline Service v2。

    启用新的 Yarn UI

    在 yarn-site.xml 中设置如下参数并启动 ResourceManager。如果你从源码编译 Hadoop,请确保你在 mvn 命令里添加了 -Pyarn-ui 选项,这将为新的 Yarn UI 生成 war 文件。

    <property>
      <description>启用 ResourceManager UI2 网页程序。</description>
      <name>yarn.webapp.ui2.enable</name>
      <value>true</value>
    </property>

    安全地运行

    Yarn 服务框架支持在一个安全环境(Kerbose)运行服务。在启动服务时,用户需要提供 Kerbose 主体名和密钥表。一个典型的配置文件如下:

    {
      "name": "sample-service",
      ...
      ...
      "kerberos_principal" : {
        "principal_name" : "hdfs-demo/_HOST@EXAMPLE.COM",
        "keytab" : "file:///etc/security/keytabs/hdfs.headless.keytab"
      }
    }

    特别注意,_HOST 在 principal_name 字段里是必需的,因为 Hadoop 客户端会验证服务器(此处指 ApplicationMaster)的凭证,其中包含了主机名。principal_name 是启动服务的主体名。keytab 是密钥表的路径,当前只支持裸机上的文件,URI 以 file:// 为前缀。管理员应该在 ApplicationMaster 启动前就预先安装了密钥表到该主机。

    用 Docker 运行

    上述示例主要围绕非基于 Docker 容器的服务。Yarn 服务框架同样为基于 Docker 的服务提供了一流的支持。管理基于 Docker 的服务的大部分步骤和上述是一样的,唯一区别是对于一个组件,Artifact 类型是 DOCKER 且其 id 是 Docker 镜像的名称。要了解如何在 Yarn 上运行 Docker 的细节,请参阅在 Yarn 上运行 Docker

    在 Docker 的支持下,更多的功能可以被提供,比如用 DNS 发现 Yarn 上提供服务的容器。更多细节请参阅服务发现

  • 相关阅读:
    6-Python爬虫-分布式爬虫/Redis
    ES 查询时 排序报错(fielddata is disabled on text fileds by default ... )解决方法
    Intellij Idea webstorm 激活
    Intellij Idea 配置jdk
    java 获取(格式化)日期格式
    js 跳转 XSS漏洞 预防
    CSS去掉背景颜色
    js对象无法当成参数传递 解决方法
    Elasticsearch java api
    java多条件查询SQL语句拼接的小技巧
  • 原文地址:https://www.cnblogs.com/shishaochen/p/9657008.html
Copyright © 2020-2023  润新知