本文档介绍了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还支持为正向和反向查找配置静态区域文件。
为了支持每个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支持,用户可以简单地以定义明确的命名格式访问其服务,如下所示:
$ {COMPONENT_INSTANCE_NAME}。$ {SERVICE_NAME}。$ {USER}。$ {DOMAIN}
例如,在人的域名的簇是yarncluster(由定义hadoop.registry.dns.domain名在纱线-site.xml中),服务名为HBase的由用户部署devuser的两个部件hbasemaster和RegionServer的可被访问如下:
该URL指向通常的hbase主UI
http://hbasemaster-0.hbase.devuser.yarncluster:16010 / master-status
请注意,YARN服务框架以单调递增的整数序列为每个容器分配COMPONENT_INSTANCE_NAME。例如,hbasemaster-0被分配为0,因为它是hbasemaster组件的第一个也是唯一的实例。对于regionserver组件,它可以有多个容器,因此命名为:regionserver-0,regionserver-1,regionserver-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所需的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>