Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

本文档介绍了YARN上的服务发现机制及其启用步骤。

总览

一个DNS服务器实现通过标准的机制,使纱线发现服务:DNS查找。

框架ApplicationMaster将容器信息(例如主机名和IP地址)发布到YARN服务注册表中。DNS服务器通过将其转换为DNS记录(例如A记录和SRV记录)来公开YARN服务注册表中的信息。然后,客户端可以通过标准DNS查找来发现容器的IP。

对于非docker容器(Artifact为null 或Artifact类型设置为TARBALL的容器),由于同一主机上的所有容器共享相同的IP地址,因此DNS支持正向DNS查找,但不支持反向DNS查找。使用docker,它可以支持正向和反向查找,因为每个容器都可以配置为具有自己的唯一IP。此外,DNS还支持为正向和反向查找配置静态区域文件。

集群中的Docker容器IP管理

为了支持每个IP的每个容器的用例,必须使用网桥网络启动容器。但是,对于网桥网络,默认情况下,一个节点上运行的容器无法与其他节点路由。如果仅进行单节点测试,这不是问题,但是,对于多节点环境,必须使容器可与其他节点路由。

有多种解决方案,具体取决于GCE或AWS平台。请参阅特定平台文档以了解如何启用此功能。对于本地群集,解决此问题的一种方法是,在每个节点上,将docker守护程序配置为使用自定义网桥br0,该网桥可从所有节点路由。另外,使用固定的cidr选项为每个Docker守护程序分配一个以CIDR格式表示的专有的,连续的IP地址范围,例如172.21.195.240/26(64个IP),如下所示docker daemon.json中fixed-cidr选项:

“ bridge”:“ br0”
“ fixed-cidr”:“ 172.21.195.240/26”

有关详细信息,请检查如何自定义Docker桥网络

注册表DNS的命名约定

有了DNS支持,用户可以简单地以定义明确的命名格式访问其服务,如下所示:

$ {COMPONENT_INSTANCE_NAME}。$ {SERVICE_NAME}。$ {USER}。$ {DOMAIN}

例如,在人的域名的簇是yarncluster(由定义hadoop.registry.dns.domain名纱线-site.xml中),服务名为HBase的由用户部署devuser的两个部件hbasemasterRegionServer的可被访问如下:

该URL指向通常的hbase主UI

http://hbasemaster-0.hbase.devuser.yarncluster:16010 / master-status

请注意,YARN服务框架以单调递增的整数序列为每个容器分配COMPONENT_INSTANCE_NAME。例如,hbasemaster-0被分配为0,因为它是hbasemaster组件的第一个也是唯一的实例。对于regionserver组件,它可以有多个容器,因此命名为:regionserver-0regionserver-1regionserver-2 …等等

每个YARN服务组件还具有“ Multi-A记录”,用于通过RegistryDNS进行容器容错或负载平衡。命名格式定义为:

$ {COMPONENT_NAME}。$ {SERVICE_NAME}。$ {USER}。$ {DOMAIN}

例如,由Chuck启动的具有3个容器的应用程序名为www的组件将具有如下DNS记录:

www.app.chuck.example.com IN A 123.123.123.1
www.app.chuck.example.com IN A 123.123.123.1
www.app.chuck.example.com IN A 123.123.123.1

免责声明:DNS实施仍处于试验阶段。不应将其用作功能齐全的DNS。

配置注册表DNS

以下是启用注册表DNS所需的yarn-site.xml中的配置集。属性的完整列表可以在注册表DNS的“配置”部分中找到。

  <属性>
    <description> Hadoop集群关联记录的域名。</ description>
    <name> hadoop.registry.dns.domain </ name>
    <value> ycluster </ value>
  </ property>

  <属性>
    <description> DNS侦听器的端口号。默认端口是5335。
    如果使用了标准特权端口53,请确保使用jsvc支持启动DNS。</ description>
    <name> hadoop.registry.dns.bind-port </ name>
    <value> 5335 </ value>
  </ property>

  <属性>
    <说明>为群集启用了DNS功能。默认值为false。</ description>
    <name> hadoop.registry.dns.enabled </ name>
    <value> true </ value>
  </ property>

  <属性>
    <description>与DNS侦听器应绑定到的网络接口关联的地址。</ description>
    <name> hadoop.registry.dns.bind-address </ name>
    <value>本地主机</ value>
  </ property>

  <属性>
    <description>逗号分隔的主机名:端口对列表,用于定义YARN注册表的zookeeper仲裁人数</ description>
    <name> hadoop.registry.zk.quorum </ name>
    <value> localhost:2181 </ value>
  </ property>

配置注册表DNS以为172.17.0.0/24提供反向查询

  <属性>
    <description>与区域IP范围关联的网络掩码。如果指定,则用于确定
    IP范围可能,并提供适当的反向区域名称。</ description>
    <name> hadoop.registry.dns.zone-mask </ name>
    <value> 255.255.255.0 </ value>
  </ property>

  <属性>
    <说明>与群集容器关联的IP范围的指示器。该设置用于
     反向区域名称的生成。</ description>
    <name> hadoop.registry.dns.zone-subnet </ name>
    <value> 172.17.0.0 </ value>
  </ property>

启动注册表DNS服务器

默认情况下,DNS服务器在非特权端口5335上运行。使用以下命令启动服务器:

yarn --daemon启动注册表

如果将DNS服务器配置为使用标准特权端口53,则必须在yarn-env.sh文件中取消注释环境变量YARN_REGISTRYDNS_SECURE_USERYARN_REGISTRYDNS_SECURE_EXTRA_OPTS。然后,应该以root用户身份启动DNS服务器,并且在绑定端口之后,将使用jsvc减少守护程序的特权。

使您的群集使用注册表DNS

您可以编辑/etc/resolv.conf以使您的系统使用注册表DNS,如下所示,其中192.168.154.3是DNS主机的IP地址。它应出现在任何将返回NXDOMAIN以便在群集使用的域中进行查找的名称服务器之前。

域名服务器192.168.154.3

或者,如果您的组织中有公司DNS,则可以配置区域转发,以便注册表DNS解析群集使用的域的主机名。