在客户端实现ThreadPoolSize中的更改 - JDBC驱动程序Apache Phoenix

时间:2017-05-23 22:25:32

标签: jdbc hbase driver phoenix squirrel-sql

我最近设置了一个JDBC驱动程序,使用Apache Phoenix连接到Hadoop数据库。关于Squirrel的基本查询运行良好(例如,“select * from datafile”),但是一旦我问一个稍微复杂一点的查询(即“select column1 from datafile where column2 ='filter1'”,我就会遇到这个错误:

org.apache.phoenix.exception.PhoenixIOException: Task 
org.apache.phoenix.job.JobManager$InstrumentedJobFutureTask rejected from 
org.apache.phoenix.job.JobManager[Running, pool size = 128, active threads = 
128, queued tasks = 5000, completed tasks = 5132]

从某些搜索中,似乎我应该增加Apache Phoenix hbase.xml配置文件中的ThreadPoolSize以避免这个错误,我已经做了,将它从128增加到512.但是,它似乎没有注意到了这种变化。错误仍然存​​在,并且“池大小”仍然在错误中给出为128。

在Squirrel的Phoenix Driver设置中,我已在设置中的“Extra Class Path”下指示了包含.xml配置文件的hbase和hdfs目录的位置。

有没有办法让驱动程序“注意到”ThreadPoolSize已经改变了?

谢谢!

2 个答案:

答案 0 :(得分:1)

我在这个问题上花了很多时间......

第一步是在查询上运行explain并查找块号(例如: CLIENT 4819-CHUNK ):

explain select row sum(row2) where the_date=to_date("2018-01-01");

+------------------------------------------------------------------------------+
|                                                PLAN                          |
+------------------------------------------------------------------------------+
| CLIENT 4819-CHUNK 2339029958 ROWS 1707237752908 BYTES PARALLEL 4819-WAY FULL |
|     SERVER FILTER BY "THE_DATE" = DATE '2018-01-01 01:00:00.000'           |
|     SERVER AGGREGATE INTO DISTINCT ROWS BY ["THE_DATE"]                    |
| CLIENT MERGE SORT                                                            |
+------------------------------------------------------------------------------+
4 rows selected (0.247 seconds)
  • 检查表格中的地区和/或路标数量
  • phoenix.stats.guidepost.width属性设置为值大于,而不是默认大小100MB,并重新启动HBase Region Servers以应用更改
  • 运行以下命令更新表统计信息:   jdbc:phoenix...> UPDATE STATISTICS my_table

在Ambari / hbase配置中设置这些值:

phoenix.query.threadPoolSize:每个查询要运行的并发线程数,应设置为集群中客户端/区域服务器的vcores数。

phoenix.query.queueSize:要为任何队列运行的任务的最大队列深度,超过该队列,将拒绝尝试排队其他工作。 将此属性值设置为等于表的“块”数,因为可以在“explain”命令输出中看到。

REFERENCE https://phoenix.apache.org/update_statistics.html

答案 1 :(得分:0)

要检查的事情

  1. 确保您的凤凰客户端jar是与您的凤凰服务器兼容的版本。
  2. 从Hbase主节点获取hbase-site.xml(确保与主服务器同步设置适当的phoenix线程池大小)并添加到phoenix jar文件(使用7zip)并再次尝试运行squirrel客户端。