このドキュメントでは、いくつかの例となるサービス定義(Yarnfile
)について説明します。
この例が動作するには、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
にアクセスしてください。
レジストリDNSが設定されていない環境向けに、同様のIPベースの例が提供されています。この例のサービス名はhttpd-service-no-dns
です。上記で説明したhttpd-service
のYarnfile
には、いくつかの追加事項があります。httpd
コンポーネントのレディネスチェックが追加されました。
"readiness_check": { "type": "HTTP", "properties": { "url": "http://${THIS_HOST}:8080" } },
そして、httpd
がhttpd-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-proxy
はhttpd
に依存しており、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にアクセスしてページを表示します。
アプリケーションカタログは、管理者とエンドユーザーの両方にメリットのある、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イメージは、パラメータなしで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" } } } ] }