本文档介绍如何配置要在 YARN 上部署的服务。
主要有三种类型的配置
Service#configuration
)或组件级别(Component#configuration
)指定。Configuration#properties
)。yarn.service.am-restart.max-attempts
控制如果框架 AM 失败,可以重试多少次。这些配置主要用于控制框架 AM 的行为,而不是框架启动的自定义服务。SERVICE_NAME
)用于引用某些系统属性。下面介绍每种类型的配置的详细信息。
以下是配置对象通常的外观
"configuration" : { "properties" : { "yarn.service.am-restart.max-attempts" : 10 // config for the service AM }, "env" : { // The environment variables to be exported when container gets launched "env1" : "val1" }, "files" : [ // The list of configuration files to be mounted for the container { "type": "HADOOP_XML", // The format of the config file into which the "properties" are dumped "dest_file": "/etc/hadoop/conf/core-site.xml", // The location where the config file is mounted inside the container "properties" : { // The list of key/value pairs to be dumped into the config file "fs.defaultFS" : "hdfs://myhdfs" // This property will be written into core-site.xml } }, { "type": "HADOOP_XML", // The format of the config file. "src_file" : ""hdfs://mycluster/tmp/conf/yarn-site.xml"" // The location of the source config file to be downloaded "dest_file": "/etc/hadoop/conf/yarn-site.xml", // The location where the config file will be mounted inside the container/ "properties" : { "yarn.resourcemanager.webapp.address" : "${COMPONENT_INSTANCE_NAME}.${SERVICE_NAME}.${USER}.${DOMAIN}" // Merge into (or override existing property in) yarn-site.xml } } ] }
dest_file
)的格式。如果指定了 src_file
,它也是 src_file
和 dest_file
的格式。src_file
,则文件内容将以 hadoop xml 格式读取并进行解析。src_file
,则 src_file
的内容将被写入 dest_file
中,作为常量替换后。如果未指定 src_file
,则使用 properties
字段中的 content
作为键,而值将作为常量替换后写入 dest_file
中的实际内容。例如{ "type": "TEMPLATE" "dest_file": "/etc/conf/hello" "properties" : { "content" : "Hello world" } }
字符串 Hello world
将被写入容器内的 /etc/conf/hello
中的文件。
src_file
和 dest_file
的格式均由 type
定义。HADOOP_XML
和 TEMPLATE
类型。src_file
,并将其作为 dest_file
指定的位置安装在容器内。properties
字段中指定了任何属性,则会将其添加到 src_file
中(或覆盖其中现有的属性)。src_file
,则仅将 properties
字段中的属性写入 dest_file
文件。type
定义。dest_file 可以是绝对路径或相对路径。如果它是一个相对路径,则文件将位于 $PWD/conf
目录中(其中 $PWD
是容器本地目录,该目录安装到 YARN 启动的所有 docker 容器中)dest_file
中的关键/值对配置列表,格式如 type
中所定义。如果指定了 src_file
,则这些属性将被添加到 src_file
中(或覆盖其中现有的属性)。本节介绍用于配置 YARN 服务 AM 的配置。
系统范围的服务 AM 属性只能在集群 yarn-site.xml
文件中配置。
系统级配置名称 | 说明 |
---|---|
yarn.service.framework.path | 服务 AM 依赖 tarball 的 HDFS 路径。当此位置不存在文件时,AM 依赖项将由 RM 在首次启动或启动服务时上传。如果 RM 用户没有权限将文件上传到此位置,或者该位置不是世界可读的,则每次启动或启动服务时都会上传 AM 依赖项 jar。如果未指定,则假定值为 /yarn-services/${hadoop.version}/service-dep.tar.gz。 |
yarn.service.base.path | 服务工件将存储在其中的 HDFS 父目录(默认 ${user_home_dir}/.yarn/)。 |
yarn.service.client-am.retry.max-wait-ms | 服务客户端与服务 AM 通信的最大重试时间(以毫秒为单位)(默认值为 900000,即 15 分钟)。 |
yarn.service.client-am.retry-interval-ms | 服务客户端与服务 AM 通信的重试间隔(以毫秒为单位)(默认值为 2000,即 2 秒)。 |
yarn.service.queue | 服务将提交到的默认队列(默认提交到 default 队列)。请注意,可以通过队列字段指定每个服务队列,而不是通过服务级配置属性指定。 |
服务级服务 AM 配置属性可以在全局级别的群集 yarn-site.xml
中指定(有效地覆盖整个系统中的默认值),或在 Configuration
对象的 properties
字段中为每个服务指定,如下面的示例所示
{ "configuration" : { "properties" : { "yarn.service.am-restart.max-attempts" : 10 } } }
上述配置允许服务 AM 最多重试 10 次。
服务级配置名称 | 说明 |
---|---|
yarn.service.am-restart.max-attempts | 启动服务 AM 的最大次数,超过此次数后将终止服务(默认值为 20)。 |
yarn.service.am-resource.memory | 服务 AM 的内存大小(以 MB 为单位)(默认值为 1024)。 |
yarn.service.am.java.opts | 服务 AM 的其他 JVM 选项(默认值为 " -Xmx768m",将附加到未指定 -Xmx 的任何 JVM 选项)。 |
yarn.service.container-recovery.timeout.ms | 超时时间(以毫秒为单位),在此时间后,新启动的服务 AM 将释放尚未从 RM 恢复的所有先前 AM 尝试的容器(默认值为 120000,即 2 分钟)。 |
yarn.service.failure-count-reset.window | 时间间隔(以秒为单位),在此时间间隔后,将重置针对每个组件 yarn.service.container-failure-per-component.threshold 和 yarn.service.node-blacklist.threshold 评估的容器故障计数(默认值为 21600,即 6 小时)。 |
yarn.service.readiness-check-interval.seconds | 就绪性检查之间的间隔(以秒为单位)(默认值为 30 秒)。 |
yarn.service.log.include-pattern | 在应用程序完成后聚合日志时,按名称包含日志文件的正则表达式(默认情况下包含所有文件)。 |
yarn.service.log.exclude-pattern | 在应用程序完成后聚合日志时,按名称排除日志文件的正则表达式。如果日志文件名同时匹配包含和排除模式,则此文件将被排除(默认情况下不排除任何文件)。 |
yarn.service.rolling-log.include-pattern | 在应用程序运行时聚合日志时,按名称包含日志文件的正则表达式。 |
yarn.service.rolling-log.exclude-pattern | 在应用程序运行时聚合日志时,按名称排除日志文件的正则表达式。如果日志文件名同时匹配包含和排除模式,则此文件将被排除。 |
yarn.service.classpath | yarn 服务 AM 的逗号分隔的额外类路径参数。这些路径元素将附加到 YARN 服务 AM 类路径的末尾。 |
yarn.service.am.client.port-range | Yarn 服务 AM 绑定时可使用的端口范围。如果您想要所有可能的端口,请留空。例如 50000-50050,50100-50200。 |
组件级服务 AM 配置属性可以在群集 yarn-site.xml
中全局指定(有效地覆盖了系统范围内的默认值),在 Configuration
对象的 properties
字段中按服务指定,或在组件的 Configuration
对象的 properties
字段中按组件指定。
组件级配置名称 | 说明 |
---|---|
yarn.service.container-failure.retry.max | 如果容器失败,则自动重新启动容器的最大重试次数(默认 -1,表示永远)。 |
yarn.service.container-failure.retry-interval-ms | 重新启动容器的重试间隔(以毫秒为单位)(默认 30000,即 30 秒)。 |
yarn.service.container-failure.validity-interval-ms | 故障有效性间隔(以毫秒为单位)。当设置为大于 0 的值时,容器重试策略不会将此间隔之外发生的故障计入故障计数(默认 -1,表示到目前为止的所有故障都将计入故障计数)。 |
yarn.service.container-failure-per-component.threshold | 在 AM 停止服务之前,给定组件的最大绝对容器故障数(不包括重试)(默认 10)。 |
yarn.service.node-blacklist.threshold | 在 AM 将节点列入黑名单之前,节点上容器的最大故障数(不包括重试)(默认 3)。 |
yarn.service.default-readiness-check.enabled | 是否启用默认准备就绪检查(默认 true)。 |
yarn.service.container-health-threshold.percent | 当明确为特定组件或所有组件全局设置容器运行状况阈值百分比时,将安排运行状况检查监视器定期检查运行状况良好的容器的百分比。如果容器处于 READY 状态,则表示该容器运行状况良好。它以指定/默认轮询频率运行检查。它允许组件在指定/默认窗口内低于运行状况阈值,之后它会认为服务运行状况不佳并触发服务停止。启用运行状况阈值百分比时,将忽略 yarn.service.container-failure-per-component.threshold。 |
yarn.service.container-health-threshold.poll-frequency-secs | 运行状况检查监视器轮询频率。它是一项高级设置,除非服务所有者了解含义并且不想要默认设置,否则不需要设置。默认值为 10 秒。 |
yarn.service.container-health-threshold.window-secs | 运行状况检查监视器允许特定组件在低于运行状况阈值后保持该状态的时间量,之后它会认为服务运行状况不佳。默认值为 600 秒(10 分钟)。 |
yarn.service.container-health-threshold.init-delay-secs | 运行状况检查监视器在第一次检查开始前等待的初始时间量。它为服务容器首次启动提供了准备时间。默认值为 600 秒(10 分钟)。 |
yarn.service.container-state-report-as-service-state | 布尔标志表示如果此组件已完成,则服务也将终止。默认值为 false。 |
有一个组件级配置属性在 yarn-site.xml
文件中的设置与在服务规范中的设置不同。要选择将用于 Docker 容器的 Docker 网络类型,可以在服务 Configuration
properties
或组件 Configuration
properties
中设置 docker.network
。Docker 网络类型的系统范围默认值(对于 YARN 服务容器和所有其他应用程序容器)通过 yarn-site.xml
文件中的 yarn.nodemanager.runtime.linux.docker.default-container-network
属性设置。
AM 可配置为通过 Component
字段 readiness_check
为容器执行就绪性检查。容器只有在就绪性检查成功后才能达到 READY
状态。如果没有指定就绪性检查,则执行默认就绪性检查,除非通过 yarn.service.default-readiness-check.enabled
组件级配置属性禁用该检查。
当容器的 IP 可用时,默认就绪性检查会成功。还有一些可选属性,除了 IP 检查外,还配置了 DNS 检查。DNS 检查可确保在容器被视为就绪之前,容器主机名的 DNS 查找成功。例如,可以按如下方式为默认就绪性检查启用 DNS 检查
"readiness_check": { "type": "DEFAULT", "properties": { "dns.check.enabled": "true" } },
以下是 AM 可以执行的就绪性检查的可配置属性的完整列表。
就绪性检查 | 可配置属性 | 说明 |
---|---|---|
DEFAULT、HTTP、PORT | dns.check.enabled | 如果应执行 DNS 检查,则为 true(默认值为 false) |
DEFAULT、HTTP、PORT | dns.address | 用于 DNS 检查的 DNS 服务器的可选 IP:port 地址 |
HTTP | url | HTTP 响应检查所需的 URL,例如 http://${THIS_HOST}:8080 |
HTTP | timeout | 连接超时(默认值为 1000) |
HTTP | min.success | 被视为成功的最小响应代码(默认值为 200) |
HTTP | max.success | 被视为成功的最大响应代码(默认值为 299) |
PORT | port | 套接字连接所需的端口 |
PORT | timeout | 套接字连接超时(默认值为 1000) |
HTTP 就绪性检查示例
"readiness_check": { "type": "HTTP", "properties": { "url": "http://${THIS_HOST}:8080" } },
PORT 就绪性检查示例
"readiness_check": { "type": "PORT", "properties": { "port": "8080" } },
host
网络配置就绪性检查的警告如果为具有多个容器的组件配置了 host
Docker 网络,并且容器绑定到特定端口,则如果容器恰好分配在同一主机上,就会发生端口冲突。在这种情况下,HTTP 和 PORT 就绪性检查将无效。特别是,两个容器(成功绑定到端口的容器和未绑定的容器)都可能使它们的 HTTP 或 PORT 就绪性检查成功,因为这些检查针对同一 IP(主机的 IP)执行。此类服务的有效配置可以使用反亲和性放置策略,确保容器分配在不同的主机上,以便不会发生端口冲突。
服务框架为用户提供了一些常量变量,以便用户配置其服务。这些变量要么由系统动态生成,要么是静态变量,例如用户定义的服务名称。用户可以在其配置中使用这些常量,以便由服务 AM 动态替换。例如
{ "type" : "HADOOP_XML", "dest_file" : "/etc/hadoop/hbase-site.xml", "properties" : { "hbase.regionserver.hostname": "${COMPONENT_INSTANCE_NAME}.${SERVICE_NAME}.${USER}.${DOMAIN}" } }
在此处,COMPONENT_INSTANCE_NAME
和 SERVICE_NAME
是由系统替换的常量。
假设 COMPONENT_INSTANCE_NAME
是 regionserver-0
,并且 SERVICE_NAME
由用户定义为 hbase
,用户名是 devuser
,域名是 dev.test
。然后,该配置将由服务 AM 替换,并写入容器内的配置文件 /etc/hadoop/hbase-site.xml
,如下所示
<property> <name>hbase.regionserver.hostname</name> <value>regionserver-0.hbase.devuser.dev.test</value> </property>
其中 regionserver-0
是系统为此容器分配的实际组件实例名称。
名称 | 说明 |
---|---|
SERVICE_NAME | 用户定义的服务名称 |
USER | 提交服务的用户。请注意,包含“_”的用户名称将转换为使用“-”,以符合不允许使用“_”的 DNS 主机名 RFC 格式,并且所有字符都将变为小写。例如,“Bob_dev”将转换为“bob-dev” |
DOMAIN | 集群的域名 |
COMPONENT_NAME | 给定组件的名称 |
COMPONENT_INSTANCE_NAME | 给定组件实例(即容器)的名称 |
COMPONENT_ID | 给定组件的单调递增整数 |
CONTAINER_ID | 给定容器的 YARN 容器 ID |
${COMPONENT_INSTANCE_NAME}_HOST | 组件实例(即容器)的主机名,例如 REGIONSERVER-0_HOST 将被替换为组件实例的实际主机名。请注意,所有字符必须大写。 |
${COMPONENT_INSTANCE_NAME}_IP | 组件实例(即容器)的 IP,例如 REGIONSERVER-0_IP 将被替换为组件实例的实际 IP 地址。请注意,所有字符必须大写。 |
CLUSTER_FS_URI | 集群 hdfs 的 URI |