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

Reply via email to