用于HBASE的JDBC Phoenix驱动程序,重试36并抛出异常

时间:2016-10-17 06:25:47

标签: java jdbc hbase phoenix phoenix-channels

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

update Tatkal_Merge set [br_complete_qc]='Y',br_complete_Qc_date=GETDATE() where act_no in (
  select act_no 
  FROM [Tatkal].[dbo].[Tatkal_Merge] 
  where [br_complete_qc]='N' and 
  data_date+br_code not in (select distinct data_date+br_code FROM [Tatkal].[dbo].[Tatkal_Merge] where pin_scan='N')
  )

的ConnectionString:

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");

有人可以帮助我......!

2 个答案:

答案 0 :(得分:3)

根据我的经验,这通常发生在您在扫描仪上获得超时时。在你的情况下,这似乎是真的,你的错误信息中的b / c也是如此:

  

callTimeout = 60000,callDuration = 80992

意味着当你的超时是一分钟时你继续了81秒。查询HBase时,您需要确保使用的是rowkey或更新版本的phoenix,即时间戳。任何其他HBase查询都将是非常低效的。你可以尝试一些事情:

  1. 尝试将HBase超时设置为一个非常高的数字,例如4小时
  2. 再次,更改您的查询以使用现有的rowkey。在我们拥有的一个表中,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通常足以满足我们的目的

  3. 最后,您可能需要编写更好的rowkey来优化您的凤凰查询。这是一个高级主题,但对所有HBase查询都是如此。 HBase擅长于一件事,而且它正在查询其强大的索引:rowkey。使用凤凰并没有缓解这个问题。

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

答案 1 :(得分:2)

那么它的内部ip映射错误,
任何人,努力首先向服务器推送请求,请确保主机字符串已配置。 Modifying host here