It wasn't clear where the conflict is, so shading may or may not be a
solution.

If your app with the Cassandra operator needs a newer version of Guava,
include that newer version into the app package. The container's class path
will have the dependencies packaged with the app before anything from Hadoop
.

If the newer version of Guava isn't backward compatible, then things could
get complicated. If the conflict is between the Hadoop stuff and your app
(including Cassandra), shading won't help because those are dependencies
that we use as is. In this case, it may be necessary to run the Cassandra
code in a fully isolated class loader. If the conflict is between Apex code
and the app, then shading may help.

Thomas






On Fri, Dec 18, 2015 at 5:43 AM, Timothy Farkas <[email protected]> wrote:

> Hi Priyanka,
>
> I haven't seen this issue yet, but I am not using the newest version of
> cassandra driver. This is the version I am using:
>
>
>         <dependency>
>           <groupId>com.datastax.cassandra</groupId>
>           <artifactId>cassandra-driver-core</artifactId>
>           <version>2.1.8</version>
>         </dependency>
>
> I did run into an issue where I was getting strange cassandra exceptions,
> so I set the protocol to version 2.0 in the CassandraStore class like this
> and the issue was resolved:
>
>
>       cluster = Cluster.builder()
>
>
> .addContactPoint(node).withProtocolVersion(ProtocolVersion.V2).withCredentials(userName,
> password).build();
>
> If you are still experiencing missing method issues due to different guava
> versions it may be necessary to shade the version of guava used by apex.
> Shading changes the package names of all the packages in a library by
> appending a prefix, so that
> all the classes in the guava version used by apex would look like this:
> org.apache.apex.com.google.guavapackage.GuavaClass. This prevents version
> clashes, and this technique is used by Flink for that reason. Perhaps we
> can start that discussion again in a separate thread.
>
> A temporary workaround could be to exclude guava from the apex dependencies
> in your pom, that way the newest version of guava will be used.
>
> Thanks,
> Tim
>
> On Fri, Dec 18, 2015 at 4:33 AM, Priyanka Gugale <[email protected]>
> wrote:
>
> > Hi,
> >
> > I am facing classpath issues when I try to use newer version (e.g. 2.1.x
> or
> > 3.0.x) of cassandra library for CassandraOutputOperator.
> >
> > From datastax documents looks like we need to include few more libraries
> to
> > setup java environment. (reference:
> >
> >
> http://docs.datastax.com/en/developer/java-driver/2.1/java-driver/reference/settingUpJavaProgEnv_r.html
> > ).
> > When I included the required libraries my ClassNotFound issue was
> resolved
> > but then I was getting some methods missing error.
> > Looks like, apex platform also uses guava library and it's version is
> lower
> > than 14.0.1, I couldn't find the source though (Note: I was just trying
> to
> > run unit tests here, not an application).
> >
> > Has anyone faced such issue earlier?
> >
> > -Priyanka
> >
>

Reply via email to