Java 不兼容ClassChangeError:类hbase.client.ConnectionManager$HConnectionImplementation未实现接口hbase.client.Connection

Java 不兼容ClassChangeError:类hbase.client.ConnectionManager$HConnectionImplementation未实现接口hbase.client.Connection,java,hbase,apache-zookeeper,Java,Hbase,Apache Zookeeper,我得到以下例外情况: java.io.IOException: java.lang.reflect.InvocationTargetException at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:240) at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(

我得到以下例外情况:

java.io.IOException: java.lang.reflect.InvocationTargetException
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:240)
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:218)
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:119)
    at com.itworx.bigdata.mediasensor.cascade.dao.impl.ImpalaAuthorDao.queryUserFollowers(ImpalaAuthorDao.java:107)
    at com.itworx.bigdata.mediasensor.cascade.service.impl.AuthorServiceImpl.getNodesByHashtag(AuthorServiceImpl.java:46)
    at com.itworx.bigdata.mediasensor.cascade.service.test.AuthorServiceTest.testJob(AuthorServiceTest.java:26)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.test.context.junit4.SpringTestMethod.invoke(SpringTestMethod.java:198)
    at org.springframework.test.context.junit4.SpringMethodRoadie.runTestMethod(SpringMethodRoadie.java:274)
    at org.springframework.test.context.junit4.SpringMethodRoadie$2.run(SpringMethodRoadie.java:207)
    at org.springframework.test.context.junit4.SpringMethodRoadie.runBeforesThenTestThenAfters(SpringMethodRoadie.java:254)
    at org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:234)
    at org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:204)
    at org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:146)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:151)
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238)
    ... 28 more
Caused by: java.lang.IncompatibleClassChangeError: Class org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation does not implement the requested interface org.apache.hadoop.hbase.client.Connection
    at org.apache.hadoop.hbase.client.RegistryFactory.getRegistry(RegistryFactory.java:35)
    at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.setupRegistry(ConnectionManager.java:882)
    at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:647)
    ... 33 more
我不明白为什么会出现这个异常,有人能帮我解决这个问题吗

更新 以下是使用的依赖项:

<repositories>
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>1.2.1</version>
            <exclusions>
                <exclusion>
                    <groupId>jdk.tools</groupId>
                    <artifactId>jdk.tools</artifactId>

                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-core</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-tools</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>2.5</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase -->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase</artifactId>
            <version>0.90.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-examples</artifactId>
            <version>1.0.0-cdh5.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-prefix-tree</artifactId>
            <version>1.0.0-cdh5.4.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.0.0-cdh5.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.htrace</groupId>
            <artifactId>htrace-core</artifactId>
            <version>3.1.0-incubating</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>1.0.0-cdh5.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-annotations</artifactId>
            <version>1.0.0-cdh5.4.2</version>
        </dependency>
    </dependencies>

克劳德拉
https://repository.cloudera.com/artifactory/cloudera-repos/
org.apache.hive
蜂窝jdbc
1.2.1
jdk.tools
jdk.tools
org.apache.hadoop
hadoop内核
1.2.1
org.apache.velocity
速度工具
2
org.springframework
弹簧试验
2.5
测试
番石榴
番石榴
19
org.apache.hbase
数据库
0.90.3
org.apache.hbase
hbase示例
1.0.0-cdh5.4.2
org.apache.hbase
hbase前缀树
1.0.0-cdh5.4.2
org.apache.hbase
hbase客户端
1.0.0-cdh5.4.2
org.apache.htrace
htrace磁芯
3.1.0-孵化
org.apache.hbase
hbase服务器
1.0.0-cdh5.4.2
org.apache.hbase
hbase注释
1.0.0-cdh5.4.2

这是由于以下原因之一

  • 类路径中存在同一jar的多个版本。检查容器日志。它将列出类路径。这个类路径显示了JAR在运行时加载的目录。敏锐地观察每一个目录。至少一个目录应具有多个版本的hbase JAR。保留特定于您的hadoop提供商(HDP、CDH、Mapr等)的版本。删除其余所有jar

  • 依赖项中列出了多个版本的hbase JAR

    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase</artifactId>
        <version>0.90.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client</artifactId>
        <version>1.0.0-cdh5.4.2</version>
    </dependency>
    
    
    org.apache.hbase
    . 其中ashbase客户端1.0.0-cdh5.4.2具有所有这些功能。我手动从下载jar,并使用java反编译器进行验证


    这在编译时不会成为问题。但在运行时,在您提交Thread作业后,它将加载hbase 0.90.3 jar,并且无法找到必要的类和接口。请从依赖项中删除此项。这应该可以解决问题。

    我的第一个猜测是,您的hbase没有使用正确的jar。你能给我们看看你的依赖关系吗?@Whitefret Updated我想你用错了hbase的jar。您不需要版本0.93中的jar,因为它在多个jar(客户机、服务器、注释,可能还有其他)中分离
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase</artifactId>
        <version>0.90.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client</artifactId>
        <version>1.0.0-cdh5.4.2</version>
    </dependency>