クイックスタート

このドキュメントでは、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>

サービスの例

以下は、単純なspecファイルを作成し、コードを書かずに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-sleeper`という名前の`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などの相対的な変更もサポートされています。

サービスの停止

サービスを停止すると、サービスのすべてのコンテナとアプリケーションマスターが停止しますが、hdfs上のサービスルートフォルダなど、サービスの状態は削除されません。

yarn app -stop ${SERVICE_NAME}

停止したサービスの再起動

停止したサービスの再起動は簡単です。startコマンドを呼び出すだけです!

yarn app -start ${SERVICE_NAME}

サービスの破棄

サービスを停止することに加えて、hdfs上のサービスルートフォルダとYARNサービスレジストリ内のレコードも削除します。

yarn app -destroy ${SERVICE_NAME}

REST APIによるYARN上のサービスの管理

YARN APIサーバーREST APIは、`yarn.webapp.api-service.enable`がtrueに設定されている場合、ResourceManagerの一部として有効になります。

ResourceManager Webエンドポイントを通じて、YARN上にサービスを展開できます。

詳細なAPI仕様については、APIドキュメントを参照してください。

サービスの展開

前述のサンプルサービス定義をResourceManager api-serverエンドポイントにPOSTします。

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

サービスの状態の取得

GET  https://127.0.0.1:8088/app/v1/services/${SERVICE_NAME}

サービスのコンポーネントのフレックス

PUT  https://127.0.0.1:8088/app/v1/services/${SERVICE_NAME}/components/${COMPONENT_NAME}

PUTリクエスト本文

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

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

サービスの停止

サービスを停止すると、サービスのすべてのコンテナとアプリケーションマスターが停止しますが、hdfs上のサービスルートフォルダなど、サービスの状態は削除されません。

PUT  https://127.0.0.1:8088/app/v1/services/${SERVICE_NAME}

PUTリクエスト本文

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

停止したサービスの再起動

停止したサービスの再起動は簡単です。

PUT  https://127.0.0.1:8088/app/v1/services/${SERVICE_NAME}

PUTリクエスト本文

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

サービスの破棄

サービスを停止することに加えて、hdfs上のサービスルートフォルダとYARNサービスレジストリ内のレコードも削除します。

DELETE  https://127.0.0.1:8088/app/v1/services/${SERVICE_NAME}

YARN UI2とタイムラインサービスv2を使用したサービスUI

YARN UI2には、YARNサービスを第一級の方法で表示するために、新しい`service`タブが追加されています。サービスフレームワークはデータをタイムラインサービスに投稿し、`service` UIはタイムラインサービスからデータを読み取ってコンテンツをレンダリングします。

タイムラインサービスv2の有効化

タイムラインサービス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プリンシパル名とキータブを指定する必要があります。例:一般的な設定は次のようになります。

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

`_HOST`は`principal_name`フィールドで必須です。これは、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を参照してください。