分享

请教一个MapReduce的难题,请大家来帮忙看看

xiaolongwu1987 发表于 2013-10-26 15:15:33 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 5910
根据网上的材料,我配置了2个节点的hadoop集群,本机作为master,另外一个机器作为slave。我把统计文本的例子中提供的源代码进行了打包(jar),通过命令hadoop jar wordcount.jar test-in test-out,能够以集群的形式运行统计文本的例子。
接下来,我创建了一个Java Web Project,新建一个servlet,将统计文本例子源码中main()方法的代码复制到了Servlet的doPost()方法中
@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        Configuration conf = new Configuration();
        
        Job job = new Job(conf, "word count");
        job.setJarByClass(RunServlet.class);
        job.setMapperClass(WordcountMap.class);
        job.setCombinerClass(WordcountReduce.class);
        job.setReducerClass(WordcountReduce.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path("hdfs://master:54310/test-in"));
        FileOutputFormat.setOutputPath(job, new Path("hdfs://master:54310/test-out"));
        try {
//            System.exit(job.waitForCompletion(true) ? 0 : 1);
            job.waitForCompletion(true);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //自己定义的一个类,用来放结果的
        ValuesAndKeys vak = WordcountHash.getInstance().get("wordcount");
        req.setAttribute("vak", vak);
        RequestDispatcher dispatch = req.getRequestDispatcher("result.jsp");
        dispatch.forward(req, resp);
    }
并将HDFS的路径作为文本的输入和输出路径。(我要做的就是:当一个请求高手来了之后,servlet去调用集群,让集群完成文本统计,最后将结果返回到一张JSP中)
接下来,我用命令start-all.sh开启了集群,通过jps能够确认各个节点工作正常。
然后我通过浏览器访问了Servlet,并且结果也确实返回给了JSP页面,但是我发现这个并没有以集群的形式来完成,而仅仅是本机上运行了简单的java类来完成的(因为在Hadoop Administration的页面中并没有提示有新的工作和已经完成的工作)。
请问有人知道是为啥吗吗?

已有(3)人评论

跳转到指定楼层
skaterxu 发表于 2013-10-26 15:15:33
把Hadoop Conf路径加入你的classpath,你会发现可以了。
已写了个小库,可以代码内提交jar到Hadoop,甚至可像Hadoop eclipse plugin一样直接对一个类run on Hadoop。
择日发布~~~
回复

使用道具 举报

easthome001 发表于 2013-10-26 15:15:33
噢,你这个加了conf,还得SetJar,So,等我的小库吧。
回复

使用道具 举报

kaif22 发表于 2013-10-26 15:15:33
回复 3# spork
    请问你的意思是要把做好的mapreduce项目打包成jar,然后servlet里面直接调用吗吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条