1

我在服务器(远程)中安装了一个独立的 HBase。我编写了一个 Java 客户端,它使用 Phoenix 进行通信,并看到它尝试了 36 次尝试并因此引发异常。

HBase-Version : 1.1.5
Phoenix-core: 4.8.0-HBase-1.1

连接字符串:

Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
Connection connection = DriverManager.getConnection("jdbc:phoenix:192.168.1.xxx:2181");

我在这里错过了什么吗,因为它根本没有连接。

例外:

Exception in thread "main" java.sql.SQLException: org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions:
Mon Oct 17 11:50:18 IST 2016, null, java.net.SocketTimeoutException: callTimeout=60000, callDuration=80992: row 'SYSTEM:CATALOG,,' on table 'hbase:meta' at region=hbase:meta,,1.1588230740, hostname=HOSTNAME,16201,1476683863488, seqNum=0

有人可以帮我吗..!

4

2 回答 2

3

根据我的经验,这通常发生在扫描仪超时时。在你的情况下,这似乎是真的,以及你的错误消息中的 b/c 它说:

呼叫超时=60000,呼叫持续时间=80992

这意味着当您的超时时间为一分钟时,您持续了 81 秒。查询 HBase 时,您要确保使用的是 rowkey 或在新版本的 phoenix 中,时间戳也是如此。任何其他 HBase 查询的效率都会低得离谱。你可以尝试几件事:

  1. 尝试将您的 HBase 超时设置为一个非常高的数字,例如 4 小时
  2. 同样,更改您的查询以使用现有的行键。在我们的一个表中,行键的第一个字符是 0-9,因此我们将运行以下命令:

    select * from TABLE WHERE ROWKEY like '0%' AND [other_conditions]
    select * from TABLE WHERE ROWKEY like '1%' AND [other_conditions]
    etc...
    

    然后结合结果,或者如果我们正在计算,只需乘以 10 b/c,这通常足以满足我们的目的

  3. 最后,您可能必须编写更好的行键来优化您的凤凰查询。这更像是一个高级主题,但它适用于所有 HBase 查询。HBase 擅长一件事,那就是查询它的一个强大的索引:rowkey。使用 phoenix 并不能缓解这个问题。

顺便说一句,从堆栈溢出的角度来看,如果您发布一些有关您的查询和表结构的信息,它会有所帮助。

于 2016-10-19T17:13:44.273 回答
2

那么它的内部 ip 映射错误,
Anybody,首先将请求推送到服务器,请确保配置了主机字符串。在这里修改主机

于 2016-10-21T04:51:39.403 回答