设为首页 加入收藏

TOP

JavaAPI连接Hbase遇到NoClassDefFoundError时的辛酸解决过程
2019-04-29 01:47:04 】 浏览:65
Tags:JavaAPI 连接 Hbase 遇到 NoClassDefFoundError 时的 辛酸 解决 过程

JavaAPI连接Hbase遇到NoClassDefFoundError时的辛酸解决过程

使用Maven搭建JavaAPI连接Hbase项目,运行时出现了如下异常:

java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/protobuf/generated/MasterProtos$MasterService$BlockingInterface
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:228)
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:218)
    at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:119)
    at hbase.GeetingStarted.main(GeetingStarted.java:21)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$BlockingInterface
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 18 more

几经确认代码无误后,把目标转向了版本号问题上:

本机安装了hadoop2.7.7+hbase1.3.1

pom.xml:

        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-protocol</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>jdk.tools</groupId>
            <artifactId>jdk.tools</artifactId>
            <version>1.6</version>
            <scope>system</scope>
            <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
        </dependency>

刚开始感觉没什么毛病,通过各种百度,404网站查找相似bug的前人,并没有什么解决方案,只是跟着加入了zookeeper的配置项,加入了protobuf配置项,抛出的异常是NoSuchMethod(实际上跟标题的错误是一样的)。

然后就想着会不会是hbase1.3.1跟hadoop2.7.7版本不兼容,要不试试其他的Hbase版本吧。

在我准备痛下杀手删除Hbase时,身边的大佬过来了!他跟我说pom中配置的hbase的版本不一定要跟实际安装的版本一致!他用的是1.4.3版本,于是我就这样尝试了!然后就神奇地没报错并且正常运行了!!!(此异常花了我一天多时间研究,打算放弃的情况下被救了一命!)

最终pom.xml文件配置如下:

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>1.4.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.4.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-protocol</artifactId>
            <version>1.4.3</version>
        </dependency>
        <dependency>
            <groupId>jdk.tools</groupId>
            <artifactId>jdk.tools</artifactId>
            <version>1.6</version>
            <scope>system</scope>
            <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
        </dependency>
    </dependencies>

这位大佬还跟我说了一下,java连接mysql用的还是5.1版本呢,可是装的mysql是5.6版本啊,所以。。这真的是个坑。。。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇使用pycharm访问远端hbase集群 下一篇win10 hbase-2.1.0 -失败(1)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目