Unable to connect to HBase using Phoenix JDBC Driver

Unable to connect to HBase using Phoenix JDBC Driver

Dhaval Modi
9 posts
Hi All,
 
I am trying to connect to HBase using Phoenix JDBC Driver and getting below error:
This is simple implementation of JDBC connection manager. 
 
=============================================================
Caused by: java.lang.IncompatibleClassChangeError: Class org.apache.hadoop.hbase.protobuf.generated.ClusterIdProtos$ClusterId$Builder does not implement the requested interface org.apache.hadoop.hbase.shaded.com.google.protobuf.Message$Builder
        at org.apache.hadoop.hbase.protobuf.ProtobufUtil.mergeFrom(ProtobufUtil.java:3154)
        at org.apache.hadoop.hbase.ClusterId.parseFrom(ClusterId.java:69)
        at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:75)
        at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:105)
        at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.retrieveClusterId(ConnectionManager.java:879)
        at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:635)
=============================================================
 
Based on my research it seems, I need to use some shaded package of phoenix-client. I am not able to figure it out.
 
Regards,
Dhaval Modi
[hidden email]
Reply |  Threaded |  More 

Re: Unable to connect to HBase using Phoenix JDBC Driver

Dhaval Modi
9 posts
Apologies, I missed important details.
 
Phoenix version: 4.9.0-HBase-1.1
HBase Version: 1.1.2

Regards,
Dhaval Modi
[hidden email]

On 1 February 2017 at 14:51, Dhaval Modi  <[hidden email]> wrote:
Hi All,
 
I am trying to connect to HBase using Phoenix JDBC Driver and getting below error:
This is simple implementation of JDBC connection manager. 
 
=============================================================
Caused by: java.lang.IncompatibleClassChangeError: Class org.apache.hadoop.hbase.protobuf.generated.ClusterIdProtos$ClusterId$Builder does not implement the requested interface org.apache.hadoop.hbase.shaded.com.google.protobuf.Message$Builder
        at org.apache.hadoop.hbase.protobuf.ProtobufUtil.mergeFrom(ProtobufUtil.java:3154)
        at org.apache.hadoop.hbase.ClusterId.parseFrom(ClusterId.java:69)
        at org.apache.hadoop.hbase.zookeeper.ZKClusterId.readClusterIdZNode(ZKClusterId.java:75)
        at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getClusterId(ZooKeeperRegistry.java:105)
        at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.retrieveClusterId(ConnectionManager.java:879)
        at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:635)
=============================================================
 
Based on my research it seems, I need to use some shaded package of phoenix-client. I am not able to figure it out.
 
Regards,
Dhaval Modi
[hidden email]
Reply |  Threaded |  More 

Re: Unable to connect to HBase using Phoenix JDBC Driver

Kumar Anshuman
2 posts
Hi Dhaval,
 
Have you added HBase-protocol jar in your dependencies?
This error shows that you have either the incompatible version of HBase-protocol jar or you are missing it( might be missed out from the classpath).
Try to include the proper version(for this case 1.1.2) of the jar or set this jar as HADOOP_CLASSPATH and see if it works.
 
Regards,
Kumar Anshuman
 
Reply |  Threaded |  More 

Re: Unable to connect to HBase using Phoenix JDBC Driver

Dhaval Modi
9 posts
Thanks Anshuman. It was really helpful. 
 
I added HBase-protocol jar in dependency and it got resolved.
 
But now I am getting different error:
 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Caused by: java.lang.IllegalArgumentException: Can't find method newStub in org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService!
        at org.apache.hadoop.hbase.util.Methods.call(Methods.java:45)
        at org.apache.hadoop.hbase.protobuf.ProtobufUtil.newServiceStub(ProtobufUtil.java:1675)
        at org.apache.hadoop.hbase.client.HTable$16.call(HTable.java:1750)
        ... 4 more
Caused by: java.lang.NoSuchMethodException: org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService.newStub(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcChannel)
        at java.lang.Class.getMethod(Class.java:1786)
        at org.apache.hadoop.hbase.util.Methods.call(Methods.java:38)
        ... 6 more
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 

Regards,
Dhaval Modi
[hidden email]

On 1 February 2017 at 21:07, Kumar Anshuman  <[hidden email]> wrote:
Hi Dhaval,
 
Have you added HBase-protocol jar in your dependencies?
This error shows that you have either the incompatible version of HBase-protocol jar or you are missing it( might be missed out from the classpath).
Try to include the proper version(for this case 1.1.2) of the jar or set this jar as HADOOP_CLASSPATH and see if it works.
 
Regards,
Kumar Anshuman
 
Reply |  Threaded |  More 

Re: Unable to connect to HBase using Phoenix JDBC Driver

Kumar Anshuman
2 posts
Hi Dhaval,

This error seems to be due to HBase and Phoenix jar version's mismatch or due to missing of dependency for HBase-protocol-{version}.jar or HBase-protobuff-{version}.jar, you will have to check the proper version of the HBase jars and Phoenix jars used, Please check the versions and validate the different alternatives suggested and try again and inform me if it works or not.
 
Regards,
Kumar Anshuman

On Wed, Feb 1, 2017 at 9:41 PM, Kumar Anshuman  <[hidden email]> wrote:
Hi again Dhaval,

This error seems to be due to HBase and Phoenix jar version's mismatch or due to missing of dependency for HBase-protocol-{version}.jar or HBase-protobuff-{version}.jar, you will have to check the proper version of the HBase jars and Phoenix jars used, Please check the versions and validate the different alternatives suggested and try again and inform me if it works or not.
 
Regards,
Kumar Anshuman

On Wed, Feb 1, 2017 at 9:19 PM, Dhaval Modi  <[hidden email]> wrote:
Thanks Anshuman. It was really helpful. 
 
I added HBase-protocol jar in dependency and it got resolved.
 
But now I am getting different error:
 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Caused by: java.lang.IllegalArgumentException: Can't find method newStub in org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService!
        at org.apache.hadoop.hbase.util.Methods.call(Methods.java:45)
        at org.apache.hadoop.hbase.protobuf.ProtobufUtil.newServiceStub(ProtobufUtil.java:1675)
        at org.apache.hadoop.hbase.client.HTable$16.call(HTable.java:1750)
        ... 4 more
Caused by: java.lang.NoSuchMethodException: org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService.newStub(org.apache. hadoop.hbase.shaded.com.google.protobuf.RpcChannel)
        at java.lang.Class.getMethod(Class.java:1786)
        at org.apache.hadoop.hbase.util.Methods.call(Methods.java:38)
        ... 6 more
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 

Regards,
Dhaval Modi
[hidden email]

On 1 February 2017 at 21:07, Kumar Anshuman  <[hidden email]> wrote:
Hi Dhaval,
 
Have you added HBase-protocol jar in your dependencies?
This error shows that you have either the incompatible version of HBase-protocol jar or you are missing it( might be missed out from the classpath).
Try to include the proper version(for this case 1.1.2) of the jar or set this jar as HADOOP_CLASSPATH and see if it works.
 
Regards,
Kumar Anshuman
 
Reply |  Threaded |  More 

Re: Unable to connect to HBase using Phoenix JDBC Driver

James Taylor
524 posts
Sounds like you're using the wrong jar on the server side. Or perhaps you're using a vendor distribution (in which case you'll need to use their supported Phoenix version). Please review the installation instructions as everything you need is in the one single jar.
Thanks,
James

On Wed, Feb 1, 2017 at 9:56 AM Kumar Anshuman < [hidden email]> wrote:
Hi Dhaval,

This error seems to be due to HBase and Phoenix jar version's mismatch or due to missing of dependency for HBase-protocol-{version}.jar or HBase-protobuff-{version}.jar, you will have to check the proper version of the HBase jars and Phoenix jars used, Please check the versions and validate the different alternatives suggested and try again and inform me if it works or not.
 
Regards,
Kumar Anshuman

On Wed, Feb 1, 2017 at 9:41 PM, Kumar Anshuman  <[hidden email]> wrote:
Hi again Dhaval,

This error seems to be due to HBase and Phoenix jar version's mismatch or due to missing of dependency for HBase-protocol-{version}.jar or HBase-protobuff-{version}.jar, you will have to check the proper version of the HBase jars and Phoenix jars used, Please check the versions and validate the different alternatives suggested and try again and inform me if it works or not.
 
Regards,
Kumar Anshuman

On Wed, Feb 1, 2017 at 9:19 PM, Dhaval Modi  <[hidden email]> wrote:
Thanks Anshuman. It was really helpful. 
 
I added HBase-protocol jar in dependency and it got resolved.
 
But now I am getting different error:
 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Caused by: java.lang.IllegalArgumentException: Can't find method newStub in org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService!
        at org.apache.hadoop.hbase.util.Methods.call(Methods.java:45)
        at org.apache.hadoop.hbase.protobuf.ProtobufUtil.newServiceStub(ProtobufUtil.java:1675)
        at org.apache.hadoop.hbase.client.HTable$16.call(HTable.java:1750)
        ... 4 more
Caused by: java.lang.NoSuchMethodException: org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService.newStub(org.apache. hadoop.hbase.shaded.com.google.protobuf.RpcChannel)
        at java.lang.Class.getMethod(Class.java:1786)
        at org.apache.hadoop.hbase.util.Methods.call(Methods.java:38)
        ... 6 more
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 

Regards,
Dhaval Modi
[hidden email]

On 1 February 2017 at 21:07, Kumar Anshuman  <[hidden email]> wrote:
Hi Dhaval,
 
Have you added HBase-protocol jar in your dependencies?
This error shows that you have either the incompatible version of HBase-protocol jar or you are missing it( might be missed out from the classpath).
Try to include the proper version(for this case 1.1.2) of the jar or set this jar as HADOOP_CLASSPATH and see if it works.
 
Regards,
Kumar Anshuman
 
Reply |  Threaded |  More 

Re: Unable to connect to HBase using Phoenix JDBC Driver

Dhaval Modi
9 posts
Hi Anshuman & James,
 
Thanks for your input. 
 
This issue is resolved. The main reason was the use of HBase-shaded-client as forced dependency. 
I removed it and issue got resolved. 
 

Regards,
Dhaval Modi
[hidden email]

On 1 February 2017 at 23:38, James Taylor  <[hidden email]> wrote:
Sounds like you're using the wrong jar on the server side. Or perhaps you're using a vendor distribution (in which case you'll need to use their supported Phoenix version). Please review the installation instructions as everything you need is in the one single jar.
Thanks,
James

On Wed, Feb 1, 2017 at 9:56 AM Kumar Anshuman < [hidden email]> wrote:
Hi Dhaval,

This error seems to be due to HBase and Phoenix jar version's mismatch or due to missing of dependency for HBase-protocol-{version}.jar or HBase-protobuff-{version}.jar, you will have to check the proper version of the HBase jars and Phoenix jars used, Please check the versions and validate the different alternatives suggested and try again and inform me if it works or not.
 
Regards,
Kumar Anshuman

On Wed, Feb 1, 2017 at 9:41 PM, Kumar Anshuman  <[hidden email]> wrote:
Hi again Dhaval,

This error seems to be due to HBase and Phoenix jar version's mismatch or due to missing of dependency for HBase-protocol-{version}.jar or HBase-protobuff-{version}.jar, you will have to check the proper version of the HBase jars and Phoenix jars used, Please check the versions and validate the different alternatives suggested and try again and inform me if it works or not.
 
Regards,
Kumar Anshuman

On Wed, Feb 1, 2017 at 9:19 PM, Dhaval Modi  <[hidden email]> wrote:
Thanks Anshuman. It was really helpful. 
 
I added HBase-protocol jar in dependency and it got resolved.
 
But now I am getting different error:
 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Caused by: java.lang.IllegalArgumentException: Can't find method newStub in org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService!
        at org.apache.hadoop.hbase.util.Methods.call(Methods.java:45)
        at org.apache.hadoop.hbase.protobuf.ProtobufUtil.newServiceStub(ProtobufUtil.java:1675)
        at org.apache.hadoop.hbase.client.HTable$16.call(HTable.java:1750)
        ... 4 more
Caused by: java.lang.NoSuchMethodException: org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService.newStub(org.apache. hadoop.hbase.shaded.com.google.protobuf.RpcChannel)
        at java.lang.Class.getMethod(Class.java:1786)
        at org.apache.hadoop.hbase.util.Methods.call(Methods.java:38)
        ... 6 more
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 

Regards,
Dhaval Modi
[hidden email]

On 1 February 2017 at 21:07, Kumar Anshuman  <[hidden email]> wrote:
Hi Dhaval,
 
Have you added HBase-protocol jar in your dependencies?
This error shows that you have either the incompatible version of HBase-protocol jar or you are missing it( might be missed out from the classpath).
Try to include the proper version(for this case 1.1.2) of the jar or set this jar as HADOOP_CLASSPATH and see if it works.
 
Regards,
Kumar Anshuman
 
Reply |  Threaded |  More 

Re: Unable to connect to HBase using Phoenix JDBC Driver

Raman Bedi
2 posts
This post has NOT been accepted by the mailing list yet.
Hi Anshuman, James & Dhaval, 
I am facing the same issue on HDP 2.3 with HBase version 1.1.1.2.3 and Phoenix version 4.4.0. I have been struggling to successfully run a MapReduce job that dumps its data into Phoenix. I have already HBase-shaded-client jar, but it doesn't exist on my disk. 
The MapReduce job that I am running comes bundled with Phoenix (its CSVBulkLoader class). This job is running perfectly fine on my dev cluster which consists of the same stack. I have tried to include hbase-protocol into my application classpath but the error doesn't go away. 
Please help me as I have been stuck on this issue for long. Thanks for the help :)
Reply |  Threaded |  More 

Re: Unable to connect to HBase using Phoenix JDBC Driver

Raman Bedi
2 posts
This post has NOT been accepted by the mailing list yet.
The error trace is as follows: 
Error: java.lang.RuntimeException: java.sql.SQLException: ERROR 2006 (INT08): Incompatible jars detected between client and server. Ensure that phoenix.jar is put on the classpath of HBase in every region server: Can't find method newStub in org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService! 
        at org.apache.phoenix.mapreduce.CsvToKeyValueMapper.setup(CsvToKeyValueMapper.java:121) 
        at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143) 
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787) 
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) 
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168) 
        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:1657) 
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162) 
Caused by: java.sql.SQLException: ERROR 2006 (INT08): Incompatible jars detected between client and server. Ensure that phoenix.jar is put on the classpath of HBase in every region server: Can't find method newStub in org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService! 
        at org.apache.phoenix.exception.SQLExceptionCode$Factory$1.newException(SQLExceptionCode.java:386) 
        at org.apache.phoenix.exception.SQLExceptionInfo.buildException(SQLExceptionInfo.java:145) 
        at org.apache.phoenix.query.ConnectionQueryServicesImpl.checkClientServerCompatibility(ConnectionQueryServicesImpl.java:987) 
        at org.apache.phoenix.query.ConnectionQueryServicesImpl.ensureTableCreated(ConnectionQueryServicesImpl.java:861) 
        at org.apache.phoenix.query.ConnectionQueryServicesImpl.createTable(ConnectionQueryServicesImpl.java:1175) 
        at org.apache.phoenix.query.DelegateConnectionQueryServices.createTable(DelegateConnectionQueryServices.java:112) 
        at org.apache.phoenix.schema.MetaDataClient.createTableInternal(MetaDataClient.java:1907) 
        at org.apache.phoenix.schema.MetaDataClient.createTable(MetaDataClient.java:745) 
        at org.apache.phoenix.compile.CreateTableCompiler$2.execute(CreateTableCompiler.java:186) 
        at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:305) 
        at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:297) 
        at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53) 
        at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:295) 
        at org.apache.phoenix.jdbc.PhoenixStatement.executeUpdate(PhoenixStatement.java:1244) 
        at org.apache.phoenix.query.ConnectionQueryServicesImpl$12.call(ConnectionQueryServicesImpl.java:1851) 
        at org.apache.phoenix.query.ConnectionQueryServicesImpl$12.call(ConnectionQueryServicesImpl.java:1820) 
        at org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:77) 
        at org.apache.phoenix.query.ConnectionQueryServicesImpl.init(ConnectionQueryServicesImpl.java:1820) 
        at org.apache.phoenix.jdbc.PhoenixDriver.getConnectionQueryServices(PhoenixDriver.java:180) 
        at org.apache.phoenix.jdbc.PhoenixEmbeddedDriver.connect(PhoenixEmbeddedDriver.java:132) 
        at org.apache.phoenix.jdbc.PhoenixDriver.connect(PhoenixDriver.java:151) 
        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:299) 
        at org.apache.phoenix.mapreduce.CsvToKeyValueMapper.setup(CsvToKeyValueMapper.java:119) 
        ... 8 more 
Caused by: java.lang.IllegalArgumentException: Can't find method newStub in org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService! 
        at org.apache.hadoop.hbase.util.Methods.call(Methods.java:45) 
        at org.apache.hadoop.hbase.protobuf.ProtobufUtil.newServiceStub(ProtobufUtil.java:1669) 
        at org.apache.hadoop.hbase.client.HTable$16.call(HTable.java:1750) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
        at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NoSuchMethodException: org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService.newStub(com.google.protobuf.RpcChannel) 
        at java.lang.Class.getMethod(Class.java:1786) 
        at org.apache.hadoop.hbase.util.Methods.call(Methods.java:38) 
        ... 6 more