`

抓取流程-updatedb

 
阅读更多

此过程比较简单,是generate,fetch,udpatedb中的最后一环。其实就是将新发现的和抓取失败的送回crawldb/current下。

 

过程:

一。input

inputpaths:contains [ crawldb/current,crawl_fetch,crawl_parse],note:这是利用FileInputPath.addInputpath(),这意味着相当于使用多个files作为输入;但不同于MultiInputs.addInput()!

additionsAllowed :如果为false,只会更新crawldb中的urls而不会将新parsed的添加进crawldb中

生成job:利用Crawldb.createjob().

 

二。output

path:crawldb/current,保证下一次fetch的urls总是有效的。

format:MapFileOutputFormat。<text,crawldb> :<url,crawldatum>

 

 

三。MR

M:use default mapper

R:CrawldbReducer,其中对同一个url来自不同result files的进行状态 处理:如要有多个,根据fetchTime只取出最后一个。

  note:1.在fetch.getStatus()分支中,在schedule.initializeSchedule()时会进行fetchtime的更新到当前时间。同时由linked --> db_unfetched,表明由fetch生成的outlink进行状态转换,等待下一回合的fetch操作。

2.由于使用了Hashpartition,所以同一Urls会进入相同的red,所以不用担心多个reds时如何保证所有urls在同一red中处理。

3.怎样保证已经fetched的urls不再fetch?

有generator进行了过滤:

A.在topn job中的mapper

1)shouldFetch()

public boolean shouldFetch(Text url, CrawlDatum datum, long curTime) {
    // pages are never truly GONE - we have to check them from time to time.
    // pages with too long fetchInterval are adjusted so that they fit within
    // maximum fetchInterval (segment retention(保留) period).
    if (datum.getFetchTime() - curTime > (long) maxInterval * 1000) {  //maxInterval is 90days by default
      if (datum.getFetchInterval() > maxInterval) {
        datum.setFetchInterval(maxInterval * 0.9f); //超过指定最大间隔,减少至9成
      }
      datum.setFetchTime(curTime);
    }
    if (datum.getFetchTime() > curTime) {
      return false;                                   // not time yet
    }
    return true;  //比当前时间早
  }

 这里只是进行了简单的fetchtime比较,由于updatedb后fetchtime设置了一个月后的间隔,所以这里返回 false。

所以以下步骤可以不分析了。这里只是给出更多的原因说明 而已

 

2)如果 上述返回 true,执行这个

LongWritable oldGenTime = (LongWritable) crawlDatum.getMetaData().get(
          Nutch.WRITABLE_GENERATE_TIME_KEY);
      if (oldGenTime != null) { // awaiting fetch & update;updatedb后的此值为空
        if (oldGenTime.get() + genDelay > curTime) // still wait for
        // update;还没过期,不需要crawl?
        return;
      }

 发现在udpatedb后,对应的_ngt_是不存在的,即在这里为null,同样返回

 

 

B.DecreasingFloatComparator

即使通过 A中的过滤,并不意味着此urls就一定被 选择为fetch,还要在筛选出topn by score。所以这里进一步过滤了urls.

 

事实上当进行下一回的generate时,已经不存在www.163.com这个url了:

hadoop fs -text  output/debug/segments/20110714121627/crawl_generate/part-00000  | grep www.163.com -B 10 -A 10
http://www.163.com/rss/    Version: 7
Status: 1 (db_unfetched)
Fetch time: Tue Jul 12 23:49:27 CST 2011
Modified time: Thu Jan 01 08:00:00 CST 1970
Retries since fetch: 0
Retry interval: 2592000 seconds (30 days)
Score: 0.01
Signature: null
Metadata: _ngt_: 1310616920169

 

出现 的只是未fetched的urls。

 

相关资料:

generator

抓取小结

 

---------------------------------

之前新增/修改过crawldb的jobs有:

inject:新增crawldb/current下.

  由于injector时是<url,crawldatum>格式,所以与此是兼容的。see injector

generator:如果更新时,結果更新到crawldb/current下

 

====================

output data:

http://189works.csdn.net/    Version: 7
Status: 1 (db_unfetched)
Fetch time: Tue Jul 12 23:41:30 CST 2011
Modified time: Thu Jan 01 08:00:00 CST 1970
Retries since fetch: 0
Retry interval: 2592000 seconds (30 days)
Score: 0.01
Signature: null
Metadata:

http://aix.csdn.net/    Version: 7
Status: 1 (db_unfetched)
Fetch time: Tue Jul 12 23:45:56 CST 2011
Modified time: Thu Jan 01 08:00:00 CST 1970
Retries since fetch: 0
Retry interval: 2592000 seconds (30 days)
Score: 0.01
Signature: null
Metadata:

。。。

 

 

 

 

分享到:
评论

相关推荐

    NSE-scripts:NSE脚本可检测CVE-2020-1350 SIGRED和CVE-2020-0796 SMBGHOST,CVE-2021-21972

    包含自定义NSE脚本 CVE-2020-0796 NSE脚本使用Microsoft SMBv3压缩(又名coronablue,SMBGhost)来检测易... nmap --script-updatedb 运行为 nmap -p445 --script cve-2020-0796 &lt;&lt;target&gt;&gt; -- @output -- | smb

    Linux updatedb 命令用法详解

    Linux updatedb 命令 updatedb 命令用来创建或更新 slocate/locate 命令所必需的数据库文件。 updatedb 命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入 slocate/locate 数据库...

    Nutch爬虫工作流程及文件格式详细分析.doc

    Nutch 是一个开源的搜索引擎项目,其核心功能包括网络爬虫(Crawler)和搜索器(Searcher)。本文主要分析Nutch爬虫的工作流程及其涉及的...了解Nutch的文件格式和工作流程对于管理和优化大规模的Web抓取任务至关重要。

    nutch tutorials0.8

    - 运行`crawl`命令即可启动局域网抓取流程。 - 使用`inject`, `generate`, `fetch`, 和`updatedb`等底层命令可实现更为精细的全网抓取控制。 #### 四、全网抓取概览 全网抓取允许用户以高度定制的方式抓取整个...

    opencv-arm64

    这个动态库是我在arm64位开发板中编译完成的,系统环境为ubuntu16.04,依赖这些库 [compiler] sudo apt-get install build-essential [required] sudo apt-get install cmake git libgtk2.0-dev pkg-config ...

    黑白棋java源码-tools:用于大规模软件开发工作流程的生产力工具

    该存储库包含一组生产力命令,可以显着改善大型软件项目的开发工作流程。 : 建立档案资料库,快速定位。 : 使用 fast-updatedb 创建的文件信息数据库定位文件和文件夹。 :从文件夹中查找文件。 :从给定的文件或...

    updatedb命令 创建或更新数据库文件

    updatedb命令用来创建或更新 slocate/locate 命令所必需的数据库文件。 updatedb命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入 slocate/locate 数据库文件中。 注意:slocate ...

    updateDB.py

    代码是Python 写的,作用是连接mysql数据库,在连接上后循环查询1000次,这个代码可以用来测试数据库select性能

    新太ivr 关于编写流程的一些经验

    在可能存在误解或难以理解的地方添加详细注释,特别是在数据库操作如SelectDB、InsertDB、UpdateDB、DeleteDB等函数中,应完整注释数据库操作语句,以便在缺乏DBINTERFACE表资料时也能快速修改流程。注释要适度,只...

    Nutch 使用总结

    Nutch 提供了从初始化URL集合、网页抓取、内容解析、索引构建到查询检索等一系列功能,其工作流程包括URL注入、生成抓取队列、内容抓取、内容分析、URL更新和索引构建。 Nutch 的目录结构如下: 1. `bin`:包含可...

    渗透测试之Nmap扫描工具

    渗透测试之Nmap扫描工具 Nmap是一个开源的网络探测和安全审核工具,也是渗透... + --script-updatedb:更新脚本数据库 + --script-help=&lt;Lua scripts&gt;:显示脚本的帮助信息,其中部分可以逗号分隔的文件或脚本类别。

    SQL Tools增强版

    《SQL Tools增强版:连接与管理数据库的利器》 在信息技术高速发展的今天,数据库的管理和操作已经成为IT工作中的重要一环。"SQL Tools增强版"就是一款专为1433SQL数据库设计的强大连接器,它不仅提供了基础的连接...

    windows下nutch的安装配置以及与tomcat的集成.doc

    Nutch支持两种爬行模式:企业内部网爬行和整个互联网爬行,后者通过更底层的命令(如inject、generate、fetch和updatedb)提供更强的控制能力。 #### 安装与配置步骤 **1. Java安装及配置** - 首先,从官方源下载...

    Hadoop-2.4.0+Hbase-0.94.18+Nutch-2.3集群爬虫配置攻略

    启动Nutch爬虫,可以使用`bin/nutch inject`命令将种子URL注入到爬虫队列,然后通过`bin/nutch fetch`, `bin/nutch updatedb`, `bin/nutch parse`, `bin/nutch index`等命令执行抓取流程。如果要在分布式模式下运行...

    nutch爬虫说明文档

    `inject` 命令用来注入种子URL,`generate` 生成需要抓取的新URL列表,`fetch` 负责下载网页,而 `updatedb` 更新数据库以包含新抓取的页面。 **环境配置** 在使用 Nutch 之前,需要进行一定的环境配置。首先,确保...

    Nutch使用入门

    2. **多步操作** - 包括 `inject`, `generate`, `fetch`, `updatedb` 等命令,提供更灵活的控制。 **使用crawl命令抓取网页:** 1. **创建urls目录** - 存放待抓取的URL文件,比如 `www.sina.com.cn`。 2. **配置...

    nmap_中文help

    - **更新脚本数据库** (`--script-updatedb`):更新 NSE 脚本数据库。 - **详细输出** (`-v` / `-d[level]`):增加输出信息的详细程度。 - **只显示开放端口** (`--open`):仅显示开放的端口。 #### 其他选项 - **...

    NMAP迷你使用手册(英文原版)

    4. **更新脚本数据库**:使用`--script-updatedb`更新脚本数据库。 5. **常用脚本示例**: - `dns-zone-transfer`: 尝试从DNS服务器拉取区域文件(AXFR)。 ``` nmap --script dns-zone-transfer.nse --script-...

    nutch1.6压缩代码

    4. **抓取网页**:使用`bin/nutch fetch`命令下载网页,`bin/nutch parse`命令解析内容,`bin/nutch updatedb`更新数据库。 5. **生成索引**:使用`bin/nutch index`命令将解析后的数据导入到搜索引擎,如Solr或...

Global site tag (gtag.js) - Google Analytics