奇怪的DNS服务器导致Hadoop和HBase出现故障

Ale*_*rev 1 dns hadoop hbase apache-zookeeper

我有一个网络有一些奇怪的(据我所知)DNS服务器,导致Hadoop或HBase出现故障.

它将我的主机名解析为我的机器不知道的某个地址(即没有这样的界面).

如果我在/ etc/hosts中有以下条目,Hadoop会工作:

127.0.0.1     localhost
127.0.1.1     myhostname
Run Code Online (Sandbox Code Playgroud)

如果进入"127.0.1.1 MYHOSTNAME"是不存在的文件上传到HDFS失败,并抱怨说,它可以将文件复制只有0数据节点,而不是1.

但在这种情况下HBase不起作用:从HBase shell创建表会导致NotAllMetaRegionsOnlineException(实际上由HMaster导致尝试绑定到DNS服务器为myhostname返回的错误地址).

在其他网络中,我使用以下/ etc/hosts:

127.0.0.1   localhost
192.168.1.1 myhostname
Run Code Online (Sandbox Code Playgroud)

Hadoop和HBase都可以使用.问题是在第二个网络中,地址是动态的,我无法将其列入/ etc/hosts以覆盖奇怪的DNS返回的结果.

Hadoop以伪分布式模式运行.HBase也可以在单个节点上运行.

无法更改DNS服务器的行为.在hbase/conf/regionservers中将"localhost"更改为127.0.0.1不会改变任何内容.

有人可以提出一种方法,如何在保留互联网连接的同时覆盖其行为(我实际上是通过Teamviewer在客户端的机器上工作).或者某种方式配置HBase(或它管理的Zookeeper)不使用主机名来确定要绑定的地址?

Ale*_*rev 5

幸运的是,我找到了解决此DNS服务器问题的方法.

当本地主机名查询时,DNS服务器返回无效地址.默认情况下,HBase会在本地主机名上反向DNS查找以确定绑定的位置.由于DNS服务器返回的地址无效,因此HMaster无法绑定.

解决方法:在hbase/conf/hbase-site.xml中显式指定将用于master和regionserver的接口:

<configuration>
  <property>
    <name>hbase.master.dns.interface</name>
    <value>lo</value>
  </property>
  <property>
    <name>hbase.regionserver.dns.interface</name>
    <value>lo</value>
  </property>
</configuration>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我指定了loopback接口(lo)用于master和regionserver.