java api连接hbase时报错:java.net.UnknownHostException: unknown host: lq-bjcdata
今天在测试使用java程序做文件入库时遇到下面这样的问题,因为我自己也是刚接触Hbase数据库,所以把这次经历记录下来。
[2023-03-15 00:04:04,917] [load-pool-0] [ERROR] org.apache.hadoop.hbase.client.AsyncProcess - Failed to get region location
org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions:
Wed Mar 15 00:04:04 CST 2023, null, java.net.SocketTimeoutException: callTimeout=60000, callDuration=68276: row 'TMP_BILL_USER_202302,d6a1440322294497e7b49
59a2277,99999999999999' on table 'hbase:meta' at region=hbase:meta,,1.1588230740, hostname=lq-bjcdata88,60020,1678710826936, seqNum=0
at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.throwEnrichedException(RpcRetryingCallerWithReadReplicas.java:271)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:199)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:59)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200)
at org.apache.hadoop.hbase.client.ClientSmallReversedScanner.loadCache(ClientSmallReversedScanner.java:211)
at org.apache.hadoop.hbase.client.ClientSmallReversedScanner.next(ClientSmallReversedScanner.java:185)
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegionInMeta(ConnectionManager.java:1250)
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1156)
at org.apache.hadoop.hbase.client.AsyncProcess.submit(AsyncProcess.java:370)
at org.apache.hadoop.hbase.client.AsyncProcess.submit(AsyncProcess.java:321)
at org.apache.hadoop.hbase.client.BufferedMutatorImpl.backgroundFlushCommits(BufferedMutatorImpl.java:206)
at org.apache.hadoop.hbase.client.BufferedMutatorImpl.doMutate(BufferedMutatorImpl.java:141)
at org.apache.hadoop.hbase.client.BufferedMutatorImpl.mutate(BufferedMutatorImpl.java:105)
at com.asiainfo.process.apiput.service.InDbServiceImpl.apiLoadForList(InDbServiceImpl.java:396)
at com.asiainfo.process.apiput.service.InDbServiceImpl.apiLoadForFileName(InDbServiceImpl.java:163)
at com.asiainfo.process.apiput.thread.LoadThread.run(LoadThread.java:47)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Caused by: java.net.SocketTimeoutException: callTimeout=60000, callDuration=68276: row 'TMP_BILL_USER_202302,d6a1440322294497e7b4959a2277,99999999999999' o
n table 'hbase:meta' at region=hbase:meta,,1.1588230740, hostname=lq-bjcdata88,60020,1678710826936, seqNum=0
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:159)
at org.apache.hadoop.hbase.client.ResultBoundedCompletionService$QueueingFuture.run(ResultBoundedCompletionService.java:64)
... 3 more
Caused by: java.net.UnknownHostException: unknown host: lq-bjcdata88
at org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection.<init>(RpcClientImpl.java:303)
at org.apache.hadoop.hbase.ipc.RpcClientImpl.createConnection(RpcClientImpl.java:133)
at org.apache.hadoop.hbase.ipc.RpcClientImpl.getConnection(RpcClientImpl.java:1283)
at org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.java:1191)
at org.apache.hadoop.hbase.ipc.AbstractRpcClient.callBlockingMethod(AbstractRpcClient.java:217)
at org.apache.hadoop.hbase.ipc.AbstractRpcClient$BlockingRpcChannelImplementation.callBlockingMethod(AbstractRpcClient.java:318)
at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$BlockingStub.scan(ClientProtos.java:32831)
at org.apache.hadoop.hbase.client.ClientSmallScanner$SmallScannerCallable.call(ClientSmallScanner.java:201)
at org.apache.hadoop.hbase.client.ClientSmallScanner$SmallScannerCallable.call(ClientSmallScanner.java:180)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.java:350)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.java:324)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:126)
... 4 more
[2023-03-15 00:40:43,974] [load-pool-0] [ERROR] org.apache.hadoop.hbase.client.AsyncProcess - Failed to get region location
org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions:
Wed Mar 15 00:40:43 CST 2023, null, java.net.SocketTimeoutException: callTimeout=60000, callDuration=68249: row 'TMP_BILL_USER_202302,63b1440322292134123f9
797039d,99999999999999' on table 'hbase:meta' at region=hbase:meta,,1.1588230740, hostname=lq-bjcdata88,60020,1678710826936, seqNum=0
at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.throwEnrichedException(RpcRetryingCallerWithReadReplicas.java:271)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:199)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:59)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200)
at org.apache.hadoop.hbase.client.ClientSmallReversedScanner.loadCache(ClientSmallReversedScanner.java:211)
at org.apache.hadoop.hbase.client.ClientSmallReversedScanner.next(ClientSmallReversedScanner.java:185)
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegionInMeta(ConnectionManager.java:1250)
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1156)
at org.apache.hadoop.hbase.client.AsyncProcess.submit(AsyncProcess.java:370)
at org.apache.hadoop.hbase.client.AsyncProcess.submit(AsyncProcess.java:321)
at org.apache.hadoop.hbase.client.BufferedMutatorImpl.backgroundFlushCommits(BufferedMutatorImpl.java:206)
at org.apache.hadoop.hbase.client.BufferedMutatorImpl.doMutate(BufferedMutatorImpl.java:141)
at org.apache.hadoop.hbase.client.BufferedMutatorImpl.mutate(BufferedMutatorImpl.java:105)
at com.asiainfo.process.apiput.service.InDbServiceImpl.apiLoadForList(InDbServiceImpl.java:396)
at com.asiainfo.process.apiput.service.InDbServiceImpl.apiLoadForFileName(InDbServiceImpl.java:163)
at com.asiainfo.process.apiput.thread.LoadThread.run(LoadThread.java:47)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Caused by: java.net.SocketTimeoutException: callTimeout=60000, callDuration=68249: row 'TMP_BILL_USER_202302,63b1440322292134123f9797039d,99999999999999' o
n table 'hbase:meta' at region=hbase:meta,,1.1588230740, hostname=lq-bjcdata88,60020,1678710826936, seqNum=0
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:159)
at org.apache.hadoop.hbase.client.ResultBoundedCompletionService$QueueingFuture.run(ResultBoundedCompletionService.java:64)
... 3 more
Caused by: java.net.UnknownHostException: unknown host: lq-bjcdata88
at org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection.<init>(RpcClientImpl.java:303)
at org.apache.hadoop.hbase.ipc.RpcClientImpl.createConnection(RpcClientImpl.java:133)
at org.apache.hadoop.hbase.ipc.RpcClientImpl.getConnection(RpcClientImpl.java:1283)
at org.apache.hadoop.hbase.ipc.RpcClientImpl.call(RpcClientImpl.java:1191)
at org.apache.hadoop.hbase.ipc.AbstractRpcClient.callBlockingMethod(AbstractRpcClient.java:217)
at org.apache.hadoop.hbase.ipc.AbstractRpcClient$BlockingRpcChannelImplementation.callBlockingMethod(AbstractRpcClient.java:318)
at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$BlockingStub.scan(ClientProtos.java:32831)
at org.apache.hadoop.hbase.client.ClientSmallScanner$SmallScannerCallable.call(ClientSmallScanner.java:201)
at org.apache.hadoop.hbase.client.ClientSmallScanner$SmallScannerCallable.call(ClientSmallScanner.java:180)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.java:350)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas$RetryingRPC.call(ScannerCallableWithReplicas.java:324)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:126)
... 4 more
首先看一下部署工程所需软件的版本及配置:

在程序刚开始运行后通过查看日志发现这句话:java.net.SocketTimeoutException以为是部署的集群节点太多连接超时,又或者是网络不通造成的,但经过排查后(网上搜资料)发现并不是这样;这让我不得不再次沉思,继续看下面的报错日志;
接着就看到了这一句日志:java.net.UnknownHostException: unknown host: ,host后面是部署的数据节点主机的名称,编号88,这个异常是找不到该主机造成。因为应用程序首先连接到zk,然后zk告知region在哪个regionserver上,应用程序再连接到hbase的regionserver上读写数据。我以为是配置时主机ip或名称由于粗心写错了,然后我复制该主机名称到管理节点主机安装的Hbase配置文件目录下:/hbase-2.4.12-bcdp3.1.0/conf,打开该文件regionservers,然后查找刚才复制的主机以及该主机对应的IP,但检查后发现配置没问题,这让我又一次沉思;
最后,因为我在运行java程序主机的/etc/hosts文件里只添加了那几台管理节点,其余的92台数据节点没有添加,以为不添加也没关系,所以我抱着试一试的心态把hbase regionserver文件里其余的92台数据节点全部添加上,再次运行该程序,完美解决该问题!
该问题是我自己第一次遇到并独立解决,对自己来说是不小的收获,特此记录下来。
更多推荐



所有评论(0)