【问题标题】:Nutch crawl fails when run as a background process on linux在 Linux 上作为后台进程运行时,Nutch 抓取失败
【发布时间】:2012-08-30 21:37:01
【问题描述】:

当我以本地模式在 Ubuntu 上将 Nutch 抓取作为后台进程运行时,Fetcher 会因挂起的线程而中止。消息类似于:

WARN fetcher.Fetcher - 使用“X”个挂起线程中止。

我使用 nohup 和 & 启动脚本,因为我想从会话中注销并让爬虫仍然在服务器上运行。否则,当爬网在某个深度完成并且正在更新 crawldb 时,SSH 会话会超时。我试过在没有太多帮助的情况下配置“保持活力”消息。命令类似于:

nohup ./bin/nutch crawl ....... &

以前有人经历过吗?似乎只有当我使用 nohup 或 & 时才会发生。

【问题讨论】:

    标签: linux ubuntu ssh nutch


    【解决方案1】:

    当某些请求似乎挂起时,Fetcher 类会记录挂起的线程消息,尽管出于所有意图。 在 Fetcher.java 中,第 926-930 行 ::

      if ((System.currentTimeMillis() - lastRequestStart.get()) > timeout) {
        if (LOG.isWarnEnabled()) {
          LOG.warn("Aborting with "+activeThreads+" hung threads.");
        }
        return;
      }
    

    请求的超时时间由 mapred.task.timeout 定义,默认值为 10 分钟。你可能会增加它..不确定它是否会是 100% 干净的修复。

    当我观察到这种现象时,我在代码中添加了记录器以查找请求挂起超过 10 分钟的 url,并得出结论,对于大文件,当服务器花费更多时间进行数据传输时也会出现此问题.

    【讨论】:

    • 好吧,如果我划分种子并运行多次爬网,它似乎工作正常。它必须与注入的 url 或域的数量有关。无论如何,您是在说上面下载的文件大小吗?
    • 这就是我在遇到该问题时所推断的。正如你提到的种子划分,也可能发生一次拥有所有网址的情况,一些服务器可能在处理几个请求后无法快速响应。如果您使用我提到的方式重新生成和调试,您可以找出有问题的 url/主机。
    • 你能告诉我你是如何得到上面代码中记录的 URL 的吗?你是从 fetchQueue 得到的吗?
    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多