YARN Service API

はじめに

現在、YARNに新しいサービスを導入することは、簡単な作業ではありません。既存のフレームワークのAPIは、低レベルすぎる(ネイティブYARN)、新しいコードを記述する必要がある(プログラムAPIを持つフレームワークの場合)、または複雑な仕様を記述する必要がある(宣言型フレームワークの場合)です。

この簡素化されたREST APIを使用して、YARNサービスのライフサイクルを作成および管理できます。ほとんどの場合、アプリケーション所有者はアプリケーションに変更を加える必要はありません。これは、アプリケーションがDockerなどのコンテナ化テクノロジーでパッケージ化されている場合に特に当てはまります。

このドキュメントでは、YARN上でコンテナ化されたサービスをデプロイ/管理するためのAPI仕様(別名YarnFile)について説明します。同じJSON仕様をREST APIとCLIの両方で使用して、サービスを管理できます。

バージョン情報

バージョン: 1.0.0

ライセンス情報

ライセンス: Apache 2.0 ライセンスURL: https://apache.dokyumento.jp/licenses/LICENSE-2.0.html

URIスキーム

ホスト: host.mycompany.com

ポート: 8088(デフォルトのRMポート)

スキーム: HTTP

消費

  • application/json

生成

  • application/json

パス

サービスの作成

POST /app/v1/services

説明

サービスを作成します。リクエストJSONは、作成に必要な詳細を含むサービスオブジェクトです。リクエストが成功すると、202 Acceptedが返されます。このAPIの成功は、サービス作成リクエストの提出の成功のみを確認します。サービスが実際にRUNNING状態になるという保証はありません。リソースの可用性やその他のいくつかの要因によって、サービスがクラスタにデプロイされるかどうかが決まります。クライアントはその後、GET APIを呼び出してサービスの詳細を取得し、その状態を決定することが期待されます。

パラメータ

タイプ 名前 説明 必須 スキーマ デフォルト
BodyParameter サービス サービスリクエストオブジェクト true サービス

レスポンス

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)。

パラメータ

タイプ 名前 説明 必須 スキーマ デフォルト
PathParameter service_name サービス名 true 文字列
BodyParameter サービス 更新されたサービス定義。サービスの更新されたライフタイム、または指定されたサービスに対して開始/停止操作を開始するためのサービスの目的の状態(STOPPED/STARTED)を含めることができます。 true サービス

レスポンス

HTTPコード 説明 スキーマ
204 更新またはアップグレードが成功しました。 コンテンツなし
404 サービスが存在しません。 コンテンツなし
デフォルト 予期しないエラー サービスステータス

サービスの詳細の取得。

GET /app/v1/services/{service_name}

説明

実行中のサービスの詳細(コンテナを含む)を返します。

パラメータ

タイプ 名前 説明 必須 スキーマ デフォルト
PathParameter service_name サービス名 true 文字列

レスポンス

HTTPコード 説明 スキーマ
200 サービスオブジェクト オブジェクト
404 サービスが存在しません。 コンテンツなし
デフォルト 予期しないエラー サービスステータス

サービスの破棄

DELETE /app/v1/services/{service_name}

説明

サービスを破棄し、すべてのリソースを解放します。このAPIは、ログの場所(TBD)などを提供するJSONデータを返す必要がある場合があります。

パラメータ

タイプ 名前 説明 必須 スキーマ デフォルト
PathParameter service_name サービス名 true 文字列

レスポンス

HTTPコード 説明 スキーマ
204 破棄が成功しました。 コンテンツなし
404 サービスが存在しません。 コンテンツなし
デフォルト 予期しないエラー サービスステータス

コンポーネントのインスタンス数のフレックス。

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

説明

コンポーネントの目的のインスタンス数を設定します。

パラメータ

タイプ 名前 説明 必須 スキーマ デフォルト
PathParameter service_name サービス名 true 文字列
PathParameter component_name コンポーネント名 true 文字列
BodyParameter コンポーネント 更新されたインスタンス数を含むコンポーネントの定義。 true コンポーネント

レスポンス

HTTPコード 説明 スキーマ
200 フレックスが成功しました。 コンテンツなし
404 サービスが存在しません。 コンテンツなし
デフォルト 予期しないエラー サービスステータス

定義

アーティファクト

サービスコンポーネントのアーティファクト。指定されていない場合、コンポーネントは単純にベアランチコマンドを実行し、アーティファクトはローカライズされません。

名前 説明 必須 スキーマ デフォルト
id アーティファクトID。tarballベースのサービスのパッケージの場所のURI、Dockerのイメージ名、サービス名などが例として挙げられます。 true 文字列
type アーティファクトタイプ(Docker、tarballなど)(オプション)。TARBALLタイプの場合、指定されたtarballは、libという名前のフォルダーの下にあるコンテナローカル作業ディレクトリにローカライズされます。SERVICEタイプの場合、指定されたサービスが読み取られ、そのコンポーネントがこのサービスに追加されます。アーティファクトタイプがSERVICEである元のコンポーネントは削除されます(元のコンポーネントに指定されているプロパティは無視されます)。 false 列挙型 (DOCKER、TARBALL、SERVICE) DOCKER
uri 複数のアーティファクトストアをサポートするためのアーティファクトの場所(オプション)。 false 文字列

コンポーネント

サービスの1つ以上のコンポーネント。サービスがHBaseである場合、コンポーネントはマスターまたはリージョンサーバーなどの単純なロールにすることができます。サービスが複雑なビジネスWebアプリケーションである場合、コンポーネントはKafkaやStormなどの他のサービスにすることができます。これにより、複雑でネストされたサービスのサポートが可能になります。

名前 説明 必須 スキーマ デフォルト
name サービスコンポーネントの名前(必須)。レジストリDNSが有効になっている場合、最大長は44文字です。 true 文字列
state コンポーネントの状態 false コンポーネント状態
dependencies このコンポーネントを開始する前に、READY状態(準備完了チェックで定義)である必要があるサービスコンポーネントの配列。サービスのすべてのコンポーネント間の依存関係は、DAGとして表現する必要があります。 false 文字列配列
readiness_check このコンポーネントの準備完了チェック。 false 準備完了チェック
artifact コンポーネントのアーティファクト(オプション)。指定されていない場合、サービスレベルのグローバルアーティファクトが有効になります。 false アーティファクト
launch_command このコンポーネントのカスタム起動コマンド(DOCKERコンポーネントの場合オプション、それ以外の場合は必須)。コンポーネントレベルで指定されている場合、グローバルレベルで指定されている値(存在する場合)をオーバーライドします。DockerイメージがENTRYPOINTをサポートしている場合、launch_commandはスペースではなくカンマ(,)で区切られます。 false 文字列
resource このコンポーネントのリソース(オプション)。指定されていない場合、サービスレベルのグローバルリソースが有効になります。 false リソース
number_of_containers このコンポーネントのコンテナの数(オプション)。指定されていない場合、サービスレベルのグローバルnumber_of_containersが有効になります。 false 整数 (int64)
decommissioned_instances 廃止されたコンポーネントインスタンスのリスト。 false 文字列配列
containers 開始されたコンポーネントのコンテナ。POSTペイロードに対してこの属性の値を指定すると、検証エラーが発生します。このBLOBは、開始されたサービスのGETレスポンスでのみ使用できます。 false コンテナ配列
run_privileged_container このコンポーネントのすべてのコンテナを特権モードで実行します(YARN-4262)。 false ブール値
placement_policy このコンポーネントのすべてのコンテナに対する高度なスケジューリングと配置ポリシー。 false 配置ポリシー
configuration このコンポーネントの設定プロパティ。 false 設定
quicklinks サービスレベルで定義され、このコンポーネントによって解決されるクイックリンクキーのリスト。 false 文字列配列
restart_policy コンポーネントの再起動ポリシー。ALWAYS(インスタンスの終了コードが0でも常に再起動)、ON_FAILURE(インスタンスの終了コードが0以外の場合のみ再起動)、NEVER(いずれの場合も再起動しない)を含む。
restart_policy=ON_FAILURE/NEVERのコンポーネントでは、フレキシングはサポートされていません。 false 文字列 ALWAYS

ComponentState

コンポーネントの状態

名前 説明 必須 スキーマ デフォルト
state コンポーネントの状態の列挙型 false 列挙型 (INIT, FLEXING, STABLE, UPGRADING)

ConfigFile

サービスコンポーネントコンテナでボリュームとして作成および提供する必要がある設定ファイル。

名前 説明 必須 スキーマ デフォルト
type xml、properties、json、yaml、template、または静的/アーカイブリソースファイルなど、標準形式の設定ファイル。静的/アーカイブタイプが指定されている場合、ジョブの開始前にファイルをリモートファイルシステムにアップロードする必要があり、YARNサービスフレームワークはコンテナの開始前にファイルをローカライズします。アーカイブファイルはローカライズ中に解凍されます。 false 列挙型 (XML, PROPERTIES, JSON, YAML, TEMPLATE, HADOOP_XML, STATIC, ARCHIVE)
dest_file この設定ファイルを作成するパス。絶対パスである場合、DOCKERコンテナにマウントされます。絶対パスはDOCKERコンテナでのみ許可されます。相対パスである場合、ファイル名のみを指定する必要があり、静的/アーカイブ以外のすべてのタイプでは、confという名前のフォルダの下にあるコンテナのローカル作業ディレクトリにファイルが作成されます。静的/アーカイブリソースタイプの場合、ファイルはresourcesディレクトリで使用できます。 false 文字列
src_file これは、プロパティの置換後にdest_fileにダンプされる設定ファイルのソース場所を提供します。タイプで指定された形式です。通常、src_fileは、puppet、chef、hdfsなどによって管理されるソース管理されたネットワークアクセス可能なファイルを指します。現在、hdfsのみがサポートされています。 false 文字列
properties タイプで指定された形式でdest_fileにダンプされるキーと値のペアのBLOB。src_fileが指定されている場合、src_fileの内容がdest_fileにダンプされ、これらのプロパティは、src_file内の既存のプロパティを上書きするか、src_fileに新しいプロパティとして追加されます。 false オブジェクト

Configuration

環境変数、ファイル、カスタムプラグイン可能なヘルパーDockerコンテナを介してサービスコンポーネントに注入できる設定プロパティのセット。xml、properties、json、yaml、テンプレートなど、いくつかの標準形式のファイルがサポートされます。

名前 説明 必須 スキーマ デフォルト
properties YARNサービスAMを設定するためのキーと値のペアのBLOB。 false オブジェクト
env 開始時にデフォルトのシステムプロパティに追加され、サービスに渡されるキーと値のペアのBLOB。プロパティへのすべてのプレースホルダー参照は、注入前に置換されます。 false オブジェクト
files サービスコンポーネントコンテナでボリュームとして作成および提供する必要があるファイルのリストの配列。 false ConfigFile配列

Container

実行中のサービスコンテナのインスタンス。

名前 説明 必須 スキーマ デフォルト
id 実行中のサービスの一意のコンテナID(例:container_e3751_1458061340047_0008_01_000002)。 false 文字列
launch_time コンテナが作成された時間(例:2016-03-16T01:01:49.000Z)。これは、クラスタの起動時間とは異なる可能性が最も高いです。 false 文字列(日付)
ip 実行中のコンテナのIPアドレス(例:172.31.42.141)。IPアドレスとホスト名属性の値は、YARN-4007に従って、クラスタ/Dockerネットワークの設定に依存します。 false 文字列
hostname 実行中のコンテナの完全修飾ホスト名(例:ctr-e3751-1458061340047-0008-01-000002.examplestg.site)。IPアドレスとホスト名属性の値は、YARN-4007に従って、クラスタ/Dockerネットワークの設定に依存します。 false 文字列
bare_host コンテナが実行されているベアナードまたはホスト(例:cn008.example.com)。 false 文字列
state サービスのコンテナの状態。 false コンテナ状態
component_instance_name このコンテナインスタンスが属するコンポーネントインスタンスの名前。コンポーネントインスタンス名は、$COMPONENT_NAME-i(iは単調増加整数)という名前です。たとえば、nginxというコンポーネントには、nginx-0、nginx-1などの複数のコンポーネントインスタンスがあります。各コンポーネントインスタンスはコンテナインスタンスによってバックアップされています。 false 文字列
resource このコンテナで使用されるリソース。 false リソース
artifact このコンテナで使用されるアーティファクト。 false アーティファクト
privileged_container 特権モードで実行されているコンテナかどうか。 false ブール値

ContainerState

サービスのコンテナの現在の状態。

名前 説明 必須 スキーマ デフォルト
state コンテナの状態の列挙型 false 列挙型 (INIT, STARTED, READY)

KerberosPrincipal

サービスを開始するユーザーのKerberosプリンシパル情報。

名前 説明 必須 スキーマ デフォルト
principal_name サービスを開始するユーザーのプリンシパル名。Hadoopクライアントは、サーバー(この場合はAM)との通信時にサーバーのプリンシパルにホスト名が含まれていることを検証するため、`principal_name`フィールドには`_HOST`が必要であることに注意してください(例:`testuser/_HOST@EXAMPLE.COM`)。 false 文字列
keytab Kerberos keytabのURI。現在、ベアナードにあるファイルのみをサポートしています。URIは「file://」で始まります - keytabが保存されているローカルホスト上のパス。AMが起動する前に、管理者がローカルホストにkeytabを事前にインストールすることが前提となっています。 false 文字列

PlacementConstraint

配置制約の詳細。

名前 説明 必須 スキーマ デフォルト
name この制約に関連付けられたオプションの名前。 false 文字列
type 配置の種類。 true 配置タイプ
scope 配置の範囲。 true 配置範囲
target_tags このコンポーネントの配置ポリシーが依存するコンポーネントの名前は、ターゲットタグとして追加されます。したがって、アフィニティの場合、このコンポーネントのコンテナは、ターゲットタグコンポーネントのコンテナが実行されているホストに配置されることを要求します。ターゲットタグには、このコンポーネントの名前を含めることもできます。その場合、アンチアフィニティでは、このコンポーネントのコンテナを1つ以上のホストに配置することはできません。同様に、カーディナリティの場合、このコンポーネントのコンテナは、少なくともminCardinality、最大maxCardinalityのターゲットタグコンポーネントのコンテナが実行されているホストに配置されることを要求します。 false 文字列配列
node_attributes ノード属性は、ノードに関連付けられたキーと値のペアのセットです。 false オブジェクト
node_partitions このコンポーネントのコンテナを実行できるノードパーティション。 false 文字列配列
min_cardinality 配置タイプがカーディナリティの場合、このコンポーネントのコンテナを割り当てることができるホストにある依存コンポーネントのコンテナの最小数。 false 整数 (int64)
max_cardinality 配置タイプがカーディナリティの場合、このコンポーネントのコンテナを割り当てることができるホストにある依存コンポーネントのコンテナの最大数。 false 整数 (int64)

PlacementPolicy

サービスのコンポーネントの高度な配置ポリシー。

名前 説明 必須 スキーマ デフォルト
constraints 配置制約の詳細。 true PlacementConstraint配列

PlacementScope

コンポーネントのコンテナの配置の範囲。

名前 説明 必須 スキーマ デフォルト
type false 列挙型 (NODE, RACK)

PlacementType

配置の種類 - 別のコンポーネントのコンテナまたは同じコンポーネント(自身)のコンテナとのアフィニティ/アンチアフィニティ/アフィニティwithカーディナリティ。

名前 説明 必須 スキーマ デフォルト
type false 列挙型 (AFFINITY, ANTI_AFFINITY, AFFINITY_WITH_CARDINALITY)

ReadinessCheck

コンポーネントインスタンス(コンテナ)の準備状況を判断するために実行されるチェック。準備状況チェックが指定されていない場合、yarn.service.default-readiness-check.enabled設定プロパティがコンポーネントレベルまたはグローバルレベルでfalseに設定されていない限り、デフォルトの準備状況チェックが使用されます。artifactフィールドは現在サポートされていませんが、将来的に実装される可能性があり、プラグイン可能なヘルパーコンテナによって高度なユースケースがサポートされます。

名前 説明 必須 スキーマ デフォルト
type DEFAULT(AMはコンテナにIPがあるかどうかを確認し、オプションでコンテナホスト名のDNSルックアップを実行します)、HTTP(AMはデフォルトのチェックを実行し、さらにコンテナにREST呼び出しを送信し、200〜299の応答コードを期待します)、またはPORT(AMはデフォルトのチェックを実行し、さらに指定されたポートでコンテナへのソケット接続を開こうとします)。 true 列挙型 (DEFAULT, HTTP, PORT)
properties チェックの設定に使用されるキーと値のペアのBLOB。 false オブジェクト
artifact プラグイン可能な準備状況チェックヘルパーコンテナのアーティファクト(オプション)。指定されている場合、このヘルパーコンテナは通常、http uriをホストし、実際のコンテナの準備状況チェックを実行するために必要な複雑なスクリプトをカプセル化します。最後に、簡素化されたユースケースと同様に、204 No contentを応答することが期待されます。このプラグイン可能なフレームワークは、パッケージングの変更なしでサービスを実行できるサービス所有者にメリットがあります。注:現時点では、dockerタイプのアーティファクトのみがサポートされています。まだ実装されていません。 false アーティファクト

Resource

Resourceは、コンテナで使用できるリソース(vcore、メモリ、ネットワークなど)の量を決定します。このフィールドは、コンポーネントまたはサービスのすべてのコンテナに適用されるリソースを決定します。サービス(またはグローバル)レベルで指定されたリソースは、コンポーネントレベルでオーバーライドできます。profileまたはcpuとmemoryのいずれか1つのみが期待されます。そうでない場合は、検証例外が発生します。

名前 説明 必須 スキーマ デフォルト
profile 各リソースプロファイルには、クラスタレベルで事前に定義されたメモリ、cpuなどとは関連付けられている一意のIDがあります。 false 文字列
cpus 各コンテナに割り当てられたvcoreの数(オプションですが、指定されている場合はプロファイルのcpuをオーバーライドします)。 false 整数 (int32)
memory 各コンテナに割り当てられたメモリの量(オプションですが、指定されている場合はプロファイルのメモリをオーバーライドします)。現在、整数値のみを受け入れ、デフォルトの単位はMBです。 false 文字列
additional リソースタイプ名からリソースタイプ情報へのマップ。値(整数)、単位(文字列)、オプションの属性(マップ)を含む。これは、cpuとメモリ以外のリソースを指定するために使用されます。以下の例を参照してください。 false オブジェクト

ResourceInformation

ResourceInformationは、メモリとvcoreに加えて、リソースタイプの単位/値を決定します。Resourceオブジェクトの一部になります。

名前 説明 必須 スキーマ デフォルト
value リソースの整数値。 false 整数 (int64)
unit リソースの単位。許容値は-p/n/u/m/k/M/G/T/P/Ki/Mi/Gi/Ti/Piです。デフォルトでは空で、単位はありません。 false 文字列

Service

サービスリソースには、次の属性があります。

名前 説明 必須 スキーマ デフォルト
name 一意のサービス名。レジストリDNSが有効になっている場合、最大長は63文字です。 true 文字列
version サービスのバージョン。 true 文字列
description サービスの説明。 false 文字列
id 一意のサービスID。 false 文字列
artifact アーティファクトタイプがSERVICEに設定されているコンポーネントを除く、サービスのすべてのコンポーネントのデフォルトのアーティファクト(オプション)。 false アーティファクト
resource サービスのすべてのコンポーネントのデフォルトリソース(オプション)。 false リソース
launch_time サービスが作成された時間(例:2016-03-16T01:01:49.000Z)。 false 文字列(日付)
number_of_running_containers get応答では、リクエスト時のこのサービスの(すべてのコンポーネントにわたる)実行中のコンテナの総数を示します。注:後続のリクエストは、コンテナが割り当てられるにつれて、総コンテナ数に達するまで、または2つのリクエストの間にフレックスリクエストが行われた場合、異なる数を返す可能性があります。 false 整数 (int64)
lifetime STARTED状態に達してからサービスのライフタイム(秒単位)(その後、YARNによって自動的に破棄されます)。無制限のライフタイムの場合は、ライフタイム値を設定しないでください。 false 整数 (int64)
components サービスのコンポーネント。 false Component配列
configuration サービスの構成プロパティです。サービス/グローバルレベルで指定された構成は、すべてのコンポーネントで使用できます。コンポーネントレベルで特定のプロパティを上書きできます。 false 設定
state サービスの状態です。PUTペイロードに対してこの属性の値を指定すると、サービスがこの目的の状態に更新されます。 false サービス状態
quicklinks サービス用にエクスポートされるクイックリンクのキーバリューペアのBLOBです。 false オブジェクト
キュー このサービスが送信されるYARNキューです。 false 文字列
kerberos_principal サービスを起動するユーザーのプリンシパル情報です。 false Kerberosプリンシパル
docker_client_config Dockerクライアント構成を含むファイルのURIです(例:hdfs:///tmp/config.json)。 false 文字列
dependencies このサービスが依存するサービス名のリストです。 false 文字列配列

ServiceState

サービスの現在の状態です。

名前 説明 必須 スキーマ デフォルト
state サービスの状態の列挙型です。 false 列挙型(ACCEPTED、STARTED、STABLE、STOPPED、FAILED、FLEX、UPGRADING)

ServiceStatus

GET APIへの応答として返される、送信されたサービスの現在の状態です。

名前 説明 必須 スキーマ デフォルト
診断情報 サービスの現在の状態の原因に関する診断情報(もしあれば)。サービスが非実行状態の場合、通常はNULL以外の値を持ちます。 false 文字列
state サービスの状態。 false サービス状態
コード サービス所有者が診断情報に加えて障害を理解するために使用できる、シナリオ固有のエラーコードです。 false 整数 (int32)

ほとんどの属性値をデフォルト値とした、単純なシングルコンポーネントサービスの作成

POST URL - https://127.0.0.1:8088/app/v1/services

POSTリクエストJSON

{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "hello world example",
  "components" :
    [
      {
        "name": "hello",
        "number_of_containers": 2,
        "artifact": {
          "id": "nginx:latest",
          "type": "DOCKER"
        },
        "launch_command": "./start_nginx.sh",
        "resource": {
          "cpus": 1,
          "memory": "256"
        }
      }
    ]
}

GETレスポンスJSON

GET URL - https://127.0.0.1:8088/app/v1/services/hello-world

注:ライフタイム値が-1の場合は、無期限です。

{
    "name": "hello-world",
    "version": "1.0.0",
    "description": "hello world example",
    "id": "application_1503963985568_0002",
    "lifetime": -1,
    "state": "STABLE",
    "components": [
        {
            "name": "hello",
            "state": "STABLE",
            "resource": {
                "cpus": 1,
                "memory": "256"
            },
            "configuration": {
                "properties": {},
                "env": {},
                "files": []
            },
            "quicklinks": [],
            "containers": [
                {
                    "id": "container_e03_1503963985568_0002_01_000002",
                    "ip": "10.22.8.143",
                    "hostname": "ctr-e03-1503963985568-0002-01-000002.example.site",
                    "state": "READY",
                    "launch_time": 1504051512412,
                    "bare_host": "host100.cloud.com",
                    "component_instance_name": "hello-0"
                },
                {
                    "id": "container_e03_1503963985568_0002_01_000003",
                    "ip": "10.22.8.144",
                    "hostname": "ctr-e03-1503963985568-0002-01-000003.example.site",
                    "state": "READY",
                    "launch_time": 1504051536450,
                    "bare_host": "host100.cloud.com",
                    "component_instance_name": "hello-1"
                }
            ],
            "launch_command": "./start_nginx.sh",
            "number_of_containers": 1,
            "run_privileged_container": false
        }
    ],
    "configuration": {
        "properties": {},
        "env": {},
        "files": []
    },
    "quicklinks": {}
}

サービスのライフタイムを変更するための更新

PUT URL - https://127.0.0.1:8088/app/v1/services/hello-world

PUTリクエストJSON

注:現在のライフタイム値に関係なく、この更新リクエストは、リクエストが送信された時点からサービスのライフタイムを3600秒(1時間)に設定します。したがって、サービスの残りのライフタイムが5分(例えば)で、それを1時間に延長したい場合、またはアプリケーションの残りのライフタイムが5時間(例えば)で、それを1時間に短縮したい場合、どちらのシナリオでも下記と同じリクエストを送信する必要があります。

{
  "lifetime": 3600
}

サービスの停止

PUT URL - https://127.0.0.1:8088/app/v1/services/hello-world

PUTリクエストJSON

{
  "state": "STOPPED"
}

サービスの開始

PUT URL - https://127.0.0.1:8088/app/v1/services/hello-world

PUTリクエストJSON

{
  "state": "STARTED"
}

サービスのコンポーネントのコンテナ数(インスタンス数)をフレックスアップ/ダウンするための更新

PUT URL - https://127.0.0.1:8088/app/v1/services/hello-world/components/hello

PUTリクエストJSON

{
  "number_of_containers": 3
}

または、「components」セクション全体を指定することもできます。

PUT URL - https://127.0.0.1:8088/app/v1/services/hello-world

PUTリクエストJSON

{
  "state": "FLEX",
  "components" :
    [
      {
        "name": "hello",
        "number_of_containers": 3
      }
    ]
}

サービスの破棄

DELETE URL - https://127.0.0.1:8088/app/v1/services/hello-world

複雑なサービスの作成 - HBase

POST URL - https://127.0.0.1:8088:/app/v1/services/hbase-app-1

POSTリクエストJSON

{
  "name": "hbase-app-1",
  "version": "1.0.0",
  "description": "hbase service",
  "lifetime": "3600",
  "components": [
    {
      "name": "hbasemaster",
      "number_of_containers": 1,
      "artifact": {
        "id": "hbase:latest",
        "type": "DOCKER"
      },
      "launch_command": "/usr/hdp/current/hbase-master/bin/hbase master start",
      "resource": {
        "cpus": 1,
        "memory": "2048"
      },
      "configuration": {
        "env": {
          "HBASE_LOG_DIR": "<LOG_DIR>"
        },
        "files": [
          {
            "type": "XML",
            "dest_file": "/etc/hadoop/conf/core-site.xml",
            "properties": {
              "fs.defaultFS": "${CLUSTER_FS_URI}"
            }
          },
          {
            "type": "XML",
            "dest_file": "/etc/hbase/conf/hbase-site.xml",
            "properties": {
              "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",
      "number_of_containers": 3,
      "artifact": {
        "id": "hbase:latest",
        "type": "DOCKER"
      },
      "launch_command": "/usr/hdp/current/hbase-regionserver/bin/hbase regionserver start",
      "resource": {
        "cpus": 1,
        "memory": "2048"
      },
      "configuration": {
        "env": {
          "HBASE_LOG_DIR": "<LOG_DIR>"
        },
        "files": [
          {
            "type": "XML",
            "dest_file": "/etc/hadoop/conf/core-site.xml",
            "properties": {
              "fs.defaultFS": "${CLUSTER_FS_URI}"
            }
          },
          {
            "type": "XML",
            "dest_file": "/etc/hbase/conf/hbase-site.xml",
            "properties": {
              "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}"
            }
          }
        ]
      }
    }
  ],
  "quicklinks": {
    "HBase Master Status UI": "http://hbasemaster0.${SERVICE_NAME}.${USER}.${DOMAIN}:16010/master-status",
    "Proxied HBase Master Status UI": "http://app-proxy/${DOMAIN}/${USER}/${SERVICE_NAME}/hbasemaster/16010/"
  }
}

CPUとRAMに加えてGPUを要求するサービスの作成

POST URL - https://127.0.0.1:8088/app/v1/services

POSTリクエストJSON

{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "hello world example with GPUs",
  "components" :
    [
      {
        "name": "hello",
        "number_of_containers": 2,
        "artifact": {
          "id": "nginx:latest",
          "type": "DOCKER"
        },
        "launch_command": "./start_nginx.sh",
        "resource": {
          "cpus": 1,
          "memory": "256",
          "additional" : {
            "yarn.io/gpu" : {
              "value" : 4,
              "unit" : ""
            }
          }
        }
      }
    ]
}

アンチアフィニティ配置ポリシーを要求するコンポーネントを持つサービスの作成

POST URL - https://127.0.0.1:8088/app/v1/services

POSTリクエストJSON

{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "hello world example with anti-affinity",
  "components" :
    [
      {
        "name": "hello",
        "number_of_containers": 3,
        "artifact": {
          "id": "nginx:latest",
          "type": "DOCKER"
        },
        "launch_command": "./start_nginx.sh",
        "resource": {
          "cpus": 1,
          "memory": "256"
        },
        "placement_policy": {
          "constraints": [
            {
              "type": "ANTI_AFFINITY",
              "scope": "NODE",
              "node_attributes": {
                "os": ["centos6", "centos7"],
                "fault_domain": ["fd1", "fd2"]
              },
              "node_partitions": [
                "gpu",
                "fast-disk"
              ],
              "target_tags": [
                "hello"
              ]
            }
          ]
        }
      }
    ]
}

GETレスポンスJSON

GET URL - https://127.0.0.1:8088/app/v1/services/hello-world

注:アンチアフィニティコンポーネントでは、特定のノードに1つ以上のコンテナは割り当てられません。この例では、「hello」コンポーネントによって3つのコンテナが要求されています。クラスタに3つ以上のNMがあるため、3つのコンテナすべてが割り当てられました。クラスタのNMが3つ未満の場合、割り当てられるコンテナは3つ未満になります。割り当てられたコンテナ数が要求されたコンテナ数より少ない場合、コンポーネントとサービスはSTABLE以外の状態になります。

{
    "name": "hello-world",
    "version": "1.0.0",
    "description": "hello world example with anti-affinity",
    "id": "application_1503963985568_0003",
    "lifetime": -1,
    "state": "STABLE",
    "components": [
        {
            "name": "hello",
            "state": "STABLE",
            "resource": {
                "cpus": 1,
                "memory": "256"
            },
            "placement_policy": {
              "constraints": [
                {
                  "type": "ANTI_AFFINITY",
                  "scope": "NODE",
                  "node_attributes": {
                    "os": ["centos6", "centos7"],
                    "fault_domain": ["fd1", "fd2"]
                  },
                  "node_partitions": [
                    "gpu",
                    "fast-disk"
                  ],
                  "target_tags": [
                    "hello"
                  ]
                }
              ]
            },
            "configuration": {
                "properties": {},
                "env": {},
                "files": []
            },
            "quicklinks": [],
            "containers": [
                {
                    "id": "container_e03_1503963985568_0003_01_000002",
                    "ip": "10.22.8.143",
                    "hostname": "ctr-e03-1503963985568-0003-01-000002.example.site",
                    "state": "READY",
                    "launch_time": 1504051512412,
                    "bare_host": "host100.cloud.com",
                    "component_instance_name": "hello-0"
                },
                {
                    "id": "container_e03_1503963985568_0003_01_000003",
                    "ip": "10.22.8.144",
                    "hostname": "ctr-e03-1503963985568-0003-01-000003.example.site",
                    "state": "READY",
                    "launch_time": 1504051536450,
                    "bare_host": "host101.cloud.com",
                    "component_instance_name": "hello-1"
                },
                {
                    "id": "container_e03_1503963985568_0003_01_000004",
                    "ip": "10.22.8.145",
                    "hostname": "ctr-e03-1503963985568-0003-01-000004.example.site",
                    "state": "READY",
                    "launch_time": 1504051536450,
                    "bare_host": "host102.cloud.com",
                    "component_instance_name": "hello-2"
                }
            ],
            "launch_command": "./start_nginx.sh",
            "number_of_containers": 1,
            "run_privileged_container": false
        }
    ],
    "configuration": {
        "properties": {},
        "env": {},
        "files": []
    },
    "quicklinks": {}
}

コンポーネントに対してヘルススレッショルドモニタを有効にしたサービスの作成

POST URL - https://127.0.0.1:8088/app/v1/services

POSTリクエストJSON

{
  "name": "hello-world",
  "version": "1.0.0",
  "description": "hello world example with health threshold monitor",
  "components" :
    [
      {
        "name": "hello",
        "number_of_containers": 100,
        "artifact": {
          "id": "nginx:latest",
          "type": "DOCKER"
        },
        "launch_command": "./start_nginx.sh",
        "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"
          }
        }
      }
    ]
}