在wildfly servlet上从动态web项目运行hadoop mapreduce作业

798qvoo8  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(340)

我已经在ubuntu13.10上安装了hadoop2.2.0,在我的pc上以伪分布式模式启动并正确运行(只有一个datanode)。我使用带有maven插件的eclipsekeplerv4.3来开发hadoop程序和动态web项目(web项目没有maven)。
我有一个名为“hadwork”的hadoop项目,我从中创建了hadwork.jar(右键单击project、export、runnable jar文件,并选择“将所需库提取到生成的jar中”)。当从命令行运行job时,它可以正常工作:“hadoop jar hadwork.jar parameter1 parameter2 parameter3”,并且我可以正确地看到终端上的工作进度。
现在我想从部署在wildfly8.0应用服务器上的动态web应用程序运行job(eclipse已经配置为在正确的服务器上以独立模式运行项目wildfly)。我正在编写servlet“servlethadooptest.java”,但我不明白如何从我的web应用程序运行作业,什么库(hadoop库jar?我的工作罐?)我需要加载和哪里加载它。我不能直接在servlet中使用命令“hadoop jar hadwork.jar parameter1 parameter2 parameter3”。简而言之,我想要的是:当我点击页面“index.jsp”上的“startjob”按钮时,job hadwork开始工作,并在网页中显示“working job..”消息,可能显示跟踪作业的url。我想从servlet调用mapreduce job。我可以在应用服务器上加载hadwork.jar(如果是,在哪里?)。
我在谷歌上寻找信息,但我还没有找到任何答案。。

dced5bon

dced5bon1#

基本上有两种选择来做你想做的事情:
1) 在servlet中 Package 对hadoop的命令行调用。这非常难看,但最容易设置,因为您不必混合使用web应用程序代码库和hadoop。下面是一个如何做到这一点的例子:

String[] cmd = new String[] { <hadoop command goes here> };
    Process process = Runtime.getRuntime().exec(cmd);

2) 另一个更好的选择是将hadoop代码和hadoop依赖项打包到servlet中。我强烈建议您使用maven进行依赖性管理。要从servlet运行map reduce作业,必须执行以下操作:-打包hadoop和作业jar-创建反映集群(尤其是dfs和mapred主机)的配置对象-实现工具

相关问题