You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@apex.apache.org by Sunil Parmar <sp...@threatmetrix.com> on 2017/02/25 07:20:20 UTC

Resolving hadoop / yarn class loader

We've an application where output operator is writing to Cassandra. During recent upgrade to Cassandra ( 2.3->3.0) , we realized that Cassandra mandates the Guava library version > 16.01. While I notice that Cassandra driver and both Malhar libraries references Guava 18.0. While unit test always worked fine, the app when running in yarn container keep referencing older guava version which is not compatible and resulted in failing. I tried to exclude Guava from every dependency in maven and included Guava as direct dependency to avoid any conflict. But none of this helped.

 While debugging more, I realized that logs prints the classpath and 'grep guava' on loaded classpath libs shows the following ...

./guava-18.0.jar
/usr/lib/hadoop/lib/guava-11.0.2.jar
/usr/lib/hadoop-hdfs/lib/guava-11.0.2.jar
/usr/lib/hadoop-yarn/lib/guava-11.0.2.jar

So I am guessing it's trying to use 11.0.2 version which appears to be coming from Hadoop class path and it's not in my control.

I found very similar issue discussed for other yarn applications.
https://discuss.elastic.co/t/how-to-fix-guava-version-conflicts-with-hadoop-yarn-classpath/45384/2

Anyone has faced such issue ?
Is there a settings / configuration in apex to enforce an alternate Classpath ? E.g. Similar to setting   mapreduce.job.user.classpath.first to true
Any pointers to resolve this ?

Thanks,
Sunil