一、错误信息
************************************************************/
2020-04-20 16:13:13,439 INFO dns.PrivilegedRegistryDNSStarter (LogAdapter.java:info(51)) - registered UNIX signal handlers for [TERM, HUP, INT]
2020-04-20 16:13:13,642 INFO dns.RegistryDNS (RegistryDNS.java:initializeChannels(195)) - Opening TCP and UDP channels on /0.0.0.0 port 53
2020-04-20 16:13:13,654 ERROR dns.PrivilegedRegistryDNSStarter (PrivilegedRegistryDNSStarter.java:init(61)) - Error initializing Registry DNS
java.net.BindException: Problem binding to [centos771:53] java.net.BindException: Address already in use; For more details see: http://wiki.apache.org/hadoop/BindException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:831)
at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:736)
at org.apache.hadoop.registry.server.dns.RegistryDNS.openUDPChannel(RegistryDNS.java:1016)
at org.apache.hadoop.registry.server.dns.RegistryDNS.addNIOUDP(RegistryDNS.java:925)
at org.apache.hadoop.registry.server.dns.RegistryDNS.initializeChannels(RegistryDNS.java:196)
at org.apache.hadoop.registry.server.dns.PrivilegedRegistryDNSStarter.init(PrivilegedRegistryDNSStarter.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.commons.daemon.support.DaemonLoader.load(DaemonLoader.java:207)
Caused by: java.net.BindException: Address already in use
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.DatagramChannelImpl.bind(DatagramChannelImpl.java:702)
at sun.nio.ch.DatagramSocketAdaptor.bind(DatagramSocketAdaptor.java:91)
at org.apache.hadoop.registry.server.dns.RegistryDNS.openUDPChannel(RegistryDNS.java:1014)
... 8 more
二、分析原因
启动yarn server时需要用到dns常用端口53进行注册,错误提示显示 绑定到主机centos771的53号端口时(Problem binding to [centos771:53])地址已经被使用(Address already in use)。但经过分析,实际上是53号端口被占用,导致yarn server启用53端口不成功。
查找原因方法如下:
netstat -tunpl |grep 53 看端口号53被哪个进程占用,而且观察53号端口绑定在哪个接口上面,我的机器显示被绑定在虚拟网桥上面virbr0,这是因为cento7(1908)在安装时默认安装了虚拟服务器组件,并设置了默认网桥,配置了默认ip。
而且启动了默认的dns服务:
这样导致yarn server 无法使用53号端口,而启动失败。
三、解决办法
1、如果需要使用dns,则dns server的默认端口是53,也就是说有可能需要使用虚拟服务器或者dns服务器,则53端口是默认的端口号,这时可以考虑更改ambari server的YARN Registry DNS Bind Port,这样就不会冲突。过程如下:
(1)打开Ambari管理界面并进入YARN管理界面。
(2)点击CONFIGS,进入配置界面。
(3)点击ADVANCED进入高级设置中修改DNS端口号,将53修改成其他不被占用的端口即可。
(4)重启集群,YARN正常启动。
2、如果不需要网桥,也就是暂时不需要使用虚拟化服务设施,则可以选择关闭网桥。过程如下:
(1)查看接口信息
(2)brctl show,显示网桥信息
(3)关闭网桥ifconfig virbr0 down
(4)删除网桥
brctl delbr virbr0
(5)再查看已无网桥并没有53号端口的占用情况,且yarn启动没有警告信息。
(6)彻底关闭虚拟化服务(禁止自启动)
systemctl disable libvirtd