红联Linux门户
Linux帮助

HBase单机模式下远程客户端访问无响应

发布时间:2017-02-25 10:30:20来源:linux网站作者:奔跑吧小蜗牛
产生原因:客户端在调用org.apache.Hadoop.Hbase.zookeeper.MetaTableLocator类的public static RegionState getMetaRegionState(ZooKeeperWatcher zkw, int replicaId)时用到的是远程主机名而非IP地址。
org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ServerName sn = rl.getServer();
serverName = ServerName.valueOf(sn.getHostName(), sn.getPort(), sn.getStartCode());
 
代码中的getHostName()得到的就是主机名。比如远程主机在Linux上面,则在远程主机shell环境下输入hostname得到的值就是主机名,如abinge-ubuntu。为什么返回的是主机名应该跟hbase服务器那边的具体实现有关。显然如果返回的是主机名,客户端这边可能就无法根据主机名定位到meta数据所在机器。
 
解决办法:最简单的解决办法就是在客户端机器的hosts文件中配置主机名到IP地址的映射关系,假设远程主机IP为10.33.22.21,则在客户端主机的hosts文件中添加一行:
10.33.22.21 abinge-ubuntu
如此一来,客户机就可以根据主机名找到对应的IP地址,从而从服务器端获取meta数据信息。否则客户端程序就好像死机了一样,既不报错,也没有数据返回。等到超过一定时间就报超时的错误。貌似是20分钟(12000秒)。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/28687.html