phoenix-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From James Taylor <jamestay...@apache.org>
Subject Re: Phoenix client maven dependencies
Date Mon, 22 Sep 2014 16:31:07 GMT
+1 to doing the same for hbase-testing-util. Thanks for the analysis, Andrew!

    James

On Mon, Sep 22, 2014 at 9:18 AM, Andrew Purtell <apurtell@apache.org> wrote:
> On Thu, Sep 18, 2014 at 3:01 PM, James Taylor <jamestaylor@apache.org> wrote:
>> I see. That makes sense, but it's more of an HBase request than a
>> Phoenix request. If HBase had a "client-only" pom, then Phoenix could
>> have a "client-only" pom as well.
>>
>> Thanks,
>> James
>
> If you specify only the 'hbase-client' Maven module as the HBase
> dependency then this pulls in client-only deps (hbase-common,
> hbase-protocol, commons-codec, commons-collections, commons-io,
> commons-lang, commons-logging, guava, protobuf-java, netty, zookeeper,
> htrace-core, jackson-mapper-asl, log4j)
>
> I think Phoenix might be pulling in all of the other HBase modules
> because phoenix-core specifies the 'hbase-testing-util' HBase module
> as a dependency, and not at test scope:
>
>       <dependencies>
>           <dependency>
>             <groupId>org.apache.hbase</groupId>
>             <artifactId>hbase-testing-util</artifactId>
>             <exclusions>
>               <exclusion>
>                 <groupId>org.jruby</groupId>
>                 <artifactId>jruby-complete</artifactId>
>               </exclusion>
>             </exclusions>
>           </dependency>
>         ...
>
> hbase-testing-util doesn't contain any code. It is a module you can
> use that will pull in *everything* needed to start up mini cluster
> tests, all of the HBase modules including hbase-server and the compat
> modules, with compile scope. Maven doc says about compile scope: "This
> is the default scope, used if none is specified. Compile dependencies
> are available in all classpaths of a project. Furthermore, those
> dependencies are propagated to dependent projects."
>
> Other test dependencies in the phoenix-core POM are included at test
> scope and tagged as optional, e.g.
>
>           <dependency>
>             <groupId>org.apache.hadoop</groupId>
>             <artifactId>hadoop-test</artifactId>
>             <optional>true</optional>
>             <scope>test</scope>
>           </dependency>
>
> Perhaps the same should be done for hbase-testing-util ?
>
>
>> On Thu, Sep 18, 2014 at 1:52 PM, Flavio Pompermaier
>> <pompermaier@okkam.it> wrote:
>>> Because it is not clear which are the exact dependencies to add to a pom.xml
>>> that uses the Phoenix client.
>>> For example, why do I need to transitively hold all depency of hbase-server
>>> in the client side or both hadoop (1 and 2) compatibility jars?! Wouldn't be
>>> more easy to create a client jar that select only those needed classes of
>>> such jar?
>>>
>>> On Sep 18, 2014 9:12 PM, "Mujtaba Chohan" <mujtaba@apache.org> wrote:
>>>>
>>>> Falvio - Client jar is composed on multiple dependency jars extracted in
>>>> one and is for convenience available in binary download only. This type of
>>>> bundled jars are not supposed to go in maven repo. as maven automatically
>>>> resolves required dependencies. To use maven repo., use the phoenix-core
as
>>>> artifact id and maven will pull in all the required dependencies for your
>>>> project. Then if you want a single jar for your project, you can bundle your
>>>> project jars in one.
>>>>
>>>>     <dependency>
>>>>         <groupId>org.apache.phoenix</groupId>
>>>>         <artifactId>phoenix-core</artifactId>
>>>>         <version>4.1.0</version>
>>>>     </dependency>
>>>>
>>>> //mujtaba
>>>>
>>>> On Thu, Sep 18, 2014 at 11:54 AM, Flavio Pompermaier
>>>> <pompermaier@okkam.it> wrote:
>>>>>
>>>>> Is the client jar available on maven central?
>>>>>
>>>>> On Sep 18, 2014 8:46 PM, "anil gupta" <anilgupta84@gmail.com> wrote:
>>>>>>
>>>>>> Hi Flavio,
>>>>>>
>>>>>> Phoenix-core is for sever side. If this app is for client side then
you
>>>>>> can use client jars. Maybe you can try to use
>>>>>> phoenix-client-without-hbase.jar. In this case, i think you will
at least
>>>>>> need hbase-client jar in your client app to be added in your pom.
>>>>>>
>>>>>> Thanks,
>>>>>> Anil Gupta
>>>>>>
>>>>>> On Thu, Sep 18, 2014 at 6:13 AM, Flavio Pompermaier
>>>>>> <pompermaier@okkam.it> wrote:
>>>>>>>
>>>>>>> Is it really necessary the dependency to hbase-server..? Then
if I try
>>>>>>> to run my application from a webapp using resteasy I get this
error:
>>>>>>>
>>>>>>> Caused by:
>>>>>>> org.jboss.as.server.deployment.DeploymentUnitProcessingException:
>>>>>>> JBAS011232: Only one JAX-RS Application Class allowed.
>>>>>>> com.sun.jersey.api.core.ClasspathResourceConfig
>>>>>>> com.sun.jersey.server.impl.application.DeferredResourceConfig
>>>>>>> com.sun.jersey.api.core.ScanningResourceConfig
>>>>>>> org.apache.hadoop.hbase.rest.ResourceConfig
>>>>>>> com.sun.jersey.api.core.ClassNamesResourceConfig
>>>>>>> com.sun.jersey.api.core.ApplicationAdapter
>>>>>>> com.sun.jersey.api.core.WebAppResourceConfig
>>>>>>> com.sun.jersey.api.core.PackagesResourceConfig
>>>>>>> com.sun.jersey.api.core.DefaultResourceConfig
>>>>>>> com.sun.jersey.api.core.ResourceConfig
>>>>>>> at
>>>>>>> org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.scan(JaxrsScanningProcessor.java:209)
>>>>>>>
>>>>>>> On Thu, Sep 18, 2014 at 11:40 AM, Flavio Pompermaier
>>>>>>> <pompermaier@okkam.it> wrote:
>>>>>>>>
>>>>>>>> I was able to obtain a minimal set of dependencies *for hadoop1)
>>>>>>>> using:
>>>>>>>>                 <dependency>
>>>>>>>> <groupId>org.apache.phoenix</groupId>
>>>>>>>> <artifactId>phoenix</artifactId>
>>>>>>>> <version>4.1.0</version>
>>>>>>>> </dependency>
>>>>>>>> <dependency>
>>>>>>>> <groupId>org.apache.hbase</groupId>
>>>>>>>> <artifactId>hbase-client</artifactId>
>>>>>>>> <version>0.98.4-hadoop1</version>
>>>>>>>> </dependency>
>>>>>>>>                 <!-- Need hbase server just for
>>>>>>>> ConstantSizeRegionSplitPolicy class.. -->
>>>>>>>> <dependency>
>>>>>>>> <groupId>org.apache.hbase</groupId>
>>>>>>>> <artifactId>hbase-server</artifactId>
>>>>>>>> <version>0.98.4-hadoop1</version>
>>>>>>>> <exclusions>
>>>>>>>> <exclusion>
>>>>>>>> <artifactId>*</artifactId>
>>>>>>>> <groupId>*</groupId>
>>>>>>>> </exclusion>
>>>>>>>> </exclusions>
>>>>>>>> </dependency>
>>>>>>>> <dependency>
>>>>>>>> <groupId>org.apache.phoenix</groupId>
>>>>>>>> <artifactId>phoenix-hadoop-compat</artifactId>
>>>>>>>> <version>4.1.0</version>
>>>>>>>> <exclusions>
>>>>>>>>                                  <!-- conflict with
>>>>>>>> hbase-client-0.98.4-hadoop1 version -->
>>>>>>>> <exclusion>
>>>>>>>> <artifactId>hbase-common</artifactId>
>>>>>>>> <groupId>org.apache.hbase</groupId>
>>>>>>>> </exclusion>
>>>>>>>> </exclusions>
>>>>>>>> </dependency>
>>>>>>>>
>>>>>>>> but I still get this exception (that however seems not causing
any
>>>>>>>> issue):
>>>>>>>> java.lang.RuntimeException: Could not create  interface
>>>>>>>> org.apache.phoenix.trace.PhoenixSpanReceiver Is the hadoop
compatibility jar
>>>>>>>> on the classpath?
>>>>>>>> at
>>>>>>>> org.apache.hadoop.hbase.CompatibilityFactory.getInstance(CompatibilityFactory.java:60)
>>>>>>>> at
>>>>>>>> org.apache.phoenix.trace.TracingCompat.newTraceMetricSource(TracingCompat.java:40)
>>>>>>>> at
>>>>>>>> org.apache.phoenix.trace.util.Tracing.addTraceMetricsSource(Tracing.java:294)
>>>>>>>> at
>>>>>>>> org.apache.phoenix.jdbc.PhoenixConnection.<clinit>(PhoenixConnection.java:125)
>>>>>>>> at
>>>>>>>> org.apache.phoenix.query.ConnectionQueryServicesImpl$9.call(ConnectionQueryServicesImpl.java:1516)
>>>>>>>> at
>>>>>>>> org.apache.phoenix.query.ConnectionQueryServicesImpl$9.call(ConnectionQueryServicesImpl.java:1489)
>>>>>>>> at
>>>>>>>> org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:77)
>>>>>>>> at
>>>>>>>> org.apache.phoenix.query.ConnectionQueryServicesImpl.init(ConnectionQueryServicesImpl.java:1489)
>>>>>>>> at
>>>>>>>> org.apache.phoenix.jdbc.PhoenixDriver.getConnectionQueryServices(PhoenixDriver.java:162)
>>>>>>>> at
>>>>>>>> org.apache.phoenix.jdbc.PhoenixEmbeddedDriver.connect(PhoenixEmbeddedDriver.java:129)
>>>>>>>> at
>>>>>>>> org.apache.phoenix.jdbc.PhoenixDriver.connect(PhoenixDriver.java:133)
>>>>>>>> at java.sql.DriverManager.getConnection(DriverManager.java:571)
>>>>>>>> at java.sql.DriverManager.getConnection(DriverManager.java:233)
>>>>>>>> Caused by: java.util.NoSuchElementException
>>>>>>>> at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:357)
>>>>>>>> at java.util.ServiceLoader$1.next(ServiceLoader.java:445)
>>>>>>>> at
>>>>>>>> org.apache.hadoop.hbase.CompatibilityFactory.getInstance(CompatibilityFactory.java:46)
>>>>>>>> ... 14 more
>>>>>>>>
>>>>>>>> How can I fix those problems?
>>>>>>>>
>>>>>>>> On Thu, Sep 18, 2014 at 10:34 AM, Flavio Pompermaier
>>>>>>>> <pompermaier@okkam.it> wrote:
>>>>>>>>>
>>>>>>>>> Hi to all,
>>>>>>>>>
>>>>>>>>> I'm trying to write a J2EE application that uses the
Phoenix JDBC
>>>>>>>>> driver for HBase 0.98 (not on yarn for tests but it will
be in production)
>>>>>>>>> through maven.
>>>>>>>>> Do I really need all the jars of the hbase-server side
contained in
>>>>>>>>> the phoenix core jar..?
>>>>>>>>> I can't see a phoenix-client jar on the central maven
repository
>>>>>>>>> while in the documentation there's to use that jar!
>>>>>>>>>
>>>>>>>>> Thanks in advance,
>>>>>>>>> Flavio
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Thanks & Regards,
>>>>>> Anil Gupta
>>>>
>>>>
>>>
>
>
>
> --
> Best regards,
>
>    - Andy
>
> Problems worthy of attack prove their worth by hitting back. - Piet
> Hein (via Tom White)

Mime
View raw message