現在、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
ホスト: host.mycompany.com
ポート: 8088(デフォルトのRMポート)
スキーム: HTTP
POST /app/v1/services
サービスを作成します。リクエストJSONは、作成に必要な詳細を含むサービスオブジェクトです。リクエストが成功すると、202 Acceptedが返されます。このAPIの成功は、サービス作成リクエストの提出の成功のみを確認します。サービスが実際にRUNNING状態になるという保証はありません。リソースの可用性やその他のいくつかの要因によって、サービスがクラスタにデプロイされるかどうかが決まります。クライアントはその後、GET APIを呼び出してサービスの詳細を取得し、その状態を決定することが期待されます。
タイプ | 名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|---|
BodyParameter | サービス | サービスリクエストオブジェクト | true | サービス |
HTTPコード | 説明 | スキーマ |
---|---|---|
202 | サービスの作成リクエストが承認されました。 | コンテンツなし |
400 | リクエストボディに無効なサービス定義が指定されました。 | コンテンツなし |
500 | サービスの作成に失敗しました。 | コンテンツなし |
デフォルト | 予期しないエラー | サービスステータス |
GET /app/v1/services
現在実行されているすべてのサービスのリストを取得します(レスポンスには、サービス情報の最小限の投影が含まれています)。詳細については、特定のサービス名に対してGETを実行してください。
HTTPコード | 説明 | スキーマ |
---|---|---|
200 | サービスの配列 | サービス配列 |
デフォルト | 予期しないエラー | サービスステータス |
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 |
コンポーネントの状態
名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|
state | コンポーネントの状態の列挙型 | false | 列挙型 (INIT, FLEXING, STABLE, UPGRADING) |
サービスコンポーネントコンテナでボリュームとして作成および提供する必要がある設定ファイル。
名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|
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 | オブジェクト |
環境変数、ファイル、カスタムプラグイン可能なヘルパーDockerコンテナを介してサービスコンポーネントに注入できる設定プロパティのセット。xml、properties、json、yaml、テンプレートなど、いくつかの標準形式のファイルがサポートされます。
名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|
properties | YARNサービスAMを設定するためのキーと値のペアのBLOB。 | false | オブジェクト | |
env | 開始時にデフォルトのシステムプロパティに追加され、サービスに渡されるキーと値のペアのBLOB。プロパティへのすべてのプレースホルダー参照は、注入前に置換されます。 | false | オブジェクト | |
files | サービスコンポーネントコンテナでボリュームとして作成および提供する必要があるファイルのリストの配列。 | false | ConfigFile配列 |
実行中のサービスコンテナのインスタンス。
名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|
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 | ブール値 |
サービスのコンテナの現在の状態。
名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|
state | コンテナの状態の列挙型 | false | 列挙型 (INIT, STARTED, READY) |
サービスを開始するユーザーのKerberosプリンシパル情報。
名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|
principal_name | サービスを開始するユーザーのプリンシパル名。Hadoopクライアントは、サーバー(この場合はAM)との通信時にサーバーのプリンシパルにホスト名が含まれていることを検証するため、`principal_name`フィールドには`_HOST`が必要であることに注意してください(例:`testuser/_HOST@EXAMPLE.COM`)。 | false | 文字列 | |
keytab | Kerberos keytabのURI。現在、ベアナードにあるファイルのみをサポートしています。URIは「file://」で始まります - keytabが保存されているローカルホスト上のパス。AMが起動する前に、管理者がローカルホストにkeytabを事前にインストールすることが前提となっています。 | false | 文字列 |
配置制約の詳細。
名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|
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) |
サービスのコンポーネントの高度な配置ポリシー。
名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|
constraints | 配置制約の詳細。 | true | PlacementConstraint配列 |
コンポーネントのコンテナの配置の範囲。
名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|
type | false | 列挙型 (NODE, RACK) |
配置の種類 - 別のコンポーネントのコンテナまたは同じコンポーネント(自身)のコンテナとのアフィニティ/アンチアフィニティ/アフィニティwithカーディナリティ。
名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|
type | false | 列挙型 (AFFINITY, ANTI_AFFINITY, AFFINITY_WITH_CARDINALITY) |
コンポーネントインスタンス(コンテナ)の準備状況を判断するために実行されるチェック。準備状況チェックが指定されていない場合、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は、コンテナで使用できるリソース(vcore、メモリ、ネットワークなど)の量を決定します。このフィールドは、コンポーネントまたはサービスのすべてのコンテナに適用されるリソースを決定します。サービス(またはグローバル)レベルで指定されたリソースは、コンポーネントレベルでオーバーライドできます。profileまたはcpuとmemoryのいずれか1つのみが期待されます。そうでない場合は、検証例外が発生します。
名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|
profile | 各リソースプロファイルには、クラスタレベルで事前に定義されたメモリ、cpuなどとは関連付けられている一意のIDがあります。 | false | 文字列 | |
cpus | 各コンテナに割り当てられたvcoreの数(オプションですが、指定されている場合はプロファイルのcpuをオーバーライドします)。 | false | 整数 (int32) | |
memory | 各コンテナに割り当てられたメモリの量(オプションですが、指定されている場合はプロファイルのメモリをオーバーライドします)。現在、整数値のみを受け入れ、デフォルトの単位はMBです。 | false | 文字列 | |
additional | リソースタイプ名からリソースタイプ情報へのマップ。値(整数)、単位(文字列)、オプションの属性(マップ)を含む。これは、cpuとメモリ以外のリソースを指定するために使用されます。以下の例を参照してください。 | false | オブジェクト |
ResourceInformationは、メモリとvcoreに加えて、リソースタイプの単位/値を決定します。Resourceオブジェクトの一部になります。
名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|
value | リソースの整数値。 | false | 整数 (int64) | |
unit | リソースの単位。許容値は-p/n/u/m/k/M/G/T/P/Ki/Mi/Gi/Ti/Piです。デフォルトでは空で、単位はありません。 | false | 文字列 |
サービスリソースには、次の属性があります。
名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|
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 | 文字列配列 |
サービスの現在の状態です。
名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|
state | サービスの状態の列挙型です。 | false | 列挙型(ACCEPTED、STARTED、STABLE、STOPPED、FAILED、FLEX、UPGRADING) |
GET APIへの応答として返される、送信されたサービスの現在の状態です。
名前 | 説明 | 必須 | スキーマ | デフォルト |
---|---|---|---|---|
診断情報 | サービスの現在の状態の原因に関する診断情報(もしあれば)。サービスが非実行状態の場合、通常はNULL以外の値を持ちます。 | false | 文字列 | |
state | サービスの状態。 | false | サービス状態 | |
コード | サービス所有者が診断情報に加えて障害を理解するために使用できる、シナリオ固有のエラーコードです。 | false | 整数 (int32) |
POST URL - https://127.0.0.1:8088/app/v1/services
{ "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 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
注:現在のライフタイム値に関係なく、この更新リクエストは、リクエストが送信された時点からサービスのライフタイムを3600秒(1時間)に設定します。したがって、サービスの残りのライフタイムが5分(例えば)で、それを1時間に延長したい場合、またはアプリケーションの残りのライフタイムが5時間(例えば)で、それを1時間に短縮したい場合、どちらのシナリオでも下記と同じリクエストを送信する必要があります。
{ "lifetime": 3600 }
PUT URL - https://127.0.0.1:8088/app/v1/services/hello-world
{ "state": "STOPPED" }
PUT URL - https://127.0.0.1:8088/app/v1/services/hello-world
{ "state": "STARTED" }
PUT URL - https://127.0.0.1:8088/app/v1/services/hello-world/components/hello
{ "number_of_containers": 3 }
または、「components」セクション全体を指定することもできます。
PUT URL - https://127.0.0.1:8088/app/v1/services/hello-world
{ "state": "FLEX", "components" : [ { "name": "hello", "number_of_containers": 3 } ] }
DELETE URL - https://127.0.0.1:8088/app/v1/services/hello-world
POST URL - https://127.0.0.1:8088:/app/v1/services/hbase-app-1
{ "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/" } }
POST URL - https://127.0.0.1:8088/app/v1/services
{ "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
{ "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 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
{ "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" } } } ] }