2021SC@SDUSC

目录

一、nutch是什么?

二、nutch的目标

三、nutch的组成成分

四、下载安装说明

五、组内成员分工

六 、爬虫

七、工作流程

总结


一、nutch是什么?

Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。

Nutch的创始人是Doug Cutting,他同时也是Lucene、Hadoop和Avro开源项目的创始人。

Nutch诞生于2002年8月,是Apache旗下的一个用Java实现的开源搜索引擎项目,自Nutch1.2版本之后,Nutch已经从搜索引擎演化为网络爬虫,接着Nutch进一步演化为两大分支版本:1.X和2.X,这两大分支最大的区别在于2.X对底层的数据存储进行了抽象以支持各种底层存储技术。

在Nutch的进化过程中,产生了Hadoop、Tika、Gora和Crawler Commons四个Java开源项目。如今这四个项目都发展迅速,极其火爆,尤其是Hadoop,其已成为大规模数据处理的事实上的标准。Tika使用多种现有的开源内容解析项目来实现从多种格式的文件中提取元数据和结构化文本,Gora支持把大数据持久化到多种存储实现,Crawler Commons是一个通用的网络爬虫组件。

二、nutch的目标

Nutch 致力于让每个人能很容易, 同时花费很少就可以配置世界一流的Web搜索引擎. 为了完成这一宏伟的目标, Nutch必须能够做到:

  • 每个月取几十亿网页

  • 为这些网页维护一个索引

  • 对索引文件进行每秒上千次的搜索

  • 提供高质量的搜索结果

  • 以最小的成本运作

三、nutch的组成成分

爬虫crawler和查询searcher。Crawler主要用于从网络上抓取网页并为这些网页建立索引。Searcher主要利用这些索引检索用户的查找关键词来产生查找结果。两者之间的接口是索引,所以除去索引部分,两者之间的耦合度很低。

Crawler和Searcher两部分尽量分开的目的主要是为了使两部分可以分布式配置在硬件平台上,例如将Crawler和Searcher分别放在两个主机上,这样可以提升性能。

四、下载安装说明

因为我要做主要代码分析,我就直接从appache(Apache Nutch™ -)上把包下下来,用eclipse把包打开,没有在Linux平台上安装运行

五、组内成员分工

这个项目我们组只有两个人,初步预计我来做爬虫,另一个来做搜索项目

六 、爬虫

Crawler的重点在两个方面,Crawler的工作流程和涉及的数据文件的格式和含义。数据文件主要包括三类,分别是web database,一系列的segment加上index,三者的物理文件分别存储在爬行结果目录下的db目录下webdb子文件夹内,segments文件夹和index文件夹。那么三者分别存储的信息是什么呢?

一次爬行会产生很多个segment,每个segment内存储的是爬虫Crawler在单独一次抓取循环中抓到的网页以及这些网页的索引。Crawler爬行时会根据WebDB中的link关系按照一定的爬行策略生成每次抓取循环所需的fetchlist,然后Fetcher通过fetchlist中的URLs抓取这些网页并索引,然后将其存入segment。Segment是有时限的,当这些网页被Crawler重新抓取后,先前抓取产生的segment就作废了。在存储中。Segment文件夹是以产生时间命名的,方便我们删除作废的segments以节省存储空间。

Index是Crawler抓取的所有网页的索引,它是通过对所有单个segment中的索引进行合并处理所得的。Nutch利用Lucene技术进行索引,所以Lucene中对索引进行操作的接口对Nutch中的index同样有效。但是需要注意的是,Lucene中的segment和Nutch中的不同,Lucene中的segment是索引index的一部分,但是Nutch中的segment只是WebDB中各个部分网页的内容和索引,最后通过其生成的index跟这些segment已经毫无关系了。

Web database,也叫WebDB,其中存储的是爬虫所抓取网页之间的链接结构信息,它只在爬虫Crawler工作中使用而和Searcher的工作没有任何关系。WebDB内存储了两种实体的信息:page和link。Page实体通过描述网络上一个网页的特征信息来表征一个实际的网页,因为网页有很多个需要描述,WebDB中通过网页的URL和网页内容的MD5两种索引方法对这些网页实体进行了索引。Page实体描述的网页特征主要包括网页内的link数目,抓取此网页的时间等相关抓取信息,对此网页的重要度评分等。同样的,Link实体描述的是两个page实体之间的链接关系。WebDB构成了一个所抓取网页的链接结构图,这个图中Page实体是图的结点,而Link实体则代表图的边。

七、工作流程

在创建一个WebDB之后(步骤1), “产生/抓取/更新”循环(步骤3-6)根据一些种子URLs开始启动。当这个循环彻底结束,Crawler根据抓取中生成的segments创建索引(步骤7-10)。在进行重复URLs清除(步骤9)之前,每个segment的索引都是独立的(步骤8)。最终,各个独立的segment索引被合并为一个最终的索引index(步骤10)。

其中有一个细节问题,Dedup操作主要用于清除segment索引中的重复URLs,但是我们知道,在WebDB中是不允许重复的URL存在的,那么为什么这里还要进行清除呢?原因在于抓取的更新。比方说一个月之前你抓取过这些网页,一个月后为了更新进行了重新抓取,那么旧的segment在没有删除之前仍然起作用,这个时候就需要在新旧segment之间进行除重。

Nutch和Lucene

Nutch是基于Lucene的。Lucene为Nutch提供了文本索引和搜索的API。

一个常见的问题是:我应该使用Lucene还是Nutch?

最简单的回答是:如果你不需要抓取数据的话,应该使用Lucene。

常见的应用场合是:你有数据源,需要为这些数据提供一个搜索页面。在这种情况下,最好的方式是直接从数据库中取出数据并用Lucene API 建立索引。

在你没有本地数据源,或者数据源非常分散的情况下,应该使用Nutch。

在分析了Crawler工作中设计的文件之后,接下来我们研究Crawler的抓取流程以及这些文件在抓取中扮演的角色。Crawler的工作原理:首先Crawler根据WebDB生成一个待抓取网页的URL集合叫做Fetchlist,接着下载线程Fetcher根据Fetchlist将网页抓取回来,如果下载线程有很多个,那么就生成很多个Fetchlist,也就是一个Fetcher对应一个Fetchlist。然后Crawler用抓取回来的网页更新WebDB,根据更新后的WebDB生成新的Fetchlist,里面是未抓取的或者新发现的URLs,然后下一轮抓取循环重新开始。这个循环过程可以叫做“产生/抓取/更新”循环。

指向同一个主机上Web资源的URLs通常被分配到同一个Fetchlist中,这可防止过多的Fetchers对一个主机同时进行抓取造成主机负担过重。另外Nutch遵守Robots Exclusion Protocol,网站可以通过自定义Robots.txt控制Crawler的抓取。

在Nutch中,Crawler操作的实现是通过一系列子操作的实现来完成的。这些子操作Nutch都提供了子命令行可以单独进行调用。下面就是这些子操作的功能描述以及命令行,命令行在括号中。

1. 创建一个新的WebDb (admin db -create).

2. 将抓取起始URLs写入WebDB中 (inject).

3. 根据WebDB生成fetchlist并写入相应的segment(generate).

4. 根据fetchlist中的URL抓取网页 (fetch).

5. 根据抓取网页更新WebDb (updatedb).

6. 循环进行3-5步直至预先设定的抓取深度。

7. 根据WebDB得到的网页评分和links更新segments (updatesegs).

8. 对所抓取的网页进行索引(index).

9. 在索引中丢弃有重复内容的网页和重复的URLs (dedup).

10. 将segments中的索引进行合并生成用于检索的最终index(merge).


总结

nutch主要由两部分组成,用来抓取并建立索引的爬虫Crawler与从索引中搜索数据的seacher,nutch作为一个基于Lucene的搜索引擎,其必须处理数量非常巨大的,这对nutch有着严格的要求,接下来我将用13周左右,详细分析一下nutch的核心代码。

nutch代码分析第一篇——综述相关推荐

  1. 山东大学软件实验课程-Ebiten-基于go语言实现的2D游戏库源码分析第一篇-综述 2021SC@SDUSC

    2021SC@SDUSC 目录 一.项目综述 二.go语言安装及环境配置 1.Go的安装 2.IDE的使用 三.小组内成员分工 一.项目综述 Ebiten 是Go 编程语言的开源游戏库.Ebiten ...

  2. nutch代码分析第二篇——crawl.crawl

    2021SC@SDUSC 顾名思义,org.apache.nutch.crawl.Crawl实现的是一个完整的抓取过程,包括各种方法的初始化,url集的建立 /* Perform complete c ...

  3. 【高级内部资料】.NET数据批量写入性能分析 第一篇

    [高级内部资料].NET数据批量写入性能分析 第一篇 说起数据的批量写入,相信大家应该不陌生了,那么我们本系列的文章不准备讲述如何来进行数据的批量写入,而是介绍常用的数据批量写入方法的性能分析. 同时 ...

  4. 第一篇综述-无人车简介(二)

    第一篇综述-无人车简介(一) 目录 正面影响 巨大经济效益 增加驾驶安全 缓解交通拥堵 降低环境污染 负面影响 大量人员失业 泄露隐私 公共安全威胁 面临的挑战 伦理道德 责任归属 技术障碍 正面影响 ...

  5. 第一篇综述-无人车系统架构(三)

    第一篇综述-无人车简介(一) 第一篇综述-无人车简介(二) 目录 硬件架构 软件架构 前面简述了无人车的定义及分级.发展历程.社会影响及所面临的技术挑战.本章将讲述无人车的系统架构,包括硬件架构和软件 ...

  6. 第一篇综述-无人车简介(一)

    第一篇综述-无人车简介(二) 目录 定义及分级 发展历程 定义及分级 无人车(driverless car)又称自主车或自动驾驶车,是一种无须人工干预而能够感知其周边环境和导航的车辆.它利用了包括雷达 ...

  7. matlab实现鬼波信号压制算法(附鬼波算法压制工具包)  代码实践--第一篇 频率-空间域自适应鬼波压制

    matlab实现鬼波信号压制算法(附鬼波算法压制工具包)  代码实践 涵盖了频率-空间域.频率-波数域.拉东域鬼波压制算法     建议实践之前熟练掌握各个域鬼波压制方法的原理,才能对代码有更深入的了 ...

  8. 2021SC@SDUSC BRPC代码分析(七) —— bthread综述、Butex及mutex详解

    2021SC@SDUSC 文章目录 一.bthread的背景知识学习 二.代码分析 总结 一.bthread的背景知识学习 经过前面6篇代码分析,我将BRPC一个极其实用的工具--bvar做了全面系统 ...

  9. jQuery 源码分析第一篇之入口源码

    目前阅读的是jQuery 1.11.3的源码,有参考nuysoft的资料.原来比较喜欢在自己的Evernote上做学习基类,并没有在网上写技术博客的习惯,现在开始学习JS的开源代码,想跟大家多交流,希 ...

  10. 图神经网络代码_第一篇:图神经网络(GNN)计算框架绪论

    写在开头: 这个专栏是为了总结我本科毕业设计中所设计的题目<基于GPU的图神经网络算法库的设计钰实现>.这半年来一直在这个方向上啃代码,读论文,真的学到了很多东西.尤其是阅读了大佬团队写的 ...

最新文章

  1. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数
  2. 编程中python怎么读-对Python新手编程过程中如何规避一些常见问题的建议
  3. strcat strcpy 源代码,用指针去实现
  4. 大数据基础系列 4:伪分布式 Hadoop 在 Ubuntu 上的安装流程完整步骤及易错点分析
  5. conda install 换源_科学网—Anaconda 报错Multiple Errors Encountered和添加国内镜像以及换源和恢复默认源 - 张伟的博文...
  6. java实现单词或字符串反转
  7. 安卓nfs网络文件服务器,Linux网络文件服务器 NFS
  8. html上传图片(进度条变化)、音乐
  9. a minimal solution(30,31,32)
  10. Web项目中时间格式化的方法
  11. CLion中malloc头文件显示未找到
  12. 产品补丁包测试的基本流程
  13. 通过 Kali Linux 暴力破解 WiFi
  14. 连接网络计算机提示没有访问权限,无网络访问权限,教您无网络访问权限怎么办...
  15. Nessus访问报错(Corrupt Database A corrupt database has been detected which prevents Nessus from........)
  16. filters过滤器
  17. 机器学习算法(十) 根据幸福感问卷调查做预测
  18. 2020年980计算机综合,2022年华北水利水电大学980计算机学科专业综合考研复习资料...
  19. 【web-ctf】ctf_BUUCTF_web(2)
  20. 数据挖掘02-特征工程良好特征的特点

热门文章

  1. .jpg .png .jpeg图片转.eps矢量图的python脚本
  2. 前端H5面试题CSS:如何解决 margin“塌陷”?
  3. CCNA考试题库中英文翻译版及答案2
  4. 2017年电力职称计算机考试题,2017年职称计算机考试Excel试题(1)
  5. JPA mappedBy、JoinColumn、FetchType.LAZY和FetchType.EAGER介绍
  6. 数据分析的法宝---箱形图(Box Plot)
  7. FastDFS原理及入门
  8. 地球是圆的:《世界是平的》
  9. 微型计算机说明书,B52微机系统使用手册.doc
  10. 3串口多串口双串口以及2串口UART转WiFi多跳通讯实现三