在客户端实现线程池大小的更改-jdbc驱动程序apachephoenix

ykejflvf  于 2021-06-09  发布在  Hbase
关注(0)|答案(2)|浏览(485)

我最近使用ApachePhoenix设置了一个jdbc驱动程序来连接HadoopDB。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驱动程序设置中,我已经指出了hbase和hdfs目录的位置,其中包含安装程序中“extra class path”下的.xml配置文件。
有没有办法让驱动程序“注意到”threadpoolsize已经更改?
谢谢您!

swvgeqrz

swvgeqrz1#

有几件事要检查
确保您的phoenix客户端jar与您的phoenix服务器的版本兼容。
从您的hbase主节点获取hbase-site.xml(确保phoenix线程池大小与主节点同步设置),并添加到phoenix jar文件(使用7zip),然后再次尝试运行squirrel客户端。

a7qyws3x

a7qyws3x2#

我在这个问题上花了很多时间。。。
第一步是运行 explain 在查询中查找chunks编号(例如: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区域服务器以应用更改
通过运行以下命令更新表统计信息: `jdbc:phoenix...> UPDATE STATISTICS my_table` 在ambari/hbase config中设置这些值: `phoenix.query.threadPoolSize:` 为每个查询运行的并发线程数,应设置为群集中客户端/区域服务器上的vCore数。 `phoenix.query.queueSize:` 要为任何队列运行的任务的最大队列深度,超过该深度时,将拒绝对其他工作进行排队的尝试。将此属性值设置为等于表的“chunks”数,如“explain”命令输出中所示。
参考https://phoenix.apache.org/update_statistics.html

相关问题