You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-user@hadoop.apache.org by Rob Blah <tm...@gmail.com> on 2013/08/20 21:42:58 UTC

DFSClient throws IncompatibleClassChangeError

Hi

When I am trying to use DFSClient it throws the following exception:
java.lang.IncompatibleClassChangeError: class
com.google.common.cache.CacheBuilder$3 has interface
com.google.common.base.Ticker as super class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at com.google.common.cache.CacheBuilder.<clinit>(CacheBuilder.java:190)
    at
org.apache.hadoop.hdfs.DomainSocketFactory.<init>(DomainSocketFactory.java:45)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:494)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:449)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:439)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:430)
    at
org.my.appMaster.mock.Child_MOCK.initializeLocalData(Child_MOCK.java:75)
    at org.my.appMaster.mock.Child_MOCK.main(Child_MOCK.java:188)

I am instantiating DFSClient as such:
DFSClient dfsClient = new DFSClient(new InetSocketAddress(this.NN_Host,
this.NN_Port), new HdfsConfiguration(true));

NN data is set properly.

I have checked all my export environment variables and the only guava
version is YARN-dist/share/hadoop/common/lib/guava-11.0.2.jar. Also in the
runtime classpath (System.getProperty("java.class.path");) only guava-11 is
present.

Any ideas?

regards
tmp

Re: DFSClient throws IncompatibleClassChangeError

Posted by Rob Blah <tm...@gmail.com>.
Problem solved.

What I did was forced master POM of my project to use explicitly
guava-11.02 (same as YARN).  Nothing else worked, I even moved the guava-14
to a different location, I removed guava dependency completely from my
project, also didn't worked. Removing guava-14 from my envs didn't worked
as well. Although this might be caused by my development environment.
Anyway if anybody else have a similar problem. The snippet below should
solve your problem.

Master POM:
<dependencies>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>11.0.2</version>
        </dependency>
...
</dependencies>



2013/8/20 Rob Blah <tm...@gmail.com>

> Hi
>
> When I am trying to use DFSClient it throws the following exception:
> java.lang.IncompatibleClassChangeError: class
> com.google.common.cache.CacheBuilder$3 has interface
> com.google.common.base.Ticker as super class
>     at java.lang.ClassLoader.defineClass1(Native Method)
>     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
>     at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
>     at
> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
>     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
>     at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
>     at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
>     at java.security.AccessController.doPrivileged(Native Method)
>     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>     at com.google.common.cache.CacheBuilder.<clinit>(CacheBuilder.java:190)
>     at
> org.apache.hadoop.hdfs.DomainSocketFactory.<init>(DomainSocketFactory.java:45)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:494)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:449)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:439)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:430)
>     at
> org.my.appMaster.mock.Child_MOCK.initializeLocalData(Child_MOCK.java:75)
>     at org.my.appMaster.mock.Child_MOCK.main(Child_MOCK.java:188)
>
> I am instantiating DFSClient as such:
> DFSClient dfsClient = new DFSClient(new InetSocketAddress(this.NN_Host,
> this.NN_Port), new HdfsConfiguration(true));
>
> NN data is set properly.
>
> I have checked all my export environment variables and the only guava
> version is YARN-dist/share/hadoop/common/lib/guava-11.0.2.jar. Also in the
> runtime classpath (System.getProperty("java.class.path");) only guava-11 is
> present.
>
> Any ideas?
>
> regards
> tmp
>

Re: DFSClient throws IncompatibleClassChangeError

Posted by Rob Blah <tm...@gmail.com>.
Problem solved.

What I did was forced master POM of my project to use explicitly
guava-11.02 (same as YARN).  Nothing else worked, I even moved the guava-14
to a different location, I removed guava dependency completely from my
project, also didn't worked. Removing guava-14 from my envs didn't worked
as well. Although this might be caused by my development environment.
Anyway if anybody else have a similar problem. The snippet below should
solve your problem.

Master POM:
<dependencies>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>11.0.2</version>
        </dependency>
...
</dependencies>



2013/8/20 Rob Blah <tm...@gmail.com>

> Hi
>
> When I am trying to use DFSClient it throws the following exception:
> java.lang.IncompatibleClassChangeError: class
> com.google.common.cache.CacheBuilder$3 has interface
> com.google.common.base.Ticker as super class
>     at java.lang.ClassLoader.defineClass1(Native Method)
>     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
>     at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
>     at
> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
>     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
>     at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
>     at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
>     at java.security.AccessController.doPrivileged(Native Method)
>     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>     at com.google.common.cache.CacheBuilder.<clinit>(CacheBuilder.java:190)
>     at
> org.apache.hadoop.hdfs.DomainSocketFactory.<init>(DomainSocketFactory.java:45)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:494)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:449)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:439)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:430)
>     at
> org.my.appMaster.mock.Child_MOCK.initializeLocalData(Child_MOCK.java:75)
>     at org.my.appMaster.mock.Child_MOCK.main(Child_MOCK.java:188)
>
> I am instantiating DFSClient as such:
> DFSClient dfsClient = new DFSClient(new InetSocketAddress(this.NN_Host,
> this.NN_Port), new HdfsConfiguration(true));
>
> NN data is set properly.
>
> I have checked all my export environment variables and the only guava
> version is YARN-dist/share/hadoop/common/lib/guava-11.0.2.jar. Also in the
> runtime classpath (System.getProperty("java.class.path");) only guava-11 is
> present.
>
> Any ideas?
>
> regards
> tmp
>

Re: DFSClient throws IncompatibleClassChangeError

Posted by Rob Blah <tm...@gmail.com>.
Problem solved.

What I did was forced master POM of my project to use explicitly
guava-11.02 (same as YARN).  Nothing else worked, I even moved the guava-14
to a different location, I removed guava dependency completely from my
project, also didn't worked. Removing guava-14 from my envs didn't worked
as well. Although this might be caused by my development environment.
Anyway if anybody else have a similar problem. The snippet below should
solve your problem.

Master POM:
<dependencies>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>11.0.2</version>
        </dependency>
...
</dependencies>



2013/8/20 Rob Blah <tm...@gmail.com>

> Hi
>
> When I am trying to use DFSClient it throws the following exception:
> java.lang.IncompatibleClassChangeError: class
> com.google.common.cache.CacheBuilder$3 has interface
> com.google.common.base.Ticker as super class
>     at java.lang.ClassLoader.defineClass1(Native Method)
>     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
>     at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
>     at
> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
>     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
>     at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
>     at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
>     at java.security.AccessController.doPrivileged(Native Method)
>     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>     at com.google.common.cache.CacheBuilder.<clinit>(CacheBuilder.java:190)
>     at
> org.apache.hadoop.hdfs.DomainSocketFactory.<init>(DomainSocketFactory.java:45)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:494)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:449)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:439)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:430)
>     at
> org.my.appMaster.mock.Child_MOCK.initializeLocalData(Child_MOCK.java:75)
>     at org.my.appMaster.mock.Child_MOCK.main(Child_MOCK.java:188)
>
> I am instantiating DFSClient as such:
> DFSClient dfsClient = new DFSClient(new InetSocketAddress(this.NN_Host,
> this.NN_Port), new HdfsConfiguration(true));
>
> NN data is set properly.
>
> I have checked all my export environment variables and the only guava
> version is YARN-dist/share/hadoop/common/lib/guava-11.0.2.jar. Also in the
> runtime classpath (System.getProperty("java.class.path");) only guava-11 is
> present.
>
> Any ideas?
>
> regards
> tmp
>

Re: DFSClient throws IncompatibleClassChangeError

Posted by Rob Blah <tm...@gmail.com>.
Problem solved.

What I did was forced master POM of my project to use explicitly
guava-11.02 (same as YARN).  Nothing else worked, I even moved the guava-14
to a different location, I removed guava dependency completely from my
project, also didn't worked. Removing guava-14 from my envs didn't worked
as well. Although this might be caused by my development environment.
Anyway if anybody else have a similar problem. The snippet below should
solve your problem.

Master POM:
<dependencies>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>11.0.2</version>
        </dependency>
...
</dependencies>



2013/8/20 Rob Blah <tm...@gmail.com>

> Hi
>
> When I am trying to use DFSClient it throws the following exception:
> java.lang.IncompatibleClassChangeError: class
> com.google.common.cache.CacheBuilder$3 has interface
> com.google.common.base.Ticker as super class
>     at java.lang.ClassLoader.defineClass1(Native Method)
>     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
>     at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
>     at
> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
>     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
>     at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
>     at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
>     at java.security.AccessController.doPrivileged(Native Method)
>     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>     at com.google.common.cache.CacheBuilder.<clinit>(CacheBuilder.java:190)
>     at
> org.apache.hadoop.hdfs.DomainSocketFactory.<init>(DomainSocketFactory.java:45)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:494)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:449)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:439)
>     at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:430)
>     at
> org.my.appMaster.mock.Child_MOCK.initializeLocalData(Child_MOCK.java:75)
>     at org.my.appMaster.mock.Child_MOCK.main(Child_MOCK.java:188)
>
> I am instantiating DFSClient as such:
> DFSClient dfsClient = new DFSClient(new InetSocketAddress(this.NN_Host,
> this.NN_Port), new HdfsConfiguration(true));
>
> NN data is set properly.
>
> I have checked all my export environment variables and the only guava
> version is YARN-dist/share/hadoop/common/lib/guava-11.0.2.jar. Also in the
> runtime classpath (System.getProperty("java.class.path");) only guava-11 is
> present.
>
> Any ideas?
>
> regards
> tmp
>