`

nutch 数据增量更新

 
阅读更多

以下是转载的执行recrawl的脚本(其实还是可以再优化的,比如参数和备份处理过程等 ),来对比 一下与普通的crawl有啥区别。

# runbot script to run the Nutch bot for crawling and re-crawling.
# Usage: bin/runbot [safe]
#        If executed in 'safe' mode, it doesn't delete the temporary
#        directories generated during crawl. This might be helpful for
#        analysis and recovery in case a crawl fails.
#
# Author: Susam Pal

depth=2
threads=5
adddays=5
topN=15 #Comment this statement if you don't want to set topN value

# Arguments for rm and mv
RMARGS="-rf"
MVARGS="--verbose"

# Parse arguments
if [ "$1" == "safe" ]
then
  safe=yes
fi

if [ -z "$NUTCH_HOME" ]
then
  NUTCH_HOME=.
  echo runbot: $0 could not find environment variable NUTCH_HOME
  echo runbot: NUTCH_HOME=$NUTCH_HOME has been set by the script 
else
  echo runbot: $0 found environment variable NUTCH_HOME=$NUTCH_HOME 
fi

if [ -z "$CATALINA_HOME" ]
then
  CATALINA_HOME=/opt/apache-tomcat-6.0.10
  echo runbot: $0 could not find environment variable NUTCH_HOME
  echo runbot: CATALINA_HOME=$CATALINA_HOME has been set by the script 
else
  echo runbot: $0 found environment variable CATALINA_HOME=$CATALINA_HOME 
fi

if [ -n "$topN" ]
then
  topN="-topN $topN"
else
  topN=""
fi

steps=8
echo "----- Inject (Step 1 of $steps) -----"
$NUTCH_HOME/bin/nutch inject crawl/crawldb urls

echo "----- Generate, Fetch, Parse, Update (Step 2 of $steps) -----"
for((i=0; i < $depth; i++))
do
  echo "--- Beginning crawl at depth `expr $i + 1` of $depth ---"
  $NUTCH_HOME/bin/nutch generate crawl/crawldb crawl/segments $topN \
      -adddays $adddays
  if [ $? -ne 0 ]
  then
    echo "runbot: Stopping at depth $depth. No more URLs to fetch."
    break
  fi
  segment=`ls -d crawl/segments/* | tail -1`

  $NUTCH_HOME/bin/nutch fetch $segment -threads $threads
  if [ $? -ne 0 ]
  then
    echo "runbot: fetch $segment at depth `expr $i + 1` failed."
    echo "runbot: Deleting segment $segment."
    rm $RMARGS $segment
    continue
  fi

  $NUTCH_HOME/bin/nutch updatedb crawl/crawldb $segment
done

echo "----- Merge Segments (Step 3 of $steps) -----"
$NUTCH_HOME/bin/nutch mergesegs crawl/MERGEDsegments crawl/segments/*
if [ "$safe" != "yes" ]
then
  rm $RMARGS crawl/segments
else
  rm $RMARGS crawl/BACKUPsegments
  mv $MVARGS crawl/segments crawl/BACKUPsegments
fi

mv $MVARGS crawl/MERGEDsegments crawl/segments

echo "----- Invert Links (Step 4 of $steps) -----"
$NUTCH_HOME/bin/nutch invertlinks crawl/linkdb crawl/segments/*

echo "----- Index (Step 5 of $steps) -----"
$NUTCH_HOME/bin/nutch index crawl/NEWindexes crawl/crawldb crawl/linkdb \
    crawl/segments/*

echo "----- Dedup (Step 6 of $steps) -----"
$NUTCH_HOME/bin/nutch dedup crawl/NEWindexes

echo "----- Merge Indexes (Step 7 of $steps) -----"
$NUTCH_HOME/bin/nutch merge crawl/NEWindex crawl/NEWindexes

echo "----- Loading New Index (Step 8 of $steps) -----"
${CATALINA_HOME}/bin/shutdown.sh

if [ "$safe" != "yes" ]
then
  rm $RMARGS crawl/NEWindexes
  rm $RMARGS crawl/index
else
  rm $RMARGS crawl/BACKUPindexes
  rm $RMARGS crawl/BACKUPindex
  mv $MVARGS crawl/NEWindexes crawl/BACKUPindexes
  mv $MVARGS crawl/index crawl/BACKUPindex
fi

mv $MVARGS crawl/NEWindex crawl/index

${CATALINA_HOME}/bin/startup.sh

echo "runbot: FINISHED: Crawl completed!"
echo ""


其中recrawl的差异:

* 指定了adddays参数:由于fetch time在fetch时被更新为下次要抓取的时间,所以,这里是指定当前时间+adddays后哪些urls是过早的,则需要抓取。所以如果是负数表明相对于是正数来产,将缩小抓取范围。即adddays后即将过期的urls将recrawl

 

* 多了mergesegs job: 将旧版本中的数据用新版本替换,同时将刚生成的segs合并到一个seg或多个指定大小的segs中。个人这个是可选的 。这个应该与下面说的merge job同时存在或去掉。

 

 

NOTE:

merge job(合并索引):对于web crawl来说是不应该执行这个的,因为这样做反而达不到分布式搜索的目的了。

 

此代码已经在修改,增加上验证;剩下删除没有。(个人认为是:如果url到期后再fetch时,如果发现unavailable时将剔除)

* 这里的recrawl ,但index并非是真正的increment index,而是按照之前的(合并的)segments和新的linkdb,crawldb三个目 录重新生成的;所以index的输出目录indexes同样也并非是之前的旧索引文件夹,而是全新的索引(当然没去重)

 

 

compare:

nutch 分布式索引(爬虫)

 

see

apache wiki

linux下nutch的增量抓去(recrawl)-- 注意事项1

nutch研究记录3(增量爬行) --注意事项2

早期recrawl版本

 

分享到:
评论
1 楼 youngliu_liu 2014-03-12  
怎样运行这个脚本啊??大牛,我刚进入搜索引擎行业,希望你能不吝赐教!感激了!!

相关推荐

    Nutch开源搜索引擎增量索引recrawl的终极解决办法

    实现Nutch的增量recrawl通常涉及到多个步骤,包括清理旧数据、生成新的抓取列表、执行抓取任务以及合并新旧索引。这部分内容提到了使用shell脚本自动化这些过程的重要性,特别是在定期执行recrawl时,可以利用...

    Nutch开源搜索引擎增量索引recrawl的终极解决办法续

    然而,在实际操作过程中发现,尽管解决了基本的增量更新逻辑,但在执行`indexmerge`命令后,新旧索引合并并未完全成功。具体表现为:在执行完合并命令后,索引目录中的文件并未按照预期的方式更新。这导致索引数据...

    nutch开发资料 搜索引擎

    2. **增量索引**:在Nutch中,增量索引是指只更新自上次索引以来变化或新增的网页,而不是重新索引整个数据库。这提高了系统的效率,减少了资源消耗。Nutch使用Hadoop进行分布式处理,通过MapReduce实现增量索引的...

    nutch-2.1源代码

    4. **索引更新与合并**:Nutch支持增量索引,这意味着它可以仅对新抓取或更新的网页进行索引,而不是重新索引整个集合。索引合并则用于定期整合多个小索引,以减少索引碎片并优化查询性能。 5. **搜索接口**:Nutch...

    apache-nutch

    3. **索引优化**:Nutch 提供了多种索引策略,如增量索引、定期全量索引等,以适应不同场景需求。 4. **倒排索引**:Nutch 采用倒排索引结构,快速定位关键词在文档中的位置。 **四、Apache Solr 搜索引擎** 1. **...

    nutch分布式搜索索引热替换程序

    2. **增量索引**:Nutch支持增量索引,即只对新抓取或已更改的网页进行索引,而不是重新索引整个数据库。这降低了索引更新的资源需求,并减少了对现有服务的影响。 3. **双写策略**:在热替换过程中,新索引将被...

    Nutch:一个灵活可扩展的开源web搜索引擎

    6. **更新与增量抓取**:Nutch支持增量抓取,即只抓取新出现或已更改的网页,而不是重新抓取整个互联网。这通过检查URL的修改时间戳和使用HTTP头部信息实现。 在深入学习Nutch的过程中,可以结合其源代码理解其内部...

    大数据中数据采集的几种方式.pdf

    网络爬虫工具有多种,例如分布式爬虫Nutch,以及Java爬虫框架Crawler4j、WebMagic和WebCollector,还有非Java的Scrapy框架。 1.2.1 网络爬虫原理: 网络爬虫通过获取URL和解析超链接来抓取信息,然后使用算法决定下...

    大数据采集技术-大数据采集技术概述.pptx

    1. **DataX**:这是一个由阿里巴巴开发的数据同步工具,支持多种数据源到多种目标数据的全量和增量数据迁移,如从RDBMS到Hadoop。 2. **Flume**:Apache Flume是一种分布式、可靠的、可用于聚合和移动大量日志数据...

    网络爬虫调研报告.docx

    增量式抓取则基于已有的网页集合,抓取更新的或过时的网页,确保数据的实时性。实际应用中,两者通常结合使用,前者用于大规模数据初始化,后者用于日常维护和即时更新。 工作流程: Nutch的工作流程主要包括注入...

    Hadoop分布式文件系统结构与设计中文.pdf

    HDFS(Hadoop Distributed File System)是Apache Hadoop项目的一部分,最初是为了支撑Nutch搜索引擎的数据存储需求而创建的。 在设计上,HDFS考虑了硬件故障的常态,它在大量的普通硬件服务器上运行,每个服务器...

    人工智能基础与应用第二章-人工智能-“智”从何来.pptx

    此外,网络数据采集,如网络爬虫,能够从网站上抓取数据,将非结构化信息转化为结构化数据,工具如Nutch、Crawler4j、WebMagic、WebCollector和Scrapy等各有特色。 总的来说,人工智能的基础在于大数据的收集、...

    hdfs官方文档 Hadoop分布式文件系统:结构与设计.pdf

    HDFS源于Apache Nutch项目,是Hadoop项目的一部分,旨在支持高吞吐量的数据访问,适用于大规模批量处理任务,而非常规的交互式应用。HDFS的设计原则包括以下几个方面: 1. **硬件错误的正常化**:由于HDFS部署在...

    分布式网络爬虫的设计与实现应用分析文档.docx

    这种设计使得系统能更好地应对大规模网络环境,尤其是在信息更新迅速、数据量庞大的情况下。 在系统设计过程中,本文特别提到了Bloom过滤器这一关键技术。Bloom过滤器是一种空间效率极高的概率型数据结构,用于判断...

    爬虫技术初探

    增量式爬虫关注的是更新的内容,而DeepWeb爬虫则是针对那些不能被传统搜索引擎直接抓取的动态网页。 网络爬虫的基本结构通常由控制器、解析器、资源库三部分组成。控制器负责分配任务给爬虫线程,解析器进行网页...

    基于Python的网络爬虫框架设计与实现开题报告

    3. 爬虫类型:通用爬虫、聚焦爬虫、增量式爬虫和深层网络爬虫,各有特点,适用于不同数据采集场景。 【三】国内外研究现状 1. 国外研究:网络爬虫起源于90年代,如Archie软件是搜索引擎的先驱。Google的出现推动了...

    带自动账密登录功能的爬虫设计

    其中,批量型网络爬虫有明确的抓取范围限制,而增量型网络爬虫则是不断抓取直到获取所有数据,垂直网络爬虫则专注于特定领域的深度抓取。 在爬虫的实际应用中,有时需要登录后才能访问的数据。这就需要实现自动登录...

    Lucene in action 2nd(English Edition)

    5. **实时更新与增量索引**:展示了如何在数据变化时实时更新索引,以保持搜索结果的最新性。 6. **多语言支持**:讲解了处理不同语言文本的方法,包括语言识别和特定语言的分析器。 7. **分布式搜索**:详细介绍...

Global site tag (gtag.js) - Google Analytics