noclassdeffounderror

vpfxa7rd  于 2021-05-27  发布在  Hadoop
关注(0)|答案(0)|浏览(200)

我的一个项目有问题。以下是关于它的更多信息:
我们的老师给了我们一个包含hadoop和hbase的虚拟机(ubuntu),已经安装好了。目标很简单:我们有一个 Rest apitomcat 8.5 (restserver项目,web项目),其中 GET 请求(老师只希望我们 GET 请求,显然是安全原因),我们需要执行,根据 url (例如: /students/{id}/{program} 将返回hbase表中此特定学生(id)和学习年份(计划)的成绩摘要、数据选择和mapreduce作业。我们有一个bigdata项目,它包含简单的java代码来扫描和过滤 Hbase table。这是这个项目的简短摘要。
这是我们用于这个项目的结构:项目结构
下面是执行逻辑:我们输入 url 在浏览器中,在我们启动restserver项目之后( right click on RestServer -> Run as -> Run on server . 这样做之后我们得到的是:浏览器中的restserver。
简单的部分到此为止。我们在前面的图片上看到的链接只是演示,他们不是我们在这个项目中需要做的。我们的想法是拦截 GET 来自api的请求,在处理请求的方法中,获取参数,将它们提供给响应对象的构造函数调用,并将对象作为响应返回(将转换为 JSON ). 我们的想法是得到这个对象(对我们的 GET 请求)。所以我们需要让这两个项目沟通。
以下是拦截请求的代码:

@GET
    @Path("/students/{id}/{program}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getStudent(@PathParam("id") String ID,@PathParam("program") String program) throws IOException {
        System.out.println("ID : "+ID+" program"+program);
        if (ID != null) {
            System.out.println("Non nul");
            return Response.ok(new Response1(ID,program), MediaType.APPLICATION_JSON).build();
        } else {
            return Response.status(Response.Status.NOT_FOUND).entity("Student not found: " + ID).build();
        }
    }

这个 Response1(ID,program) 对象是在bigdata项目中生成的。当我直接从bigdata项目执行代码时(如 Java application ),我绝对没有问题,没有错误。但是这个想法是使用bigdata项目的代码来构建 Result1 对象,并将其“返回”给 Rest api . 问题就在这里,我尝试了我所知道的一切,在互联网上找到的,但我不能解决这个问题。当我键入我的url时,(即: http://localhost:8080/RestServer/v1/StudentService/students/2005000033/L3 )我得到这个错误:错误
从我的研究中,我发现(如果我错了请纠正我)程序找不到 ByteArrayComparable 上课时间 runtime . 我查看了所有能找到的链接,以下是我试图解决的问题:
检查hadoop和hbase库是否都在这两个项目中。
检查项目是否包含 hbase-client ,它应该包含 ByteArrayComparable 类(是的,两个项目中都有)。
通过做 right click 在restserver上-> Properties -> Java Build Path : Source 选项卡:我添加了 src bigdata项目的文件夹(和 bin 文件夹,但我不记得在哪里,我相信它是在一个标签的 Java Build Path ). Projects tab:我添加了bigdata项目。 Order and Export 我查过了 src 文件夹(此文件夹位于restserver项目中,在我添加 src 中bigdata项目的文件夹 Source 选项卡)。 Deployement Assembly :我添加了bigdata项目。
我把bigdata项目中使用的类复制到我的 src 我的restserver项目的文件夹。
我发现这可能是由于库之间的冲突造成的,所以我尝试在一个项目中删除一些库,然后在另一个项目中使用它们。
在每次更改之间,我清理并重建了项目。
我尝试通过添加 import org.apache.hadoop.hbase.filter.*; 在涉及执行的文件中。
我不知道我现在能做什么。我的一些朋友也有同样的问题,即使我们没有相同的代码,所以问题似乎来自配置。在这一点上,我没有执行任何mapreduce工作,我只是使用 Hbase java api 用一些过滤器扫描表。
谢谢你读我的文章,我希望我能找到答案。我将继续测试和搜索,并编辑这篇文章,如果我发现一些东西。
这是密码 Response1 班级:

package bdma.bigdata.project.rest.core;

import java.io.IOException;
import org.apache.hadoop.hbase.filter.Filter.*;

public class Response1 {
    private StudentBD student;
    private Semester semesters;

    public Response1(String id, String program) throws IOException {
        System.out.println("Building student");
        this.student = new StudentBD(id);
        System.out.println("Building semester");
        this.semesters = new Semester(id,program);
    }

    @Override
    public String toString() {
        return student.toString()+" "+semesters.toString();
    }

    public static void main(String[] args) throws IOException {
        Response1 r = new Response1("2005000100", "L1");
        System.out.println("AFFICHAGE TEST");
        System.out.println(r);
    }
}

编辑

我终于设法解决了我的问题。我把解决办法放在这里,如果它能在未来帮助和我处境相同的人。一旦你链接了你的两个项目(在 Java Build Path 属性的一节 Rest api 项目),您需要继续,仍然在属性中,在部署程序集中(如上所述) Java Build Path ). 点击这里 Add... 并添加所有jar文件。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题