本文件說明如何使用 YARN 服務架構在 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>
以下是簡單的服務定義,透過撰寫簡單的規格檔案,而無需撰寫任何程式碼,即可在 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 上部署服務。請參閱 Yarn 指令,取得完整指令和選項清單。
yarn app -launch ${SERVICE_NAME} ${PATH_TO_SERVICE_DEF_FILE}
參數
例如
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
flex 指令中的 ${NUMBER_OF_CONTAINERS} 也支援相對變更,例如 +2 或 -2。
停止服務會停止服務的所有容器和 ApplicationMaster,但不會刪除服務狀態,例如 hdfs 上的服務根資料夾。
yarn app -stop ${SERVICE_NAME}
重新啟動已停止的服務很簡單,只要呼叫啟動即可!
yarn app -start ${SERVICE_NAME}
除了停止服務之外,還會刪除 hdfs 上的服務根資料夾和 YARN 服務註冊表的記錄。
yarn app -destroy ${SERVICE_NAME}
當 yarn.webapp.api-service.enable
設為 true 時,YARN API Server REST API 會在 ResourceManager 中啟動。
服務可透過 ResourceManager 網路端點部署在 YARN 上。
有關詳細的 API 規格,請參閱 API 文件。
將上述範例服務定義 POST 到 ResourceManager api-server 端點
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 }
停止服務會停止服務的所有容器和 ApplicationMaster,但不會刪除服務狀態,例如 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 中新增了一個 service
標籤,特別用於以一級方式顯示 YARN 服務。服務架構會將資料張貼到時間軸服務中,而 service
UI 會從時間軸服務中讀取資料以呈現其內容。
有關如何啟用時間軸服務 v2,請參閱 時間軸服務 v2 文件。
在 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 服務架構支援在安全的 (Kerberos) 環境中執行。使用者在啟動服務時需要指定 Kerberos 主體名稱和 keytab。例如,典型的組態如下所示
{ "name": "sample-service", ... ... "kerberos_principal" : { "principal_name" : "hdfs-demo/_HOST@EXAMPLE.COM", "keytab" : "file:///etc/security/keytabs/hdfs.headless.keytab" } }
請注意,principal_name
欄位中需要 _HOST
,因為 Hadoop 伺服器會驗證伺服器 (在本例中為 AM) 的主體在與伺服器通訊時具有主機名稱。* principal_name:啟動服務的使用者主體名稱 * keytab:keytab 的 URI。目前僅支援存在於裸機主機上的檔案。* URI 以 file://
開頭 - 儲存 keytab 的本機主機上的路徑。假設管理員會在 AM 啟動前預先在本地主機上安裝 keytab。
上述範例僅適用於非 Docker 容器的服務。YARN 服務架構也提供一級支援來管理基於 Docker 的服務。管理基於 Docker 的服務的大部分步驟都相同,但 Docker 中元件的 Artifact
類型為 DOCKER
,而 Artifact id
則為 Docker 映像的名稱。有關如何在 YARN 上設定 Docker 的詳細資訊,請查看 YARN 上的 Docker。
有了 Docker 支援,它也開啟了一組新的可能性來實作功能,例如在 YARN 上使用 DNS 來發現服務容器。有關更多詳細資訊,請查看 ServiceDiscovery。