HBase Java client - unknown host: localhost.localdomain

怎甘沉沦 提交于 2019-12-19 11:59:28

问题


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.

回答1:


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.




回答2:


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.



来源:https://stackoverflow.com/questions/18428722/hbase-java-client-unknown-host-localhost-localdomain

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!