本文档描述了一些示例服务定义 (Yarnfile
)。
要使此示例正常工作,centos/httpd-24-centos7 镜像必须包含在 docker.trusted.registries
中。有关服务器端配置,请参阅 在 Docker 容器中运行应用程序 文档。
以下是名为 httpd-service
的服务的 Yarnfile
,其中包含两个 httpd
实例。还有一个 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 host>: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 实例才会启动。这是必需的,以便可以在 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 host>: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 密钥表文件的容器挂载路径。 |
SPNEGO_KEYTAB | /etc/security/keytabs/spnego.service.keytab | 应用程序目录的服务主体。 |
SPNEGO_PRINCIPAL | HTTP/[email protected] | 应用程序目录的服务主体。 |
KEYTAB | /etc/security/keytabs/yarn.service.ketab | YARN 服务应用程序主控程序使用的密钥表文件路径。 |
PRINCIPAL | yarn/[email protected] | YARN 服务应用程序主控程序使用的服务主体。 |
应用程序目录环境选项
| 环境变量 | 说明 | | KEYTAB | 用于访问 HDFS 的服务用户密钥表文件。 | | PRINCIPAL | 服务用户 Kerboers 主体。 | | SOLR_DATA_DIR | 存储 Solr 数据的位置。 | | SOLR_STORAGE_TYPE | Solr 数据的存储类型,支持的类型有:hdfs、local | | SPNEGO_KEYTAB | 用于对 HTTP 端点进行身份验证的密钥表文件的位置。 | | SPNEGO_PRINCIPAL | 用于 HTTP 端点的 Kerberos 主体。根据 Kerberos HTTP SPNEGO 规范,主体必须以“HTTP”/开头。 |
安全的应用程序目录 Yarnfile 示例
{ "name": "catalog", "kerberos_principal" : { "principal_name" : "catalog/[email protected]", "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/[email protected]", "KEYTAB":"/etc/security/keytabs/catalog.service.keytab", "PRINCIPAL":"catalog/[email protected]", "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" } } } ] }