Подключение к YARN через REST API
Обзор
Hadoop предоставляет набор REST API для всех компонентов YARN. Они обеспечивают URI-доступ к кластеру, нодам, приложениям и истории приложений.
Большинство API-интерфейсов YARN поддерживают только запросы GET
, но некоторые компоненты YARN, такие как ResourceManager, поддерживают POST
. В заголовке запроса используются только поля Accept
и Accept-Encoding
, все остальные поля заголовка игнорируются.
Чтобы указать, какой формат нужен в ответе, необходимо передать в поле Accept
значение XML
или JSON
. Формат по умолчанию — JSON.
Чтобы получить ответ в формате gzip-архива, передайте gzip
в поле Accept-Encoding
.
Синтаксис URI для YARN REST API выглядит так:
http://<IP:PORT>/ws/<version>/<resourcepath>
Здесь:
-
<IP:PORT>
— IP или FQDN хоста компонента и его порт; -
<version>
— версия API; -
<resourcepath>
— путь, который определяет, какую функцию API вызывать.
Пример запроса к Timeline server:
$ curl http://127.0.0.1:8188/ws/v1/timeline?user.name=admin
В ответе содержится информация о сервере:
{"About":"Timeline API","timeline-service-version":"3.1.2","timeline-service-build-version":"3.1.2 from 2bfc95569d9993d795ded4878847f3f3db76e77c by jenkins source checksum 7954337bcd9688eca8aa32720d2c74","timeline-service-version-built-on":"2023-09-07T08:01Z","hadoop-version":"3.1.2","hadoop-build-version":"3.1.2 from 2bfc95569d9993d795ded4878847f3f3db76e77c by jenkins source checksum 38903f2495a81dfd8e2d8fc4f659a92","hadoop-version-built-on":"2023-09-07T07:57Z"}
ПРИМЕЧАНИЕ
Поля в теле ответа не ограничены по количеству и не имеют определенного порядка. При разработке приложений на базе YARN REST API используйте парсеры, которые не зависят от конкретного порядка. |
ResourceManager API
ResourceManager REST API обеспечивает доступ к информации о кластере и позволяет управлять приложениями. Полная спецификация API доступна в статье ResourceManager REST API’s.
Пример использования REST API ResourceManager для добавления нового приложения:
-
Запросите ID для приложения с помощью команды:
$ curl -X POST http://127.0.0.1:8088/ws/v1/cluster/apps/new-application?user.name=admin
Ответ сервера:
{"application-id":"application_1705573015955_0001","maximum-resource-capability":{"memory":7057,"vCores":2,"resourceInformations":{"resourceInformation":[{"maximumAllocation":9223372036854775807,"minimumAllocation":0,"name":"memory-mb","resourceType":"COUNTABLE","units":"Mi","value":7057},{"maximumAllocation":9223372036854775807,"minimumAllocation":0,"name":"vcores","resourceType":"COUNTABLE","units":"","value":2}]}}}[admin@elenas-adh2 ~]$
-
В ответе сервера содержится ID приложения и информация о доступных ресурсах. Создайте JSON-файл с параметрами приложения и передайте его в ResourceManager с помощью команды:
$ curl -v -X POST -d @example-app.json -H "Content-type: application/json" http://127.0.0.1:8088/ws/v1/cluster/apps/?user.name=admin
Пример информации о приложении{ "application-id":"application_1705573015955_0001", "application-name":"test", "am-container-spec": { "local-resources": { "entry": [ { "key":"hadoop-mapreduce-examples.jar", "value": { "resource":"hdfs://127.0.0.2:8020/tmp/hadoop-mapreduce-examples.jar", "type":"FILE", "visibility":"APPLICATION", "size": "30897", "timestamp": "1405452071209" } } ] }, "commands": { "command":"{{JAVA_HOME}}/bin/java -Xmx10m org.apache.hadoop.yarn.applications.distributedshell.ApplicationMaster --container_memory 10 --container_vcores 1 --num_containers 1 --priority 0 1><LOG_DIR>/AppMaster.stdout 2><LOG_DIR>/AppMaster.stderr" }, "environment": { "entry": [ { "key": "DISTRIBUTEDSHELLSCRIPTTIMESTAMP", "value": "1405459400754" }, { "key": "CLASSPATH", "value": "{{CLASSPATH}}<CPS>./*<CPS>{{HADOOP_CONF_DIR}}<CPS>{{HADOOP_COMMON_HOME}}/share/hadoop/common/*<CPS>{{HADOOP_COMMON_HOME}}/share/hadoop/common/lib/*<CPS>{{HADOOP_HDFS_HOME}}/share/hadoop/hdfs/*<CPS>{{HADOOP_HDFS_HOME}}/share/hadoop/hdfs/lib/*<CPS>{{HADOOP_YARN_HOME}}/share/hadoop/yarn/*<CPS>{{HADOOP_YARN_HOME}}/share/hadoop/yarn/lib/*<CPS>./log4j.properties" }, { "key": "DISTRIBUTEDSHELLSCRIPTLEN", "value": "6" }, { "key": "DISTRIBUTEDSHELLSCRIPTLOCATION", "value": "hdfs://127.0.0.2:8020/tmp/hadoop-mapreduce-examples.jar" } ] } }, "unmanaged-AM":"false", "max-app-attempts":"2", "resource": { "memory":"1024", "vCores":"1" }, "application-type":"YARN", "keep-containers-across-application-attempts":"false" }
Если запрос был отправлен успешно, сервер возвращает код
HTTP/1.1 202 Accepted
и URL-адрес приложения, по которому можно отслеживать его статус.
Чтобы включить поддержку CORS только для ResourceManager, установите следующие параметры конфигурации:
-
core-site.xml — установите значение параметра
hadoop.http.filter.initializers
равнымorg.apache.hadoop.security.HttpCrossOriginFilterInitializer
; -
yarn-site.xml — установите значение параметра
yarn.resourcemanager.webapp.cross-origin.enabled
равнымtrue
.
NodeManager
NodeManager REST API предоставляет информацию о нодах, приложениях и контейнерах, работающих на этой ноде. Полная спецификация API доступна в статье NodeManager REST API’s.
Пример команды, которая выводит информацию о ноде:
$ curl -X GET http://<IP>:8042/ws/v1/node/info?user.name=admin
Здесь <IP>
— это IP-адрес или FQDN хоста.
Чтобы включить поддержку CORS для NodeManager, установите следующие параметры конфигурации:
-
core-site.xml — установите значение параметра
hadoop.http.filter.initializers
равнымorg.apache.hadoop.security.HttpCrossOriginFilterInitializer
; -
yarn-site.xml — установите значение параметра
yarn.nodemanager.webapp.cross-origin.enabled
равнымtrue
.
Timeline Server
Timeline Server REST API поддерживает два метода: GET
и POST
. На данный момент доступны две версии API:
Пример команды, которая выводит список доменов указанного владельца:
$ curl -X GET http://<IP>:8188/ws/v1/timeline/domain?owner=<owner>
Здесь <IP>
— это IP-адрес или FQDN хоста, а <owner>
— это имя владельца домена.