YARNサービスの例

このドキュメントでは、いくつかの例となるサービス定義(Yarnfile)について説明します。

Apache Webサーバー - httpd(レジストリDNS付き)

この例が動作するには、centos/httpd-24-centos7イメージがdocker.trusted.registriesに含まれている必要があります。サーバー側の設定については、Dockerコンテナでのアプリケーションの実行ドキュメントを参照してください。

以下は、2つのhttpdインスタンスを持つhttpd-serviceというサービスのYarnfileです。他の2つのhttpdインスタンス(httpd-0とhttpd-1)間をプロキシするhttpdプロキシインスタンス(httpd-proxy-0)もあります。

この例では、レジストリDNSが必要です。

{
  "name": "httpd-service",
  "version": "1.0",
  "lifetime": "3600",
  "components": [
    {
      "name": "httpd",
      "number_of_containers": 2,
      "artifact": {
        "id": "centos/httpd-24-centos7:latest",
        "type": "DOCKER"
      },
      "launch_command": "/usr/bin/run-httpd",
      "resource": {
        "cpus": 1,
        "memory": "1024"
      },
      "configuration": {
        "files": [
          {
            "type": "TEMPLATE",
            "dest_file": "/var/www/html/index.html",
            "properties": {
              "content": "<html><header><title>Title</title></header><body>Hello from ${COMPONENT_INSTANCE_NAME}!</body></html>"
            }
          }
        ]
      }
    },
    {
      "name": "httpd-proxy",
      "number_of_containers": 1,
      "artifact": {
        "id": "centos/httpd-24-centos7:latest",
        "type": "DOCKER"
      },
      "launch_command": "/usr/bin/run-httpd",
      "resource": {
        "cpus": 1,
        "memory": "1024"
      },
      "configuration": {
        "files": [
          {
            "type": "TEMPLATE",
            "dest_file": "/etc/httpd/conf.d/httpd-proxy.conf",
            "src_file": "httpd-proxy.conf"
          }
        ]
      }
    }
  ],
  "quicklinks": {
    "Apache HTTP Server": "http://httpd-proxy-0.${SERVICE_NAME}.${USER}.${DOMAIN}:8080"
  }
}

このYarnfileは、必要な設定テンプレートhttpd-proxy.confとともに、Hadoopディストリビューションに既に含まれています。まず、設定テンプレートファイルをHDFSにアップロードします。

hdfs dfs -copyFromLocal ${HADOOP_YARN_HOME}/share/hadoop/yarn/yarn-service-examples/httpd/httpd-proxy.conf .

プロキシ設定テンプレートは次のようになります。httpd-proxy-0コンテナがhttpd-0とhttpd-1コンテナの間で均等にバランスするように設定されます。

<Proxy balancer://test>
  BalancerMember http://httpd-0.${SERVICE_NAME}.${USER}.${DOMAIN}:8080
  BalancerMember http://httpd-1.${SERVICE_NAME}.${USER}.${DOMAIN}:8080
  ProxySet lbmethod=bytraffic
</Proxy>

ProxyPass "/"  "balancer://test/"
ProxyPassReverse "/"  "balancer://test/"

次に、次のコマンドでサービスを実行します。

yarn app -launch <service-name> httpd

最後の引数は、サービスのJSON仕様へのパス、またはこの場合は例となるサービスの名前です。例が見つかるディレクトリは、YARN_EXAMPLES_DIR環境変数を設定することで構成できます。

サービスが実行されたら、http://httpd-proxy-0.${SERVICE_NAME}.${USER}.${DOMAIN}:8080に移動してルートページを表示します。ページには、「Hello from httpd-0!」または「Hello from httpd-1!」が交互に表示されます。

個々のhttpd URL(http://httpd-0.${SERVICE_NAME}.${USER}.${DOMAIN}:8080およびhttp://httpd-1.${SERVICE_NAME}.${USER}.${DOMAIN}:8080)にもアクセスできます。

ホスト名が不明な場合は、RM RESTエンドポイントhttp://<RMホスト>:8088/app/v1/services/httpd-serviceにアクセスしてください。

Apache Webサーバー - httpd(レジストリDNSなし)

レジストリDNSが設定されていない環境向けに、同様のIPベースの例が提供されています。この例のサービス名はhttpd-service-no-dnsです。上記で説明したhttpd-serviceYarnfileには、いくつかの追加事項があります。httpdコンポーネントのレディネスチェックが追加されました。

      "readiness_check": {
        "type": "HTTP",
        "properties": {
          "url": "http://${THIS_HOST}:8080"
        }
      },

そして、httpdhttpd-proxyコンポーネントの依存関係として追加されました。

      "dependencies": [ "httpd" ],

これは、httpd-0とhttpd-1コンテナのHTTPプローブが成功するまで、httpd-proxy-0インスタンスが開始されないことを意味します。これは、コンテナのIPをhttpd-proxy-0の設定で使用できるようにするために必要です。プロキシ設定は前の例と似ていますが、BalancerMember行は次のように変更されています。

  BalancerMember http://${HTTPD-0_IP}:8080
  BalancerMember http://${HTTPD-1_IP}:8080

${HTTPD-0_IP}${HTTPD-0_HOST}などのIPとHOST変数は、名前付きコンポーネント(この場合はhttpd)に依存関係を持つコンポーネントによってのみ使用されるべきであり、名前付きコンポーネントがレディネスチェックを指定している場合にのみ使用されるべきです。ここでは、httpd-proxyhttpdに依存しており、httpdはHTTPレディネスチェックを持っています。依存関係とレディネスチェックがない場合、httpd-proxy-0コンテナはhttpd-0とhttp-1コンテナと並行して開始され、httpd-0とhttpd-1のIPとホストはまだ割り当てられていません。

他の変数は、どのコンポーネントでも使用できます。

サービスを作成する前に、プロキシ設定をHDFSにアップロードします。

hdfs dfs -copyFromLocal ${HADOOP_YARN_HOME}/share/hadoop/yarn/yarn-service-examples/httpd-no-dns/httpd-proxy-no-dns.conf .

次に、次のコマンドでサービスを実行します。

yarn app -launch <service-name> httpd-no-dns

ここで、service-nameはオプションです。省略した場合は、Yarnfileで定義されている名前が使用されます。

RM RESTエンドポイントhttp://<RMホスト>:8088/app/v1/services/httpd-serviceでIPを検索します。次に、各IPのポート8080にアクセスしてページを表示します。

アプリケーションカタログ - appcatalog

アプリケーションカタログは、管理者とエンドユーザーの両方にメリットのある、Hadoopソフトウェアの展開のための多くのエキサイティングな新機能を導入しています。アプリケーションカタログを使用すると、ユーザーはHadoop内のソフトウェアの状態をパーソナライズされたビューで確認できます。さらに、ユーザーはWebベースのユーザーインターフェースを使用してアプリケーションをインストールまたは登録できます。

次のコマンドでアプリケーションカタログサービスを開始します。

yarn app -launch <service-name> appcatalog

ここで、service-nameはユーザーが定義した名前です。

アプリケーションカタログの展開の進捗状況は、リソースマネージャーUIにあります。サービスがSTABLE状態になると、アプリケーションカタログUIはhttp://appcatalog.${SERVICE_NAME}.${USER}.${DOMAIN}:8080/で利用可能になります。

セキュアクラスタの場合、アプリケーションカタログのKerberos設定は、環境変数設定を使用してYARNサービスJSONで構成できます。

環境変数 説明
YARN_CONTAINER_RUNTIME_DOCKER_MOUNTS /etc/hadoop/conf:/etc/hadoop/conf:ro,/etc/krb5.conf:/etc/krb5.conf:ro,/etc/security/keytabs/yarn.service.keytab:/etc/security/keytabs/yarn.service.keytab:ro,/etc/security/keytabs/spnego.service.keytab:/etc/security/keytabs/spnego.service.keytab:ro Hadoop設定、Kerberos krb5.conf、およびKerberos keytabファイルのリストのコンテナマウントパス。
SPNEGO_KEYTAB /etc/security/keytabs/spnego.service.keytab アプリケーションカタログのサービスプリンシパル。
SPNEGO_PRINCIPAL HTTP/appcatalog.catalog.yarn.example.com@EXAMPLE.COM アプリケーションカタログのサービスプリンシパル。
KEYTAB /etc/security/keytabs/yarn.service.ketab YARNサービスアプリケーションマスターで使用されるkeytabファイルへのパス。
PRINCIPAL yarn/_HOST@EXAMPLE.COM YARNサービスアプリケーションマスターで使用されるサービスプリンシパル。

アプリケーションカタログの環境オプション

| 環境変数 | 説明 | | KEYTAB | HDFSにアクセスするためのサービスユーザーkeytabファイル。 | | PRINCIPAL | サービスユーザーKerberosプリンシパル。 | | SOLR_DATA_DIR | Solrデータを格納する場所。 | | SOLR_STORAGE_TYPE | Solrデータのストレージタイプ。サポートされるタイプはhdfs、localです。 | | SPNEGO_KEYTAB | HTTPエンドポイントの認証に使用されるkeytabファイルの場所。 | | SPNEGO_PRINCIPAL | HTTPエンドポイントに使用されるKerberosプリンシパル。Kerberos HTTP SPNEGO仕様に従って、プリンシパルは「HTTP」/で始まる必要があります。 |

セキュアアプリケーションカタログYarnfileの例

{
  "name": "catalog",
  "kerberos_principal" : {
    "principal_name" : "catalog/_HOST@EXAMPLE.COM",
    "keytab" : "file:///etc/security/keytabs/catalog.service.keytab"
  },
  "version": "1",
  "components" :
  [
    {
      "name": "appcatalog",
      "number_of_containers": 1,
      "artifact": {
        "id": "apache/hadoop-yarn-applications-catalog-docker:3.3.0-SNAPSHOT",
        "type": "DOCKER"
      },
      "resource": {
        "cpus": 1,
        "memory": "256"
      },
      "configuration": {
        "env": {
          "YARN_CONTAINER_RUNTIME_DOCKER_RUN_OVERRIDE_DISABLE":"true",
          "YARN_CONTAINER_RUNTIME_DOCKER_MOUNTS":"/etc/hadoop/conf:/etc/hadoop/conf:ro,/etc/krb5.conf:/etc/krb5.conf:ro,/etc/security/keytabs/catalog.service.keytab:/etc/security/keytabs/hbase.service.keytab:ro,/etc/security/keytabs/spnego.service.keytab:/etc/security/keytabs/spnego.service.keytab:ro",
          "SPNEGO_KEYTAB":"/etc/security/keytabs/spnego.service.keytab",
          "SPNEGO_PRINCIPAL":"HTTP/host-3.example.com@EXAMPLE.COM",
          "KEYTAB":"/etc/security/keytabs/catalog.service.keytab",
          "PRINCIPAL":"catalog/host3.example.com@EXAMPLE.COM",
          "SOLR_DATA_DIR":"hdfs://host-1.example.com:9000/tmp/solr",
          "SOLR_UPDATE_LOG":"hdfs://host-1.example.com:9000/tmp/solr",
          "SOLR_STORAGE_TYPE":"hdfs"
        },
        "properties": {
          "docker.network": "host"
        }
      }
    }
  ]
}

DockerイメージENTRYPOINTサポート

Dockerイメージは、パラメータなしでDockerイメージの起動を有効にするためにENTRYPOINTを使用してビルドされる場合があります。ENTRYPOINT対応のイメージにパラメータを渡す場合、launch_commandはコンマ(,)で区切られます。

{
  "name": "sleeper-service",
  "version": "1.0",
  "components" :
  [
    {
      "name": "sleeper",
      "number_of_containers": 2,
      "artifact": {
        "id": "hadoop/centos:latest",
        "type": "DOCKER"
      },
      "launch_command": "sleep,90000",
      "resource": {
        "cpus": 1,
        "memory": "256"
      },
      "restart_policy": "ON_FAILURE",
      "configuration": {
        "env": {
          "YARN_CONTAINER_RUNTIME_DOCKER_RUN_OVERRIDE_DISABLE":"true"
        },
        "properties": {
          "docker.network": "host"
        }
      }
    }
  ]
}