You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@phoenix.apache.org by "Kyle R Stehbens (Jira)" <ji...@apache.org> on 2020/09/15 17:51:00 UTC

[jira] [Comment Edited] (PHOENIX-6119) UngroupedAggregateRegionObserver Malformed connection url Error thrown when using a zookeeper quorum

    [ https://issues.apache.org/jira/browse/PHOENIX-6119?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17193272#comment-17193272 ] 

Kyle R Stehbens edited comment on PHOENIX-6119 at 9/15/20, 5:50 PM:
--------------------------------------------------------------------

I believe an elegant solution to this would be to split the ZK quorum servers by the comma, and remove any extra ports given similar to how hbase does when constructing the ZK url here:

[https://hbase.apache.org/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKConfig.html]

 


was (Author: kyle.stehbens):
I believe an elegant solution to this would be to split the ZK quorum servers by the comma, and append the default port to the members that are missing one, just as hbase does when constructing the ZK url here:

[https://hbase.apache.org/devapidocs/src-html/org/apache/hadoop/hbase/zookeeper/ZKConfig.html]

 

> UngroupedAggregateRegionObserver Malformed connection url Error thrown when using a zookeeper quorum
> ----------------------------------------------------------------------------------------------------
>
>                 Key: PHOENIX-6119
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-6119
>             Project: Phoenix
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 5.1.0
>            Reporter: Kyle R Stehbens
>            Priority: Major
>             Fix For: 5.1.0
>
>         Attachments: phoenix-master-v1.patch
>
>
> When using Phoenix with a HBase instance configured with a HA zookeeper quorum URL like the following:
> hbase.zookeeper.quorum='zk1:2181,zk2:2181,zk3:2181'
> Phoenix throws exceptions when trying to collect statistics as follows:
> {noformat}
> 2020-09-09 21:19:45,806 INFO [regionserver/regionserver1:16040-shortCompactions-0] util.QueryUtil: Creating connection with the jdbc url: jdbc:phoenix:zk1:2181,zk2:2181,zk3:2181:2181:/hbase;
>  2020-09-09 21:19:45,808 WARN [regionserver/regionserver1:16040-shortCompactions-0] coprocessor.UngroupedAggregateRegionObserver: Unable to collect stats for test_namespace:test_table
>  java.io.IOException: java.sql.SQLException: ERROR 102 (08001): Malformed connection url. :zk1:2181,zk2:2181,zk3:2181:2181:/hbase;
>  at org.apache.phoenix.schema.stats.DefaultStatisticsCollector.init(DefaultStatisticsCollector.java:124)
>  at org.apache.phoenix.coprocessor.UngroupedAggregateRegionObserver$5.run(UngroupedAggregateRegionObserver.java:1097)
>  at org.apache.phoenix.coprocessor.UngroupedAggregateRegionObserver$5.run(UngroupedAggregateRegionObserver.java:1082)
>  at java.security.AccessController.doPrivileged(Native Method)
>  at javax.security.auth.Subject.doAs(Subject.java:422)
>  at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1730)
>  at org.apache.hadoop.security.SecurityUtil.doAsUser(SecurityUtil.java:517)
>  at org.apache.hadoop.security.SecurityUtil.doAsLoginUser(SecurityUtil.java:498)
>  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  at java.lang.reflect.Method.invoke(Method.java:498)
>  at org.apache.hadoop.hbase.util.Methods.call(Methods.java:40)
>  at org.apache.hadoop.hbase.security.User.runAsLoginUser(User.java:192)
>  at org.apache.phoenix.coprocessor.UngroupedAggregateRegionObserver.preCompact(UngroupedAggregateRegionObserver.java:1081)
>  at org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost$8.call(RegionCoprocessorHost.java:656)
>  at org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost$8.call(RegionCoprocessorHost.java:652)
>  at org.apache.hadoop.hbase.coprocessor.CoprocessorHost$ObserverOperationWithResult.callObserver(CoprocessorHost.java:600)
>  at org.apache.hadoop.hbase.coprocessor.CoprocessorHost.execOperation(CoprocessorHost.java:636)
>  at org.apache.hadoop.hbase.coprocessor.CoprocessorHost.execOperationWithResult(CoprocessorHost.java:614)
>  at org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.preCompact(RegionCoprocessorHost.java:650)
>  at org.apache.hadoop.hbase.regionserver.compactions.Compactor.postCompactScannerOpen(Compactor.java:288)
>  at org.apache.hadoop.hbase.regionserver.compactions.Compactor.compact(Compactor.java:317)
>  at org.apache.hadoop.hbase.regionserver.compactions.DefaultCompactor.compact(DefaultCompactor.java:65)
>  at org.apache.hadoop.hbase.regionserver.DefaultStoreEngine$DefaultCompactionContext.compact(DefaultStoreEngine.java:126)
>  at org.apache.hadoop.hbase.regionserver.HStore.compact(HStore.java:1454)
>  at org.apache.hadoop.hbase.regionserver.HRegion.compact(HRegion.java:2260)
>  at org.apache.hadoop.hbase.regionserver.CompactSplit$CompactionRunner.doCompaction(CompactSplit.java:616)
>  at org.apache.hadoop.hbase.regionserver.CompactSplit$CompactionRunner.run(CompactSplit.java:658)
>  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>  at java.lang.Thread.run(Thread.java:748)
>  Caused by: java.sql.SQLException: ERROR 102 (08001): Malformed connection url. :zk1:2181,zk2:2181,zk3:2181:2181:/hbase;
>  at org.apache.phoenix.exception.SQLExceptionCode$Factory$1.newException(SQLExceptionCode.java:570)
>  at org.apache.phoenix.exception.SQLExceptionInfo.buildException(SQLExceptionInfo.java:195)
>  at org.apache.phoenix.jdbc.PhoenixEmbeddedDriver$ConnectionInfo.getMalFormedUrlException(PhoenixEmbeddedDriver.java:204)
>  at org.apache.phoenix.jdbc.PhoenixEmbeddedDriver$ConnectionInfo.create(PhoenixEmbeddedDriver.java:262)
>  at org.apache.phoenix.jdbc.PhoenixDriver.getConnectionQueryServices(PhoenixDriver.java:232)
>  at org.apache.phoenix.jdbc.PhoenixEmbeddedDriver.createConnection(PhoenixEmbeddedDriver.java:144)
>  at org.apache.phoenix.jdbc.PhoenixDriver.connect(PhoenixDriver.java:221)
>  at java.sql.DriverManager.getConnection(DriverManager.java:664)
>  at java.sql.DriverManager.getConnection(DriverManager.java:208)
>  at org.apache.phoenix.util.QueryUtil.getConnection(QueryUtil.java:422)
>  at org.apache.phoenix.util.QueryUtil.getConnectionOnServer(QueryUtil.java:400)
>  at org.apache.phoenix.util.QueryUtil.getConnectionOnServer(QueryUtil.java:381)
>  at org.apache.phoenix.schema.stats.DefaultStatisticsCollector.getGuidePostDepthFromSystemCatalog(DefaultStatisticsCollector.java:183)
>  at org.apache.phoenix.schema.stats.DefaultStatisticsCollector.initGuidepostDepth(DefaultStatisticsCollector.java:147)
>  at org.apache.phoenix.schema.stats.DefaultStatisticsCollector.init(DefaultStatisticsCollector.java:122){noformat}
>  
> This is because it is appending an extra default zookeeper port :2181 even though the zookeeper quorum specifies ports for each host and not adjusting the ZK hosts to remove the extra provided ports to create a valid JDBC connection string.
> This happens at this line of code:
> [https://github.com/apache/phoenix/blob/f5cc0ad49f13283fefccddf1b187da95eecdb423/phoenix-core/src/main/java/org/apache/phoenix/util/QueryUtil.java#L439]
> Because the port here is always appended to the  ZK quorum connection string.
> The ZK connection string in HBase may specify the ports for each host, which results in a malformed JDBC URL as Phoenix expects that only 1 port is append at the end of the comma separated ZK host list.
> This exception results in no statistics ever being populated in the system stats table for any phoenix tables/indices when using a zookeeper quorum with ports specified.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)