Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

介绍

今天在YARN上提供新服务并非易事。现有框架的API级别太低(本机YARN),需要编写新代码(对于具有编程API的框架)或编写复杂的规范(对于声明性框架)。

此简化的REST API可用于创建和管理YARN服务的生命周期。在大多数情况下,应用程序所有者不会被迫对其应用程序进行任何更改。如果应用程序使用诸如Docker之类的容器化技术打包在一起,那么这首先是正确的。

本文档介绍了用于在YARN上部署/管理容器化服务的API规范(也称为YarnFile)。REST API和CLI可以使用相同的JSON规范来管理服务。

版本信息

版本:1.0.0

许可证信息

许可证:Apache 2.0许可证URL:http : //www.apache.org/licenses/LICENSE-2.0.html

URI方案

主持人:host.mycompany.com

端口:8088(默认RM端口)

方案:HTTP

消耗

  • 应用程序/ json

产生

  • 应用程序/ json

路径

创建服务

POST / app / v1 / services

描述

创建服务。请求JSON是一个服务对象,其中包含创建所需的详细信息。如果请求成功,则返回202 Accepted。此API的成功仅确认提交服务创建请求的成功。无法保证该服务将实际上达到RUNNING状态。资源可用性和其他因素决定了是否将服务部署在群集中。期望客户端随后会调用GET API以获取服务的详细信息并确定其状态。

参量

类型 名称 描述 需要 架构图 默认
身体参数 服务 服务请求对象 真正 服务

回应

HTTP代码 描述 架构图
202 接受创建服务的请求 无内容
400 请求正文中提供的服务定义无效 无内容
500 创建服务失败 无内容
默认 意外的错误 服务状态

(TBD)集群中运行的服务列表。

GET / app / v1 / services

描述

获取所有当前正在运行的服务的列表(响应包括对服务信息的最小预测)。有关更多详细信息,请对特定服务名称执行GET。

回应

HTTP代码 描述 架构图
200 一系列服务 服务阵列
默认 意外的错误 服务状态

获取API服务器的当前版本。

GET / app / v1 / services / version

描述

获取API服务器的当前版本。

回应

HTTP代码 描述 架构图
200 成功请求 无内容

更新服务或升级正在运行的服务的组件的二进制版本

PUT / app / v1 / services / {service_name}

描述

更新服务的运行时属性。当前支持以下操作-更新生存期,停止/启动服务。PUT操作还用于将服务容器升级到其工件(TBD)的较新版本。

参量

类型 名称 描述 需要 架构图 默认
路径参数 服务名称 服务名称 真正
身体参数 服务 更新的服务定义。它可以包含服务的更新寿命或服务的期望状态(已停止/已启动),以针对指定服务启动启动/停止操作 真正 服务

回应

HTTP代码 描述 架构图
204 更新或升级成功 无内容
404 服务不存在 无内容
默认 意外的错误 服务状态

获取服务的详细信息。

GET / app / v1 / services / {service_name}

描述

返回正在运行的服务的详细信息(包括容器)

参量

类型 名称 描述 需要 架构图 默认
路径参数 服务名称 服务名称 真正

回应

HTTP代码 描述 架构图
200 服务对象 宾语
404 服务不存在 无内容
默认 意外的错误 服务状态

销毁服务

删除/ app / v1 / services / {service_name}

描述

销毁服务并释放所有资源。此API可能必须返回提供日志位置(TBD)等的JSON数据。

参量

类型 名称 描述 需要 架构图 默认
路径参数 服务名称 服务名称 真正

回应

HTTP代码 描述 架构图
204 销毁成功 无内容
404 服务不存在 无内容
默认 意外的错误 服务状态

扩展组件的实例数。

PUT / app / v1 / services / {service_name} / components / {component_name}

描述

设置组件的所需实例数

参量

类型 名称 描述 需要 架构图 默认
路径参数 服务名称 服务名称 真正
路径参数 component_name 组件名称 真正
身体参数 零件 包含更新的实例数的组件的定义。 真正 零件

回应

HTTP代码 描述 架构图
200 Flex成功 无内容
404 服务不存在 无内容
默认 意外的错误 服务状态

定义

神器

服务组件的工件。如果未指定,组件将仅运行光头启动命令,并且不会本地化任何工件。

名称 描述 需要 架构图 默认
ID 工件ID。示例包括用于基于tarball的服务的软件包位置uri,用于docker的映像名称,服务名称等。 真正
类型 工件类型,例如docker,tarball等(可选)。对于TARBALL类型,指定的tarball将被本地化到名为lib的文件夹下的容器本地工作目录。对于SERVICE类型,将读取指定的服务,并将其组件添加到该服务中。工件类型为SERVICE的原始组件将被删除(原始组件中指定的任何属性都将被忽略)。 枚举(DOCKER,TARBALL,SERVICE) DOCKER
乌里 工件位置以支持多个工件存储(可选)。

零件

服务的一个或多个组件。如果说服务是HBase,则该组件可以是简单角色,例如master或regionserver。如果该服务是复杂的业务Web应用程序,则组件可以是其他服务,例如Kafka或Storm。从而打开了对复杂和嵌套服务的支持。

名称 描述 需要 架构图 默认
名称 服务组件的名称(强制性)。如果启用了注册表DNS,则最大长度为44个字符。 真正
组件的状态 ComponentState
依存关系 在可以启动此组件之前,应处于READY状态(由就绪检查定义)的服务组件的数组。服务所有组件之间的依赖关系应表示为DAG。 字符串数组
准备情况检查 此组件的准备情况检查。 准备情况检查
神器 组件的工件(可选)。如果未指定,则服务级别全局工件生效。 神器
launch_command 该组件的自定义启动命令(对于DOCKER组件是可选的,否则是必需的)。在组件级别指定时,它将覆盖在全局级别指定的值(如果有)。如果docker image支持ENTRYPOINT,则launch_command用逗号(,)而不是空格定界。
资源 该组件的资源(可选)。如果未指定,则服务级别全局资源生效。 资源资源
容器数 该组件的容器数(可选)。如果未指定,则服务级别全局number_of_containers生效。 整数(int64)
decommissioned_instances 退役的组件实例列表。 字符串数组
货柜 启动组件的容器。为POST有效负载指定此属性的值会引发验证错误。此Blob仅在已启动服务的GET响应中可用。 容器阵列
run_privileged_container 在特权模式(YARN-4262)中运行此组件的所有容器。 布尔值
placement_policy 此组件所有容器的高级计划和放置策略。 刊登位置政策
组态 此组件的配置属性。 组态
快速链接 在服务级别定义的快速链接键的列表,此组件将对其进行解析。 字符串数组
restart_policy 重新启动组件的策略。包括总是(总是重启
组件,即使实例退出代码= 0);ON_FAILURE(如果实例退出代码!= 0,则仅重新启动组件);永远不要(在任何情况下都不要重启)。具有restart_policy = ON_FAILURE / NEVER的组件不支持伸缩 总是

ComponentState

组件的状态

名称 描述 需要 架构图 默认
组件状态的枚举 枚举(INIT,FLEXING,稳定,升级)

配置文件

需要在服务组件容器中创建一个配置文件并将其作为卷使用。

名称 描述 需要 架构图 默认
类型 标准格式的配置文件,例如xml,属性,json,yaml,模板或静态/归档资源文件。如果指定了静态/归档类型,则必须在启动作业之前将文件上传到远程文件系统,并且YARN服务框架将在启动容器之前对文件进行本地化。存档文件在本地化过程中被解包 枚举(XML,PROPERITY,JSON,YAML,TEMPLATE,HADOOP_XML,STATIC,ARCHIVE)
dest_file 该配置文件的创建路径。如果它是绝对路径,它将被安装到DOCKER容器中。绝对路径仅适用于DOCKER容器。如果它是相对路径,则仅应提供文件名,并且将在容器本地工作目录中名为conf的文件夹下为静态/归档以外的所有类型创建文件。对于静态/归档资源类型,这些文件位于资源目​​录下。
src_file 这提供了配置文件的源位置,配置文件的内容以type中指定的格式转储到dest_file后属性替换中。通常,src_file指向由诸如puppet,chef或hdfs等工具维护的源代码控制的网络可访问文件。当前仅支持hdfs。
属性 键值对的Blob,将以type中指定的格式转储到dest_file中。如果指定了src_file,则src_file内容将转储到dest_file中,并且这些属性将覆盖src_file中的现有属性(如果有),或作为src_file中的新属性添加。 宾语

组态

可以通过env,文件和自定义可插拔助手docker容器注入服务组件的配置属性集。将支持多种标准格式的文件,例如xml,属性,json,yaml和模板。

名称 描述 需要 架构图 默认
属性 键值对的Blob,用于配置YARN服务AM。 宾语
环保 键值对的Blob,将附加到默认系统属性并在启动时移交给服务。在注入之前,将替换所有对属性的占位符。 宾语
档案 需要创建的文件列表列表,这些文件列表可以作为卷在服务组件容器中使用。 ConfigFile数组

容器

正在运行的服务容器的实例。

名称 描述 需要 架构图 默认
ID 正在运行的服务的唯一容器ID,例如container_e3751_1458061340047_0008_01_000002。
发射时间 容器创建的时间,例如2016-03-16T01:01:49.000Z。这很可能与群集启动时间不同。 字符串(日期)
ip 正在运行的容器的IP地址,例如172.31.42.141。IP地址和主机名属性值取决于YARN-4007的群集/泊坞窗网络设置。
主机名 正在运行的容器的标准主机名,例如ctr-e3751-1458061340047-0008-01-000002.examplestg.site。IP地址和主机名属性值取决于YARN-4007的群集/泊坞窗网络设置。
主机 运行容器的裸节点或主机,例如cn008.example.com。
服务容器的状态。 容器状态
component_instance_name 该容器实例所属的组件实例的名称。组件实例名称被命名为$ COMPONENT_NAME-i,其中i是单调递增的整数。例如,一个名为nginx的组件可以具有多个名为nginx-0,nginx-1等的组件实例。每个组件实例都由一个容器实例支持。
资源 用于此容器的资源。 资源资源
神器 用于此容器的工件。 神器
privileged_container 容器是否以特权模式运行。 布尔值

容器状态

服务容器的当前状态。

名称 描述 需要 架构图 默认
容器状态的枚举 枚举(INIT,START,READY)

Kerberos主体

启动服务的用户的kerberos主体信息。

名称 描述 需要 架构图 默认
委托人名称 启动服务的用户的主体名称。请注意,principal_name字段(例如testuser/_HOST@EXAMPLE.COM)中需要_HOST,因为Hadoop客户端会在与服务器通信时验证服务器(在这种情况下,AM的)主体具有主机名。
键表 kerberos keytab的URI。当前仅支持裸主机上存在的文件。URI以“ file://”开头-本地主机上存储密钥表的路径。假定管理员在AM启动之前将密钥表预先安装在本地主机上。

放置约束

放置约束详细信息。

名称 描述 需要 架构图 默认
名称 与此约束关联的可选名称。
类型 展示位置的类型。 真正 PlacementType
范围 安置范围。 真正 放置范围
target_tags 该组件的放置策略所依赖的组件的名称将作为目标标记添加。因此,出于亲和力,此组件的容器要求放置在运行目标标签组件的容器的主机上。目标标签也可以包含该组件的名称,在这种情况下,这意味着对于反亲和力,在主机上最多可以放置一个该组件的容器。类似地,对于基数,这意味着该组件的容器正在请求放置在至少运行minCardinality但不超过目标标签组件的maxCardinality容器的主机上。 字符串数组
node_attributes 节点属性是与节点关联的一组key:value对。 宾语
node_partitions 可以运行此组件的容器的节点分区。 字符串数组
最小基数 当放置类型为基数时,主机应具有的依赖组件的最小容器数,可以在该容器上分配该组件的容器。 整数(int64)
max_cardinality 当放置类型为基数时,主机应具有的依赖组件的最大容器数,可以在该容器上分配该组件的容器。 整数(int64)

刊登位置政策

服务组件的高级放置策略。

名称 描述 需要 架构图 默认
约束 放置约束详细信息。 真正 PlacementConstraint数组

放置范围

组件容器的放置范围。

名称 描述 需要 架构图 默认
类型 枚举(节点,机架)

PlacementType

放置类型-与另一组件的容器或同一组件(自身)的容器的亲和力/反亲和力/基数亲和力。

名称 描述 需要 架构图 默认
类型 枚举(AFFINITY,ANTI_AFFINITY,AFFINITY_WITH_CARDINALITY)

准备情况检查

要执行的检查以确定组件实例(容器)的准备情况。如果未指定准备情况检查,则将使用默认的准备情况检查,除非在组件或全局级别将yarn.service.default-readiness-check.enabled配置属性设置为false。当前不支持构件字段,但可能会在将来实现,从而使可插入的帮助容器能够支持高级用例。

名称 描述 需要 架构图 默认
类型 DEFAULT(AM检查容器是否具有IP并有选择地对容器主机名执行DNS查找),HTTP(AM执行默认检查并向容器发送REST调用并期望响应代码在200到299之间)或PORT (AM执行默认检查,并尝试在指定端口上打开与容器的套接字连接)。 真正 枚举(默认,HTTP,端口)
属性 键值对的Blob,将用于配置检查。 宾语
神器 可插拔的就绪检查辅助容器的伪像(可选)。如果指定,则此帮助容器通常托管http uri并封装执行实际容器准备情况检查所需的复杂脚本。最终,像简化的用例一样,预期将响应204 No content。这个可插入的框架使服务所有者受益,他们可以在不进行任何包装修改的情况下运行服务。注意,目前仅支持类型为docker的工件。尚未实施 神器

资源资源

资源确定容器可用的资源量(vcore,内存,网络等)。此字段确定要应用于组件或服务的所有容器的资源。在服务(或全局)级别指定的资源可以在组件级别覆盖。仅配置文件或CPU和内存之一。否则会引发验证异常。

名称 描述 需要 架构图 默认
轮廓 每个资源配置文件都有一个唯一的ID,该ID与群集级别的预定义内存,CPU等相关联。
中央处理器 分配给每个容器的vcore数量(可选,但如果指定,将覆盖配置文件中的cpus)。 整数(int32)
记忆 分配给每个容器的内存量(可选,但如果指定,将覆盖配置文件中的内存)。当前仅接受整数值,默认单位为MB。
额外 资源类型名称到资源类型信息的映射。包括值(整数)和单位(字符串)。这将用于指定除cpu和内存以外的资源。请参考以下示例。 宾语

资源信息

ResourceInformation除了确定内存和vcore之外,还确定资源类型的单位/值。它将是Resource对象的一部分。

名称 描述 需要 架构图 默认
资源的整数值。 整数(int64)
单元 资源单位,可接受的值为-p / n / u / m / k / M / G / T / P / Ki / Mi / Gi / Ti / Pi。默认情况下为空意味着没有单位。

服务

服务资源具有以下属性。

名称 描述 需要 架构图 默认
名称 唯一的服务名称。如果启用了注册表DNS,则最大长度为63个字符。 真正
服务的版本。 真正
描述 服务说明。
ID 唯一的服务ID。
神器 服务所有组件的默认工件,但工件类型设置为SERVICE的组件除外(可选)。 神器
资源 服务所有组件的默认资源(可选)。 资源资源
发射时间 创建服务的时间,例如2016-03-16T01:01:49.000Z。 字符串(日期)
number_of_running_containers 在获取响应时,它提供了请求时此服务(所有组件)的运行容器总数。请注意,当分配了更多容器时,后续请求可以返回不同的数字,直到达到容器总数为止,或者两个请求之间都发出了弹性请求。 整数(int64)
一生 服务到达STARTED状态(此状态由YARN自动销毁)之后的生命周期(以秒为单位)。对于无限的生命周期,请勿设置生命周期值。 整数(int64)
组件 服务的组成部分。 组件数组
组态 服务的配置属性。服务/全局级别提供的配置可用于所有组件。特定属性可以在组件级别覆盖。 组态
服务状态。为PUT有效负载指定此属性的值意味着将服务更新到此所需状态。 服务状态
快速链接 要为服务导出的快速链接的键值对的Blob。 宾语
队列 该服务应提交到的YARN队列。
kerberos_principal 启动服务的用户的主要信息 Kerberos主体
docker_client_config 包含Docker客户端配置的文件的URI(例如hdfs:///tmp/config.json
依存关系 该服务所依赖的服务名称的列表。 字符串数组

服务状态

服务的当前状态。

名称 描述 需要 架构图 默认
服务状态的枚举 枚举(接受,开始,稳定,停止,失败,弹性,升级)

服务状态

提交服务的当前状态,作为对GET API的响应返回。

名称 描述 需要 架构图 默认
诊断 基于服务当前状态的诊断信息(如果有)。如果服务处于非运行状态,则它通常具有非null值。
服务状态。 服务状态
特定于场景的错误代码,除了诊断信息之外,服务所有者还应该能够使用该错误代码来理解故障。 整数(int32)

例子

使用大多数属性值作为默认值创建一个简单的单组件服务

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

POST请求JSON

{
  “ name”:“ hello-world”,
  “ version”:“ 1.0.0”,
  “ description”:“ hello world example”,
  “组件” :
    [
      {
        “ name”:“ hello”,
        “容器数”:2
        “工件”:{
          “ id”:“ nginx:latest”,
          “ type”:“ DOCKER”
        },
        “ launch_command”:“ ./start_nginx.sh”,
        “资源”:{
          “ cpus”:1
          “内存”:“ 256”
        }
      }
    ]
}

GET响应JSON

GET URL-http:// localhost:8088 / app / v1 / services / hello-world

注意,生存期值为-1表示无限的生存期。

{
    “ name”:“ hello-world”,
    “ version”:“ 1.0.0”,
    “ description”:“ hello world example”,
    “ id”:“ application_1503963985568_0002”,
    “寿命”:-1,
    “ state”:“ STABLE”,
    “组件”: [
        {
            “ name”:“ hello”,
            “ state”:“ STABLE”,
            “资源”:{
                “ cpus”:1
                “内存”:“ 256”
            },
            “配置”:{
                “属性”:{},
                “ env”:{},
                “文件”:[]
            },
            “快速链接”: [],
            “容器”:[
                {
                    “ id”:“ container_e03_1503963985568_0002_01_000002”,
                    “ ip”:“ 10.22.8.143”,
                    “主机名”:“ ctr-e03-1503963985568-0002-01-000002.example.site”,
                    “ state”:“ READY”,
                    “启动时间”:1504051512412,
                    “ bare_host”:“ host100.cloud.com”,
                    “ component_instance_name”:“ hello-0”
                },
                {
                    “ id”:“ container_e03_1503963985568_0002_01_000003”,
                    “ ip”:“ 10.22.8.144”,
                    “主机名”:“ ctr-e03-1503963985568-0002-01-000003.example.site”,
                    “ state”:“ READY”,
                    “启动时间”:1504051536450,
                    “ bare_host”:“ host100.cloud.com”,
                    “ component_instance_name”:“ hello-1”
                }
            ],
            “ launch_command”:“ ./start_nginx.sh”,
            “容器数”:1
            “ run_privileged_container”:false
        }
    ],
    “配置”:{
        “属性”:{},
        “ env”:{},
        “文件”:[]
    },
    “快速链接”: {}
}

更新以修改服务的生命周期

放置网址-http:// localhost:8088 / app / v1 / services / hello-world

PUT请求JSON

请注意,无论当前生存期值是多少,此更新请求都会将服务的生存期设置为自提交请求之日起3600秒(1小时)。因此,如果某项服务的剩余寿命为5分钟(例如),并希望将其延长至一小时,或者如果某个应用程序的剩余寿命为5小时(例如,)并希望将其缩短至一小时,则对于两者您需要在下面提交相同的请求。

{
  “寿命”:3600
}

停止服务

放置网址-http:// localhost:8088 / app / v1 / services / hello-world

PUT请求JSON

{
  “ state”:“已停止”
}

开始服务

放置网址-http:// localhost:8088 / app / v1 / services / hello-world

PUT请求JSON

{
  “状态”:“开始”
}

更新以增加/减少服务组件的容器(实例)的数量

放置网址-http:// localhost:8088 / app / v1 / services / hello-world / components / hello

PUT请求JSON

{
  “容器数”:3
}

或者,您可以指定整个“组件”部分。

放置网址-http:// localhost:8088 / app / v1 / services / hello-world

PUT请求JSON

{
  “ state”:“ FLEX”,
  “组件” :
    [
      {
        “ name”:“ hello”,
        “容器数”:3
      }
    ]
}

销毁服务

删除网址-http:// localhost:8088 / app / v1 / services / hello-world

创建复杂的服务-HBase

POST URL-http:// localhost:8088:/ app / v1 / services / hbase-app-1

POST请求JSON

{
  “ name”:“ hbase-app-1”,
  “ version”:“ 1.0.0”,
  “ description”:“ hbase服务”,
  “寿命”:“ 3600”,
  “组件”: [
    {
      “ name”:“ hbasemaster”,
      “容器数”:1
      “工件”:{
        “ id”:“ hbase:latest”,
        “ type”:“ DOCKER”
      },
      “ launch_command”:“ / usr / hdp / current / hbase-master / bin / hbase主启动”,
      “资源”:{
        “ cpus”:1
        “内存”:“ 2048”
      },
      “配置”:{
        “ env”:{
          “ HBASE_LOG_DIR”:“ <LOG_DIR>”
        },
        “文件”:[
          {
            “ type”:“ XML”,
            “ dest_file”:“ /etc/hadoop/conf/core-site.xml”,
            “属性”:{
              “ fs.defaultFS”:“ $ {CLUSTER_FS_URI}”
            }
          },
          {
            “ type”:“ XML”,
            “ dest_file”:“ /etc/hbase/conf/hbase-site.xml”,
            “属性”:{
              “ hbase.cluster.distributed”:“ true”,
              “ hbase.zookeeper.quorum”:“ $ {CLUSTER_ZK_QUORUM}”,
              “ hbase.rootdir”:“ $ {SERVICE_HDFS_DIR} / hbase”,
              “ zookeeper.znode.parent”:“ $ {SERVICE_ZK_PATH}”,
              “ hbase.master.hostname”:“ hbasemaster。$ {SERVICE_NAME}。$ {USER}。$ {DOMAIN}”,
              “ hbase.master.info.port”:“ 16010”
            }
          }
        ]
      }
    },
    {
      “ name”:“ regionserver”,
      “容器数”:3,
      “工件”:{
        “ id”:“ hbase:latest”,
        “ type”:“ DOCKER”
      },
      “ launch_command”:“ / usr / hdp / current / hbase-regionserver / bin / hbase regionserver start”,
      “资源”:{
        “ cpus”:1
        “内存”:“ 2048”
      },
      “配置”:{
        “ env”:{
          “ HBASE_LOG_DIR”:“ <LOG_DIR>”
        },
        “文件”:[
          {
            “ type”:“ XML”,
            “ dest_file”:“ /etc/hadoop/conf/core-site.xml”,
            “属性”:{
              “ fs.defaultFS”:“ $ {CLUSTER_FS_URI}”
            }
          },
          {
            “ type”:“ XML”,
            “ dest_file”:“ /etc/hbase/conf/hbase-site.xml”,
            “属性”:{
              “ hbase.cluster.distributed”:“ true”,
              “ hbase.zookeeper.quorum”:“ $ {CLUSTER_ZK_QUORUM}”,
              “ hbase.rootdir”:“ $ {SERVICE_HDFS_DIR} / hbase”,
              “ zookeeper.znode.parent”:“ $ {SERVICE_ZK_PATH}”,
              “ hbase.master.hostname”:“ hbasemaster。$ {SERVICE_NAME}。$ {USER}。$ {DOMAIN}”,
              “ hbase.master.info.port”:“ 16010”,
              “ hbase.regionserver.hostname”:“ $ {COMPONENT_INSTANCE_NAME}。$ {SERVICE_NAME}。$ {USER}。$ {DOMAIN}”
            }
          }
        ]
      }
    }
  ],
  “快速链接”: {
    “ HBase主状态UI”:“ http://hbasemaster0.$ {SERVICE_NAME}。$ {USER}。$ {DOMAIN}:16010 / master-status”,
    “代理的HBase主状态UI”:“ http:// app-proxy / $ {DOMAIN} / $ {USER} / $ {SERVICE_NAME} / hbasemaster / 16010 /”
  }
}

创建一个服务,请求除CPU和RAM外的GPU

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

POST请求JSON

{
  “ name”:“ hello-world”,
  “ version”:“ 1.0.0”,
  “ description”:“带有GPU的Hello world示例”,
  “组件” :
    [
      {
        “ name”:“ hello”,
        “容器数”:2
        “工件”:{
          “ id”:“ nginx:latest”,
          “ type”:“ DOCKER”
        },
        “ launch_command”:“ ./start_nginx.sh”,
        “资源”:{
          “ cpus”:1
          “内存”:“ 256”,
          “其他”:{
            “ yarn.io/gpu”:{
              “值”:4
              “ unit”:“”
            }
          }
        }
      }
    ]
}

使用请求反相似性放置策略的组件创建服务

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

POST请求JSON

{
  “ name”:“ hello-world”,
  “ version”:“ 1.0.0”,
  “ description”:“具有反亲和性的Hello世界示例”,
  “组件” :
    [
      {
        “ name”:“ hello”,
        “容器数”:3,
        “工件”:{
          “ id”:“ nginx:latest”,
          “ type”:“ DOCKER”
        },
        “ launch_command”:“ ./start_nginx.sh”,
        “资源”:{
          “ cpus”:1
          “内存”:“ 256”
        },
        “ placement_policy”:{
          “约束”:[
            {
              “ type”:“ ANTI_AFFINITY”,
              “ scope”:“ NODE”,
              “ node_attributes”:{
                “ os”:[“ centos6”,“ centos7”],
                “ fault_domain”:[“ fd1”,“ fd2”]
              },
              “ node_partitions”:[
                “ gpu”,
                “快速磁盘”
              ],
              “ target_tags”:[
                “你好”
              ]
            }
          ]
        }
      }
    ]
}

GET响应JSON

GET URL-http:// localhost:8088 / app / v1 / services / hello-world

注意,对于反亲和性组件,在特定节点中最多分配1个容器。在此示例中,组件“ hello”已请求3个容器。因为群集具有3个或更多NM,所以分配了所有3个容器。如果群集的少于3个NM,则将分配少于3个容器。如果分配的容器数少于请求的容器数,则组件和服务将处于非稳定状态。

{
    “ name”:“ hello-world”,
    “ version”:“ 1.0.0”,
    “ description”:“具有反亲和性的Hello世界示例”,
    “ id”:“ application_1503963985568_0003”,
    “寿命”:-1,
    “ state”:“ STABLE”,
    “组件”: [
        {
            “ name”:“ hello”,
            “ state”:“ STABLE”,
            “资源”:{
                “ cpus”:1
                “内存”:“ 256”
            },
            “ placement_policy”:{
              “约束”:[
                {
                  “ type”:“ ANTI_AFFINITY”,
                  “ scope”:“ NODE”,
                  “ node_attributes”:{
                    “ os”:[“ centos6”,“ centos7”],
                    “ fault_domain”:[“ fd1”,“ fd2”]
                  },
                  “ node_partitions”:[
                    “ gpu”,
                    “快速磁盘”
                  ],
                  “ target_tags”:[
                    “你好”
                  ]
                }
              ]
            },
            “配置”:{
                “属性”:{},
                “ env”:{},
                “文件”:[]
            },
            “快速链接”: [],
            “容器”:[
                {
                    “ id”:“ container_e03_1503963985568_0003_01_000002”,
                    “ ip”:“ 10.22.8.143”,
                    “主机名”:“ ctr-e03-1503963985568-0003-01-000002.example.site”,
                    “ state”:“ READY”,
                    “启动时间”:1504051512412,
                    “ bare_host”:“ host100.cloud.com”,
                    “ component_instance_name”:“ hello-0”
                },
                {
                    “ id”:“ container_e03_1503963985568_0003_01_000003”,
                    “ ip”:“ 10.22.8.144”,
                    “主机名”:“ ctr-e03-1503963985568-0003-01-000003.example.site”,
                    “ state”:“ READY”,
                    “启动时间”:1504051536450,
                    “ bare_host”:“ host101.cloud.com”,
                    “ component_instance_name”:“ hello-1”
                },
                {
                    “ id”:“ container_e03_1503963985568_0003_01_000004”,
                    “ ip”:“ 10.22.8.145”,
                    “主机名”:“ ctr-e03-1503963985568-0003-01-000004.example.site”,
                    “ state”:“ READY”,
                    “启动时间”:1504051536450,
                    “ bare_host”:“ host102.cloud.com”,
                    “ component_instance_name”:“ hello-2”
                }
            ],
            “ launch_command”:“ ./start_nginx.sh”,
            “容器数”:1
            “ run_privileged_container”:false
        }
    ],
    “配置”:{
        “属性”:{},
        “ env”:{},
        “文件”:[]
    },
    “快速链接”: {}
}

创建为组件启用了运行状况阈值监视器的服务

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

POST请求JSON

{
  “ name”:“ hello-world”,
  “ version”:“ 1.0.0”,
  “ description”:“带有健康阈值监视器的Hello world示例”,
  “组件” :
    [
      {
        “ name”:“ hello”,
        “容器数”:100,
        “工件”:{
          “ id”:“ nginx:latest”,
          “ type”:“ DOCKER”
        },
        “ launch_command”:“ ./start_nginx.sh”,
        “资源”:{
          “ cpus”:1
          “内存”:“ 256”
        },
        “配置”:{
          “属性”:{
            “ yarn.service.container-health-threshold.percent”:“ 90”,
            “ yarn.service.container-health-threshold.window-secs”:“ 400”,
            “ yarn.service.container-health-threshold.init-delay-secs”:“ 800”
          }
        }
      }
    ]
}