2012-03-08 101 views
7

我正在努力使用VirtualBox中的「主機專用」適配器來設置具有2個節點的Hbase分佈式集羣,其中一個是我的機器,另一個是VM。Hbase:如何指定Hbase主機的主機名

我的問題是區域服務器(來自VM機器)無法連接到在主機上運行的Hbase主機。雖然在HBase的殼,我可以列出,VM機(「奴隸」),日誌總是顯示

org.apache.hadoop.hbase.regionserver.HRegionServer: Unable to connect to master.  Retrying. Error was: 
java.net.ConnectException: Connection refused 

此前在創建表,...,在RegionServer的,我成功地已經設置的Hadoop,HDFS和MapReduce上這個集羣有2個節點,分別命名爲'master','slave','master'作爲主節點,'master'和'slave'都作爲從節點,這些名稱綁定到VirtualBox的vboxnet0接口(主機名在/ etc/hostname不同)。我還將每個節點的「slave.host.name」屬性指定爲「主」和「從屬」。

看起來,'master'上的Hbase master始終以'localhost'主機名從slave機器運行,我無法通過'master'主機名telnet到hbase master。那麼是否有任何方法可以將Hbase master的主機名用作'master',我已經試過指定一些關於ZooKeeper,Master,RegionServer的DNS接口的屬性來使用主從設備之間的內部接口,但它仍然不能工作。

的/ etc /兩種,就像這樣

127.0.0.1 localhost 
127.0.0.1 ubuntu.mymachine 

# For Hadoop 
192.168.56.1 master 
192.168.56.101 slave 

# The following lines are desirable for IPv6 capable hosts 
::1  ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 

回答

2

我的主機文件的主機就像

127.0.0.1本地主機

192.168.2.118 shashwat.machine.com shashwat

使您的主機文件如下:

127.0.0.1本地主機

Hadoop的

192.168.56.1主

192.168.56.101從屬

和HBase的CONF放以下輸入:

<property> 
<name>hbase.rootdir</name> 
<value>hdfs://master:9000/hbase</value> 
</property> 
<property> 
<name>hbase.master</name> 
<value>master:60000</value> 
<description>The host and port that the HBase master runs at.</description> 
</property> 
<property> 
<name>hbase.regionserver.port</name> 
<value>60020</value> 
<description>The host and port that the HBase master runs at.</description> 
<property> 
<name>hbase.cluster.distributed</name> 
<value>true</value> 
</property> 
<property> 
<name>hbase.tmp.dir</name> 
<value>/home/cluster/Hadoop/hbase-0.90.4/temp</value> 
</property> 
<property> 
<name>hbase.zookeeper.quorum</name> 
<value>master</value> 
</property> 
<property> 
<name>dfs.replication</name> 
<value>2</value> 
</property> 
<property> 
<name>hbase.zookeeper.property.clientPort</name> 
<value>2181</value> 
<description>Property from ZooKeeper's config zoo.cfg. 
The port at which the clients will connect. 
</description> 
</property> 

如果你使用的是localhost和ywhere刪除,並以 「主人」,這是名稱爲您HOSTFILE的NameNode ....

一個更換morething你可以做

須藤gedit中的/ etc /主機名

這將打開默認的Ubuntu的主機名文件將在那裏,使它成爲主人。並重新啓動您的系統。

對於HBase的在 「RegionServer的」 文件中指定內部的conf目錄把這些條目

主 從

和restart.everything。

+0

很好的回答。一個新的查詢,是否可以在不編輯'hosts'文件的情況下創建一個HBase集羣? (我特意指窗口中) – 2015-01-21 06:46:29

0

有跡象表明,解決這一類問題對我來說兩件事情:

1)刪除所有「localhost」的名稱,只有指向HMASTER節點的名稱127.0.0.1。

2)運行「主機X」您的HBase的主節點,以確保主機名匹配什麼是在/ etc/hosts中。

並非是一個網絡高手,我不能說,爲什麼這很重要,但它是:)

0

大部分時間誤差是從動物園管理員說發送錯誤的主機名來。

你可以查閱一下動物園管理員將作爲HBase的主服務器主機:

找到動物園管理員bin文件夾:

bin/zkCli.sh -server 127.0.0.1:2181 
get /hbase/master 

這應該給你HBase的主IP這個問題的答案動物園管理員,所以這個IP必須是可訪問的。

2

@Infinity提供的答案似乎屬於版本〜0.9.4。

For version 1.1.4。

根據從

org.apache.hadoop.hbase.master.HMaster 

源代碼中的配置應該是:

<property> 
    <name>hbase.master.hostname</name> 
    <value>master.local</value> 
    <!-- master.local is the DNS name in my network pointing to hbase master --> 
    </property> 

設置該值後,區域服務器能連接到主的HBase; 然而,在我的環境中,區域服務器抱怨:在我安裝在我所有的節點甲骨文JDK 8,而不是開放式的jdk-7的

com.google.protobuf.ServiceException: java.net.SocketException: Invalid argument 

問題就消失了。

所以在最後,這裏是我的解決方案:

  • 使用DNS名稱服務器,而不是設置/ etc/hosts文件,如HBase的是主機名非常 挑剔,似乎需要DNS查找以及反向 DNS查找。

  • 升級JDK到Oracle 8

  • 使用的設定項目上述 。