HBase Java client - unknown host: localhost.locald

2020-03-31 06:31发布

Versions: Hadoop: 2.0.0-cdh4.3.1

HBase: 0.94.6-cdh4.3.1

I am running cloudera quick start vm(Everything is running on 172.16.144.150), Here is my little HBase Java client(HbaseClient.java), HBase client is running on a remote machine, all it does is:

public static void main(String[] args) throws IOException {
    Configuration config = HBaseConfiguration.create();
    HTable table = new HTable(config, "s1");
    System.out.println(table.getTableName());
}

hbase-site.xml:

<property>
    <name>hbase.rootdir</name>
    <value>hdfs://172.16.144.150:8020/hbase</value>
  </property>
  <property>
    <name>zookeeper.znode.parent</name>
    <value>/hbase</value>
  </property>
  .......
  <property>
    <name>zookeeper.znode.rootserver</name>
    <value>root-region-server</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>172.16.144.150</value>
  </property>

When I run my java client, I get the error unknown host: localhost.localdomain:

Initiating client connection, connectString=172.16.144.150:2181 sessionTimeout=60000 watcher=hconnection
zookeeper.disableAutoWatchReset is false
The identifier of this process is 41939@smin-MacBook-Pro.local
Opening socket connection to server cloudera/172.16.144.150:2181. Will not attempt to authenticate using SASL (unknown error)
Socket connection established to cloudera/172.16.144.150:2181, initiating session
Session establishment request sent on cloudera/172.16.144.150:2181
Session establishment complete on server cloudera/172.16.144.150:2181, sessionid = 0x14076b058850045, negotiated timeout = 60000
hconnection Received ZooKeeper Event, type=None, state=SyncConnected, path=null
hconnection-0x14076b058850045 connected

locateRegionInMeta parentTable=-ROOT-, metaLocation={region=-ROOT-,,0.70236052, hostname=localhost.localdomain, port=60020}, 
attempt=0 of 10 failed; retrying after sleep of 1000 because: 
unknown host: localhost.localdomain

Reading reply sessionid:0x14076b058850045, packet:: clientPath:null serverPath:null finished:false header:: 17,3  replyHeader:: 17,460,0  request:: '/hbase,F  response:: s{20,20,1376375496826,1376375496826,0,32,0,0,0,12,430} 
Reading reply sessionid:0x14076b058850045, packet:: clientPath:null serverPath:null finished:false header:: 18,4  replyHeader:: 18,460,0  request:: '/hbase/root-region-server,T  response:: #ffffffff0001b3635323630406c6f63616c686f73742e6c6f63616c646f6d61696e6c6f63616c686f73742e6c6f63616c646f6d61696e2c36303032302c31333737333538373930303037,s{430,430,1377358805621,1377358805621,0,0,0,0,73,0,430} 
hconnection-0x14076b058850045 Retrieved 41 byte(s) of data from znode /hbase/root-region-server and set watcher; localhost.localdomain,60020,1...
Looked up root region location, connection=org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@68a7a3a7; serverName=localhost.localdomain,60020,1377358790007

locateRegionInMeta parentTable=.META., metaLocation=null, attempt=2 of 10 failed; 
retrying after sleep of 1008 because: Unable to find region for s1,,99999999999999 
after 10 tries.

标签: hbase
2条回答
Explosion°爆炸
2楼-- · 2020-03-31 07:21

Resloved the problem at the end, I think what happened was:

  1. my Hbase client (remote machine) is looking for zookeeper first. It reads local hbase-site.xml, and finds the zookeeper on the cloudera vm, it then locates Hbase master no problem.

  2. it gets to Hbase master, next step it tries to locate the regions for the specific HBase table I am asking for, in my case, it's 's1'. It finds -ROOT- first:

locateRegionInMeta parentTable=-ROOT-, metaLocation={region=-ROOT-,,0.70236052, hostname=localhost.localdomain, port=60020} table

So the problem I guess is that, in hbase, the metadata is pointing to localhost.localdomain which is correct according to the hbase-site.xml on my cloudera vm. But My HBase client remotely, of coz, has no idea what is localhost.localdomain.

by adding the ip and localhost.localdomain mapping in the /etc/hosts at my client side, it starts working.

查看更多
小情绪 Triste *
3楼-- · 2020-03-31 07:30

Add the following 2 lines in your client :

config.set("hbase.zookeeper.quorum", "172.16.144.150");
config.set("hbase.zookeeper.property.clientPort","2181");

Also add the hostname and IP of the machine into the /etc/hosts file of your client.

查看更多
登录 后发表回答