HBase unknown host异常问题解决方法

* HBase client 初始化连接流程
# 当使用HBase配置创建HTable对象时,最终会得到与RegionServer服务器的连接,使用该连接对RegionServer服务器上的数据操作
# Client先随机选择连接一台zookeeper建立连接,如果连接建立失败,重新获取与其它zookeeper的连接
# 从zookeeper服务查询region-server主机名,zookeeper会根据RegionServer的负载、状态情况返回一台可用的RegionServer
# Client端使用该主机名与RegionServer建立连接,如果连接失败,会进行重试,直接到超过重试次数或连接建立成功


Master服务启动时,会使用RegionServer的ip反向获取hostname,缓存到内存中,当client从zookeeper查询RegionServer时,会把hostname返回给client。
这里存在一个问题,如果返回的hostname在client端无法解析,client会抛unknown host异常,导致最后一步连接失败。
问题原因,在hbase-site.xml里配置了hbase.master.dns.interface,又在hosts里配置RegionServer ip对应的主机名与dns对应的主机名不致造成。
解决办法是让dns或hosts配置文件中只保留一处RegionServer ip对应的主机名的配置,删掉Master节点中hosts中配置即可


需要注意的是hbase-site.xml配置dns.interface时,/etc/hosts配置文件应该与dns保持一致


<pre>
 java.net.UnknownHostException: unknown host: hbase-node1
        at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.<init>(HBaseClient.java:302)
        at org.apache.hadoop.hbase.ipc.HBaseClient.createConnection(HBaseClient.java:281)
        at org.apache.hadoop.hbase.ipc.HBaseClient.getConnection(HBaseClient.java:1137)
        at org.apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.java:1000)
        at org.apache.hadoop.hbase.ipc.WritableRpcEngine$Invoker.invoke(WritableRpcEngine.java:150)
        at $Proxy4.getProtocolVersion(Unknown Source)
        at org.apache.hadoop.hbase.ipc.WritableRpcEngine.getProxy(WritableRpcEngine.java:183)
        at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:335)
        at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:312)
        at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:364)
        at org.apache.hadoop.hbase.ipc.HBaseRPC.waitForProxy(HBaseRPC.java:236)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getHRegionConnection(HConnectionManager.java:1309)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getHRegionConnection(HConnectionManager.java:1265)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getHRegionConnection(HConnectionManager.java:1252)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:961)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:856)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:958)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:860)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:817)
        at org.apache.hadoop.hbase.client.HTable.finishSetup(HTable.java:234)
        at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:174)
        at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:133)
</pre>
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值