)问题:JAVA api 远程hbase出错
org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions:
Tue Jul 19 16:36:05 CST 2016, null, java.net.SocketTimeoutException: callTimeout=60000, callDuration=79721: row ‘testtable,’ on table ‘hbase:meta’ at region=hbase:meta,1.1588230740, hostname=ubuntu,16020,1468916750524, seqNum=0
2)实验环境:windows10 eclipse下 Java API 远程hbase,其中hbase安装在虚拟环境下,采用NAT网络模式,hbase IP地址为192.168.137.25 。windows10 vmnet8 IP为192.168.137.1 双方都可以ping通,排除网络问题。
3)解决思路:首先 定位出错原因 :Caused by: java.net.UnknownHostException: ubuntu 无法解析ubuntu主机名。
此处的 ubuntu 为hbase所在虚拟机的主机名。解析不到ubuntu主机对应的IP地址,
(1) 首先查看ubuntu主机下hosts信息
gedit /etc/hosts
127.0.0.1localhost
127.0.1.1 ubuntu
The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
(2) java 连接代码如下:
config = HBaseConfiguration.create();
config.set(“hbase.zookeeper.quorum”, “192.168.137.25”);
config.set(“hbase.zookeeper.property.clientPort”, “2181”);
config.set(“hbase.master”, “192.168.137.25:9001”);
(3) 发现ubuntu对应的IP地址为127.0.1.1 ,添加192.168.137.25 ubuntu 并注释 127.0.1.1 ubuntu
#127.0.0.1localhost
#127.0.1.1 ubuntu
192.168.13725 ubuntu
(4) 其中在windows10 下修改 C:\Windows\System32\drivers\etc\hosts,添加
192.168.137.25 ubuntu
问题解决
原因:hbase会根据192.168.137.25 找到虚拟机主机,并且根据主机hosts文件解析IP127.0.0.1,这就造成了无法识别主机名。
4)详细错误:
org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions:
Tue Jul 19 16:36:05 CST 2016, null, java.net.SocketTimeoutException: callTimeout=60000, callDuration=79721: row ‘testtable,’ on table ‘hbase:meta’ at region=hbase:meta,1.1588230740, hostname=ubuntu,16020,1468916750524, seqNum=0
at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.throwEnrichedException(RpcRetryingCallerWithReadReplicas.java:276)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:207)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:60)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:210)
at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:326)
at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:301)
at org.apache.hadoop.hbase.client.ClientScanner.initializeScannerInConstruction(ClientScanner.java:166)
at org.apache.hadoop.hbase.client.ClientScanner.(ClientScanner.java:161)
at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:797)
at org.apache.hadoop.hbase.MetaTableAccessor.fullScan(MetaTableAccessor.java:602)
at org.apache.hadoop.hbase.MetaTableAccessor.tableExists(MetaTableAccessor.java:366)
at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:406)
at upc.hbase.utils.HbaseTable.createTable(HbaseTable.java:46)
at upc.hbase.test.HbaseTestDemo.main(HbaseTestDemo.java:20)
Caused by: java.net.SocketTimeoutException: callTimeout=60000, callDuration=79721: row ‘testtable,’ on table ‘hbase:meta’ at region=hbase:meta,1.1588230740, hostname=ubuntu,16020,1468916750524, seqNum=0
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:169)
at org.apache.hadoop.hbase.client.ResultBoundedCompletionService
Q
u
e
u
e
i
n
g
F
u
t
u
r
e
.
r
u
n
(
R
e
s
u
l
t
B
o
u
n
d
e
d
C
o
m
p
l
e
t
i
o
n
S
e
r
v
i
c
e
.
j
a
v
a
:
65
)
a
t
j
a
v
a
.
u
t
i
l
.
c
o
n
c
u
r
r
e
n
t
.
T
h
r
e
a
d
P
o
o
l
E
x
e
c
u
t
o
r
.
r
u
n
W
o
r
k
e
r
(
U
n
k
n
o
w
n
S
o
u
r
c
e
)
a
t
j
a
v
a
.
u
t
i
l
.
c
o
n
c
u
r
r
e
n
t
.
T
h
r
e
a
d
P
o
o
l
E
x
e
c
u
t
o
r
QueueingFuture.run(ResultBoundedCompletionService.java:65) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor
QueueingFuture.run(ResultBoundedCompletionService.java:65)atjava.util.concurrent.ThreadPoolExecutor.runWorker(UnknownSource)atjava.util.concurrent.ThreadPoolExecutorWorker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.net.UnknownHostException: ubuntu
at org.apache.hadoop.hbase.ipc.AbstractRpcClient
B
l
o
c
k
i
n
g
R
p
c
C
h
a
n
n
e
l
I
m
p
l
e
m
e
n
t
a
t
i
o
n
.
<
i
n
i
t
>
(
A
b
s
t
r
a
c
t
R
p
c
C
l
i
e
n
t
.
j
a
v
a
:
315
)
a
t
o
r
g
.
a
p
a
c
h
e
.
h
a
d
o
o
p
.
h
b
a
s
e
.
i
p
c
.
A
b
s
t
r
a
c
t
R
p
c
C
l
i
e
n
t
.
c
r
e
a
t
e
B
l
o
c
k
i
n
g
R
p
c
C
h
a
n
n
e
l
(
A
b
s
t
r
a
c
t
R
p
c
C
l
i
e
n
t
.
j
a
v
a
:
267
)
a
t
o
r
g
.
a
p
a
c
h
e
.
h
a
d
o
o
p
.
h
b
a
s
e
.
c
l
i
e
n
t
.
C
o
n
n
e
c
t
i
o
n
M
a
n
a
g
e
r
BlockingRpcChannelImplementation.<init>(AbstractRpcClient.java:315) at org.apache.hadoop.hbase.ipc.AbstractRpcClient.createBlockingRpcChannel(AbstractRpcClient.java:267) at org.apache.hadoop.hbase.client.ConnectionManager
BlockingRpcChannelImplementation.<init>(AbstractRpcClient.java:315)atorg.apache.hadoop.hbase.ipc.AbstractRpcClient.createBlockingRpcChannel(AbstractRpcClient.java:267)atorg.apache.hadoop.hbase.client.ConnectionManagerHConnectionImplementation.getClient(ConnectionManager.java:1639)
at org.apache.hadoop.hbase.client.ScannerCallable.prepare(ScannerCallable.java:162)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.prepare(ScannerCallableWithReplicas.java:372)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:134)