JDBC HBASE 的 Phoenix 驱动程序,重试 36 次并抛出异常
JDBC Phoenix driver for HBASE, retries 36 and throws exception
我在服务器(远程)中安装了一个独立的 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
谁能帮帮我..!
根据我的经验,这通常发生在扫描仪超时时。在您的情况下,这似乎是正确的,并且 b/c 在您的错误消息中显示:
callTimeout=60000, callDuration=80992
意思是当你的超时时间是一分钟时,你继续了 81 秒。查询 HBase 时,您要确保使用的是 rowkey 或在较新版本的 phoenix 中,还有时间戳。任何其他 HBase 查询的效率都将低得离谱。你可以尝试一些事情:
- 尝试将 HBase 超时设置为高得离谱的数字,例如 4 小时
再次更改您的查询以使用现有的行键。在一个 table 中,rowkey 的第一个字符是 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 这通常足以满足我们的目的
最后,您可能需要编写更好的 rowkey 来优化您的 phoenix 查询。这更像是一个高级主题,但它适用于所有 HBase 查询。 HBase 擅长一件事,那就是查询它的一个强大的索引:rowkey。使用 phoenix 并不能缓解这个问题。
顺便说一句,从堆栈溢出的角度来看,如果您 post 稍微了解一下您的查询和 table 结构,它会有所帮助。
好吧它的内部ip映射错误,
任何人,第一次向服务器推送请求时遇到困难, 请确保主机字符串已配置。 Modifying host here
我在服务器(远程)中安装了一个独立的 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
谁能帮帮我..!
根据我的经验,这通常发生在扫描仪超时时。在您的情况下,这似乎是正确的,并且 b/c 在您的错误消息中显示:
callTimeout=60000, callDuration=80992
意思是当你的超时时间是一分钟时,你继续了 81 秒。查询 HBase 时,您要确保使用的是 rowkey 或在较新版本的 phoenix 中,还有时间戳。任何其他 HBase 查询的效率都将低得离谱。你可以尝试一些事情:
- 尝试将 HBase 超时设置为高得离谱的数字,例如 4 小时
再次更改您的查询以使用现有的行键。在一个 table 中,rowkey 的第一个字符是 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 这通常足以满足我们的目的
最后,您可能需要编写更好的 rowkey 来优化您的 phoenix 查询。这更像是一个高级主题,但它适用于所有 HBase 查询。 HBase 擅长一件事,那就是查询它的一个强大的索引:rowkey。使用 phoenix 并不能缓解这个问题。
顺便说一句,从堆栈溢出的角度来看,如果您 post 稍微了解一下您的查询和 table 结构,它会有所帮助。
好吧它的内部ip映射错误,
任何人,第一次向服务器推送请求时遇到困难, 请确保主机字符串已配置。 Modifying host here