2016-09-07 81 views
1

我已經完成了hadoop和hbase的nutch設置。如果我通過命令行(終端)運行作業,如果成功。但是當我想通過nutch wepapp服務器運行相同的命令發生異常時。Apache Nutch 2.3.1遠程命令失敗

2016-09-07 12:25:31,800 ERROR impl.RemoteCommandExecutor - Remote command failed 
java.util.concurrent.TimeoutException 
    at java.util.concurrent.FutureTask.get(FutureTask.java:205) 
    at org.apache.nutch.webui.client.impl.RemoteCommandExecutor.executeRemoteJob(RemoteCommandExecutor.java:61) 
    at org.apache.nutch.webui.client.impl.CrawlingCycle.executeCrawlCycle(CrawlingCycle.java:58) 
    at org.apache.nutch.webui.service.impl.CrawlServiceImpl.startCrawl(CrawlServiceImpl.java:69) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
    at org.springframework.aop.interceptor.AsyncExecutionInterceptor$1.call(AsyncExecutionInterceptor.java:97) 
    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) 
2016-09-07 12:25:31,850 INFO impl.CrawlingCycle - Executed remote command data: INJECT status: FAILED 

我已經爲應用服務器即nutchserverwebapp開始拖車服務。我已經以用戶模式和root用戶身份運行這些服務。但結果相同。

回答

2

這是超時異常的RemoteCommandExecuter的.java

嘗試增加的最大超時等待獲得的結果在執行工作。它最多等待計算完成的給定時間,然後檢索結果。

private static final int DEFAULT_TIMEOUT_SEC = 60; 

    public JobInfo executeRemoteJob(RemoteCommand command) { 
     try { 
      String jobId = client.executeJob(command.getJobConfig()); 
      Future<JobInfo> chekerFuture = executor 
       .submit(new JobStateChecker(jobId)); 
      return chekerFuture.get(getTimeout(command), TimeUnit.MILLISECONDS); 
     } catch (Exception e) { 
      log.error("Remote command failed", e); 
      JobInfo jobInfo = new JobInfo(); 
      jobInfo.setState(State.FAILED); 
      jobInfo.setMsg(ExceptionUtils.getStackTrace(e)); 
      return jobInfo; 
     } 
     } 

    private long getTimeout(RemoteCommand command) { 
     if (command.getTimeout() == null) { 
      return DEFAULT_TIMEOUT_SEC * DateTimeConstants.MILLIS_PER_SECOND; 
     } 
     return command.getTimeout().getMillis(); 
     } 

DEFAULT_TIMEOUT_SEC更改爲更高的值。