首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从jsp servlet运行mapreduce作业

从jsp servlet运行mapreduce作业
EN

Stack Overflow用户
提问于 2017-06-16 12:49:39
回答 1查看 108关注 0票数 0

我有一个简单的java程序,它将distcp包装在hadoop集群上复制文件。我可以在IDE和hadoop中成功地运行它。

我想要一个jsp web应用程序,这样人们就可以使用web界面来与我的程序交互。

我创建了一个包含所有依赖项的胖jar,并将其部署到我的web应用程序中。现在的问题是,每当程序想提交distcp作业时,它都会出现以下错误:

代码语言:javascript
复制
java.io.IOException: Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses.
at org.apache.hadoop.mapreduce.Cluster.initialize(Cluster.java:143)
at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:108)
at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:101)
at org.apache.hadoop.tools.DistCp.createMetaFolderPath(DistCp.java:419)
at org.apache.hadoop.tools.DistCp.<init>(DistCp.java:106)
at replication.ReplicationUtils.doCopy(ReplicationUtils.java:127)
at replication.ReplicationUtils.copy(ReplicationUtils.java:77)
at replication.parallel.DistCpTask.run(DistCpTask.java:28)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

我检查了mapreduce.framework.name,这确实是纱线

有什么想法吗?

UPDATE1:

经过一些调试后,我发现以下代码:

代码语言:javascript
复制
 Iterable<ClientProtocolProvider> frameworkLoader =
            ServiceLoader.load(ClientProtocolProvider.class);
    for(ClientProtocolProvider cpp: frameworkLoader) {
        System.out.println(cpp.toString());
    }

当我在本地运行它时,我得到:

代码语言:javascript
复制
org.apache.hadoop.mapred.YarnClientProtocolProvider@7a4f0f29
org.apache.hadoop.mapred.LocalClientProtocolProvider@5fa7e7ff

但是,当它从web服务器运行时,我得到:

代码语言:javascript
复制
org.apache.hadoop.mapred.LocalClientProtocolProvider@5fa7e7ff

我仍然不知道为什么会发生这种情况。在我部署在webserver中的胖jar中有YarnClientProtocolProvider。

UPDATE2:

我创建的uber jar以某种方式合并了依赖jar的META/services目录下的所有服务提供者声明,因此最后一个文件只包含'org.apache.hadoop.mapred.LocalClientProtocolProvider'.。

我仍然在想为什么当我用

代码语言:javascript
复制
hadoop jar my.jar ....

它识别'org.apache.hadoop.mapred.YarnClientProtocolProvider‘,尽管它不存在于my.jar的META/services目录下的服务提供者中。

现在,我认为问题应该是如何创建一个不合并服务提供者条目的uber jar。

EN

回答 1

Stack Overflow用户

发布于 2017-06-16 17:46:48

这个问题与jsp servlet无关,我创建了一个新的post here,它说明了到底是什么问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44589681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档