最近在研究hbase,本地java client获取不了region table数据,一直报错:
Exception in thread "main" java.net.SocketTimeoutException: callTimeout=10000, callDuration=11021: at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:169) at org.apache.hadoop.hbase.client.HBaseAdmin.executeCallable(HBaseAdmin.java:4297) at org.apache.hadoop.hbase.client.HBaseAdmin.getTableDescriptor(HBaseAdmin.java:556) at org.apache.hadoop.hbase.client.HTable.getTableDescriptor(HTable.java:576) at com.navercorp.pinpoint.web.HbaseClient.main(HbaseClient.java:49)Caused by: org.apache.hadoop.hbase.MasterNotRunningException: org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException: org.apache.hadoop.net.ConnectTimeoutException: 10000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=hbase-master-01/100.100.100.100:16000] at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation$StubMaker.makeStub(ConnectionManager.java:1561) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation$MasterServiceStubMaker.makeStub(ConnectionManager.java:1581) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getKeepAliveMasterService(ConnectionManager.java:1738) at org.apache.hadoop.hbase.client.MasterCallable.prepare(MasterCallable.java:38) at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:134) ... 4 more
从异常中可以看出链接hbase-master-01/100.100.100.100:16000超时。解决顺序如下:
步骤一:
查看hbase是否启动成功:
1)可以通过jsp查看是否有进程
2)通过hbase自带shell scan数据
到hbase bin目录下执行 ./hbase shell
进入命令行再执行scan 'hbase:meta'
步骤二:
当确认hbase服务正常后,检查服务器host与本机host
服务器更改前:
服务器更改后:
去除空的localhost,并且在本机host也加上:100.100.100.100 hbase-master-01
步骤三:
如果改host也无效,那么就应该是端口没开放。这也正是我遇到的问题。
尝试telnet 100.100.100.100 16000无果,说明端口没有开。(16000端口是链接hbase master默认端口)
1)要么打开防火墙,开启16000端口
2)要么改hbase的master链接端口
打开hbase/conf/hbase-site.xml文件。添加端口信息:
hbase.rootdir file:///data/xxx/hbase hbase.cluster.distributed true hbase.zookeeper.quorum 100.100.100.100 hbase.zookeeper.property.clientPort 2181 hbase.master.ipc.address 0.0.0.0 hbase.regionserver.ipc.address 0.0.0.0 hbase.master.port 22001 hbase.master.info.port 22002 hbase.regionserver.port 22003 hbase.regionserver.info.port 22004
hbase.zookeeper.quorum 设置zk地址,如果使用hbase自带zk就填hbase地址,千万别用默认localhost
hbase.master.port 顾名思义,设置一个已开放端口
hbase.master.info.port 是hbase master的运行信息的web界面,访问100.100.100.100:22002
hbase.regionserver.port 顾名思义,设置一个已开放端口
hbase.regionserver.info.port 是hbase region的运行信息的web界面,访问100.100.100.100:22004
最后重启hbase即可。
更多hbase参数: