java - 启动 AppEngine MapJob 出现错误 : com. google.appengine.api.modules.ModulesException:未知模块

标签 java google-app-engine mapreduce

我正在使用 AppEngine java 版本 1.9.4 和 Ninja Web 框架 3.1.5。

当我尝试在 AppEngine 中启动 MapJob 时:

String datastoreType = "ENTITY_NAME";
int mapShardCount = 1;

DatastoreKeyInput input = new DatastoreKeyInput(datastoreType, mapShardCount);
   DeleteEntityMapper mapper = new DeleteEntityMapper();
   MapSpecification<Key, Void, Void> specification = new MapSpecification.Builder<Key, Void, Void>(input, mapper)
       .setJobName("Delete MapReduce entities")
       .build();

MapSettings settings = new MapSettings.Builder()
   .setWorkerQueueName("mapreduce-workers")
   .setModule("mapreduce")
   .build();
String id = MapJob.start(specification, settings);//run MapJob

但我收到此错误:com.google.appengine.api.modules.ModulesException:未知模块

[INFO] Aug 05, 2014 9:55:29 AM com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
[INFO] INFO: Successfully processed D:\Programs\sts\workspace\AAAAAA\target\aaa_AAAAAA-0.0.1-SNAPSHOT\WEB-INF/queue.xml
[INFO] Aug 05, 2014 9:55:29 AM com.google.appengine.api.taskqueue.dev.LocalTaskQueue init
[INFO] INFO: LocalTaskQueue is initialized
[INFO] Aug 05, 2014 9:55:29 AM org.quartz.simpl.SimpleThreadPool initialize
[INFO] INFO: Job execution threads will use class loader of thread: pool-2-thread-1
[INFO] Aug 05, 2014 9:55:29 AM org.quartz.core.QuartzScheduler <init>
[INFO] INFO: Quartz Scheduler v.UNKNOWN.UNKNOWN.UNKNOWN created.
[INFO] Aug 05, 2014 9:55:29 AM org.quartz.simpl.RAMJobStore initialize
[INFO] INFO: RAMJobStore initialized.
[INFO] Aug 05, 2014 9:55:29 AM org.quartz.impl.StdSchedulerFactory instantiate
[INFO] INFO: Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
[INFO] Aug 05, 2014 9:55:29 AM org.quartz.impl.StdSchedulerFactory instantiate
[INFO] INFO: Quartz scheduler version: UNKNOWN.UNKNOWN.UNKNOWN
[INFO] Aug 05, 2014 9:55:29 AM org.quartz.core.QuartzScheduler start
[INFO] INFO: Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[INFO] Aug 05, 2014 9:55:29 AM com.google.appengine.api.taskqueue.dev.LocalTaskQueue start_
[INFO] INFO: Local task queue initialized with base url http://127.0.0.1:8080
[INFO] Aug 05, 2014 9:55:29 AM ninja.NinjaImpl invoke
[INFO] SEVERE: Emitting bad request 400. Something really wrong when calling route: /init/mapperTimezone.json (class: class com.aaa.AAAAAA.controllers.DATAController method: public ninja.Result com.aaa.AAAAAA.controllers.DATAController.mapperTimezone())
[INFO] com.google.appengine.api.modules.ModulesException: Unknown module
[INFO] at com.google.appengine.api.modules.ModulesServiceImpl$ModulesServiceFutureWrapper.convertApplicationException(ModulesServiceImpl.java:365)
[INFO] at com.google.appengine.api.modules.ModulesServiceImpl$ModulesServiceFutureWrapper.convertException(ModulesServiceImpl.java:352)
[INFO] at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:94)
[INFO] at com.google.appengine.api.modules.ModulesServiceImpl.getAsyncResult(ModulesServiceImpl.java:104)
[INFO] at com.google.appengine.api.modules.ModulesServiceImpl.getDefaultVersion(ModulesServiceImpl.java:163)
[INFO] at com.google.appengine.tools.pipeline.impl.model.JobRecord.<init>(JobRecord.java:369)
[INFO] at com.google.appengine.tools.pipeline.impl.model.JobRecord.<init>(JobRecord.java:379)
[INFO] at com.google.appengine.tools.pipeline.impl.model.JobRecord.createRootJobRecord(JobRecord.java:393)
[INFO] at com.google.appengine.tools.pipeline.impl.PipelineManager.registerNewJobRecord(PipelineManager.java:155)
[INFO] at com.google.appengine.tools.pipeline.impl.PipelineManager.startNewPipeline(PipelineManager.java:107)
[INFO] at com.google.appengine.tools.pipeline.impl.PipelineServiceImpl.startNewPipeline(PipelineServiceImpl.java:42)
[INFO] at com.google.appengine.tools.mapreduce.MapJob.start(MapJob.java:63)
[INFO] at com.aaa.AAAAAA.controllers.DATAController.mapperTimezone(DATAController.java:49)
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[INFO] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[INFO] at java.lang.reflect.Method.invoke(Method.java:606)
[INFO] at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
[INFO] at ninja.params.ControllerMethodInvoker.invoke(ControllerMethodInvoker.java:55)
[INFO] at ninja.FilterChainEnd.next(FilterChainEnd.java:48)
[INFO] at ninja.appengine.AppEngineFilter.filter(AppEngineFilter.java:69)
[INFO] at ninja.FilterChainImpl.next(FilterChainImpl.java:35)
[INFO] at ninja.NinjaImpl.invoke(NinjaImpl.java:112)
[INFO] at ninja.servlet.NinjaServletDispatcher.service(NinjaServletDispatcher.java:83)
[INFO] at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:263)
[INFO] at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:178)
[INFO] at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)
[INFO] at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:62)
[INFO] at com.googlecode.objectify.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:58)
[INFO] at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48)
[INFO] at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163)
[INFO] at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
[INFO] at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118)
[INFO] at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
[INFO] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
[INFO] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)
[INFO] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
[INFO] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
[INFO] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
[INFO] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
[INFO] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
[INFO] at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
[INFO] at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
[INFO] at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO] at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
[INFO] at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
[INFO] at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
[INFO] at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
[INFO] at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
[INFO] at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
[INFO] at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
[INFO] at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:491)
[INFO] at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
[INFO] at org.mortbay.jetty.Server.handle(Server.java:326)
[INFO] at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
[INFO] at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
[INFO] at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
[INFO] at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
[INFO] at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
[INFO] at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
[INFO] at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

有人遇到同样的错误吗?有什么建议可以解决这个问题吗?

最佳答案

我认为您只是忘记更新 web.xml 配置文件(如引用文献中所述)以声明您的 map 作业:

“在运行作业之前,您还必须将 MapReduce 库和其他信息添加到应用程序的配置文件中。Configuring your Project 中对此进行了描述。”

关于java - 启动 AppEngine MapJob 出现错误 : com. google.appengine.api.modules.ModulesException:未知模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25130653/

相关文章:

java - 是否可以创建嵌套的 LinkedObject [Java]

Java8 .getMethod() 与::getMethod

google-app-engine - GAE/去 : Namespace not working

java - 如何知道reducer已经完成了它的任务

Java构造函数重载歧义

java - 使用 java 的 Gmail 密码字段 Selenium WebDriver 元素不可交互

image - 错误 :java. lang.UnsupportedOperationException:使用 App Engine 的 BlobStore 和图像 API 时没有图像数据可用

google-app-engine - 使用go在应用程序引擎中包含电子邮件 header ?

debugging - mongodb:如何在 mongodb shell 上调试 map/reduce

eclipse - 如何使用Eclipse从Windows运行Map Reduce程序