hi all,
I am installing hbase on a small cluster of 3 machines. The RegionServer unable
connect to the master. This is the log:
2011-12-15 13:46:43,415 INFO
org.apache.hadoop.hbase.regionserver.HRegionServer: Attempting connect to
Master server at localhost:60000
2011-12-15 13:47:43,473 WARN
org.apache.hadoop.hbase.regionserver.HRegionServer: Unable to connect to
master. Retrying. Error was:
java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at
sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)
at
org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
......
The lod shows this RegionServer connect to the master at a wrong
address(localhost:60000).
as far as I know, the RegionServer use ZooKeeper to find out the master's
address. so I check the HMaster's log.
this is what i find out:
...
2011-12-15 13:44:34,946 INFO
org.apache.hadoop.hbase.master.metrics.MasterMetrics: Initialized
2011-12-15 13:44:35,010 INFO
org.apache.hadoop.hbase.master.ActiveMasterManager: Master=localhost:60000
2011-12-15 13:44:37,476 INFO org.apache.zookeeper.ZooKeeper: Initiating client
connection, connectString=master:2181,slave2:2181,slave
1:2181 sessionTimeout=180000 watcher=hconnection
...
The HMaster starts at localhost:60000! I think the HMaster should start at
master:60000. "master" is the hosts where JobTracker runs.
I am using hbase 0.90.3 and zookeeper 3.3.4. This is the source code where the
HMaster get the address:
HServerAddress a = new HServerAddress(getMyAddress(this.conf));
int numHandlers = conf.getInt("hbase.regionserver.handler.count", 10);
this.rpcServer = HBaseRPC.getServer(this,
new Class<?>[]{HMasterInterface.class, HMasterRegionInterface.class},
a.getBindAddress(), a.getPort(),
numHandlers,
0, // we dont use high priority handlers in master
false, conf,
0); // this is a DNC w/o high priority handlers
this.address = new HServerAddress(rpcServer.getListenerAddress());
private static String getMyAddress(final Configuration c)
throws UnknownHostException {
// Find out our address up in DNS.
String s = DNS.getDefaultHost(c.get("hbase.master.dns.interface","default"),
c.get("hbase.master.dns.nameserver","default"));
s += ":" + c.get(HConstants.MASTER_PORT,
Integer.toString(HConstants.DEFAULT_MASTER_PORT));
return s;
}
As you can see in the code, the HMaster find its address in DNS! I have no idea
how to setup the hbase to let the HMaster find the correct address.
this is my hbase-site.xml:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/user/hadoop/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master.dns.interface</name>
<value>master</value>
</property>
<property>
<name>zookeeper.znode.master</name>
<value>master</value>
</property>
<property>
<name>hbase.master</name>
<value>master:60000</value>
</property>
</configuration>
and all the three machines are virtual machine with Ubuntu 11.04
this is the /etc/hosts :
master:
127.0.0.1 localhost ubt
127.0.0.1 ubt ubuntu
10.66.201.243 master
10.66.201.244 slave1
10.66.201.245 slave2
slave1:
127.0.0.1 localhost
127.0.1.1 slave1 ubuntu
10.66.201.243 master
10.66.201.244 slave1
10.66.201.245 slave2
slave2:
127.0.0.1 localhost
127.0.1.1 slave2 ubuntu
10.66.201.243 master
10.66.201.244 slave1
10.66.201.245 slave2
any idea on this problems?
cheers
exception