本文說明一些範例服務定義 (Yarnfile
)。
要讓此範例運作,centos/httpd-24-centos7 映像必須包含在 docker.trusted.registries
中。有關伺服器端設定,請參閱 在 Docker 容器中執行應用程式 文件。
以下是具有兩個 httpd
實例的名為 httpd-service
服務的 Yarnfile
。還有一個 httpd 代理實例 (httpd-proxy-0),在其他兩個 httpd 實例 (httpd-0 和 httpd-1) 之間進行代理。
請注意,此範例需要登錄 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
已包含在 Hadoop 發行版中,以及必要的設定範本 httpd-proxy.conf
。首先將設定範本檔案上傳至 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-proxy-0 執行個體在針對 httpd-0 和 httpd-1 容器執行 HTTP 偵測成功後才會啟動。這有其必要性,才能在 httpd-proxy-0 的組態中使用容器的 IP。代理程式組態與前一個範例類似,其中 BalancerMember 行已變更如下
BalancerMember http://${HTTPD-0_IP}:8080 BalancerMember http://${HTTPD-1_IP}:8080
請注意,只有相依於命名元件(此案例中為 httpd
)的元件才能使用 IP 和 HOST 變數,例如 ${HTTPD-0_IP}
和 ${HTTPD-0_HOST}
,而且只有當命名元件指定準備就緒檢查時才能使用。在此,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 中的軟體狀態取得個人化檢視。此外,使用者可以使用網頁使用者介面來安裝或註冊應用程式。
使用指令啟動應用程式目錄服務
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 | 服務使用者 keytab 檔案,用於存取 HDFS。 | | PRINCIPAL | 服務使用者 Kerboers 主體。 | | SOLR_DATA_DIR | 儲存 Solr 資料的位置。 | | SOLR_STORAGE_TYPE | Solr 資料的儲存類型,支援的類型有:hdfs、local | | SPNEGO_KEYTAB | 用於驗證 HTTP 端點的 keytab 檔案位置。 | | SPNEGO_PRINCIPAL | 要用於 HTTP 端點的 Kerberos 主體。主體必須以「HTTP」/ 開頭,根據 Kerberos HTTP SPNEGO 規範。 |
安全應用程式目錄 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 映像檔啟動。傳遞參數至啟用 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" } } } ] }