2011-10-29 64 views
1

我有一個網絡有一些奇怪的(據我所知)DNS服務器導致Hadoop或HBase故障。奇怪的DNS服務器導致Hadoop和HBase故障

它解決了我的主機名到我的機器不知道的某個地址(即沒有這樣的接口)。

,如果我有以下的/ etc/hosts中的條目的Hadoop確實工作:

127.0.0.1  localhost 
127.0.1.1  myhostname 

如果條目「127.0.1.1 MYHOSTNAME」是不存在的文件上傳到HDFS失敗,並抱怨說,它可以複製該文件只到0 datanodes而不是1.

但在這種情況下,HBase不起作用:從HBase外殼創建表導致NotAllMetaRegionsOnlineException(實際上由HMaster試圖綁定到DNS服務器返回的myhostname返回的錯誤地址)。

在其他網絡中,我使用下面的/ etc/hosts文件:

127.0.0.1 localhost 
192.168.1.1 myhostname 

而且兩者Hadoop和HBase的工作。 問題是,在第二個網絡中,地址是動態的,我無法將其列入/ etc/hosts以覆蓋奇怪的DNS返回的結果。

Hadoop以僞分佈模式運行。 HBase也運行在單個節點上。

更改DNS服務器的行爲不是一種選擇。 在hbase/conf/regionservers中將「localhost」更改爲127.0.0.1不會改變任何內容。

有人可以建議一種方式,我怎麼能覆蓋它的行爲,同時保持互聯網連接(我實際上通過Teamviewer在客戶端的機器上工作)。或者某種方式來配置HBase(或者它正在管理的Zookeeper)不使用主機名來確定要綁定的地址?

回答

5

幸運的是,我找到了解決這個DNS服務器問題的方法。

當本地主機名查詢時,DNS服務器返回無效地址。 默認情況下,HBase反向對本地主機名進行DNS查找以確定綁定的位置。 由於DNS服務器返回的地址無效,HMaster無法綁定。

解決方法: 在HBase的/ CONF/HBase的-site.xml中明確指定將用於主站和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> 

在這種情況下,我指定環回接口(LO)的使用爲master和regionserver。

+0

它可以用來提供環回接口有127.0.0.1(適用於12.04),而不是127.0.1.1(默認域名服務器的Ubuntu 12.10) – sunskin

+0

什麼是Windows操作系統的價值? 「lo」也可以用於Windows嗎? –