2019独角兽企业重金招聘Python工程师标准>>>
最近在研究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文件。添加端口信息:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///data/xxx/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>100.100.100.100</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.master.ipc.address</name>
<value>0.0.0.0</value>
</property>
<property>
<name>hbase.regionserver.ipc.address</name>
<value>0.0.0.0</value>
</property>
<property>
<name>hbase.master.port</name>
<value>22001</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>22002</value>
</property>
<property>
<name>hbase.regionserver.port</name>
<value>22003</value>
</property>
<property>
<name>hbase.regionserver.info.port</name>
<value>22004</value>
</property>
</configuration>
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参数:http://hbase.apache.org/book.html