文档库 最新最全的文档下载
当前位置:文档库 › 基于Hadoop的分布式网络爬虫系统的设计与实现

基于Hadoop的分布式网络爬虫系统的设计与实现

学 校 代 码 10459 学号或申请号 201322172113 密 级 专业硕士学位论文

基于Hadoop 的分布式网络爬虫系统的设计与实现

作 者 姓 名:薛超 导 师 姓 名:杨蓓 副教授 专业学位名称:软件工程 培 养 院 系:信息工程学院 完 成 时 间:2016年5月

A thesis submitted to

Zhengzhou University

for the degree of Master

Design and Implementation of a Distributed Web Crawler

System Based on Hadoop

By Chao Xue

Supervisor: A.Prof. Bei Yang

Software Engineering

School of Information Engineering

May 2016

原创性声明

本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究所取得的成果。除文中已经注明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的科研成果。对本文的研究作出重要贡献的个人和集体,均已在文中以明确方式标明。本声明的法律责任由本人承担。

学位论文作者:

日期:

学位论文使用授权声明

本人在导师指导下完成的论文及相关的职务作品,知识产权归属郑州大学。根据郑州大学有关保留、使用学位论文的规定,同意学校保留或向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅;本人授权郑州大学可以将本学位论文的全部或部分编入有关数据库进行检索,可以采用影印、缩印或者其他复制手段保存论文和汇编本学位论文。本人离校后发表、使用学位论文或与该学位论文直接相关的学术论文或成果时,第一署名单位仍然为郑州大学。保密论文在解密后应遵守此规定。

学位论文作者:

日期:

摘要

摘要

随着互联网规模的不断扩大,云计算、大数据的快速发展,互联网资源的不断增多,搜索引擎在信息检索方面起着关键性的作用,在日常生活中人们已经离不开搜索引擎,搜索引擎能够为人们快速准确地提供所需要的信息。网络爬虫作为搜索引擎的关键组成部分,直接影响着搜索引擎的性能。本文基于Hadoop平台设计并实现了一个分布式网络爬虫系统。

本文基于Hadoop分布式平台、Hbase列式数据库、Storm实时处理平台以及网络爬虫的基本原理,结合用户关于网络爬虫的实际需求,明确网络爬虫系统实现的总体目标、功能以及性能需求,设计出基于Hadoop的分布式网络爬虫系统架构。根据各个模块的功能以及MapReduce计算框架的特点对每个模块进行基于MapReduce计算框架的算法设计以及实现,在抓取任务模块和解析页面模块将抓取状态、解析状态实时写入到Kafka消息队列,基于Storm平台实时计算相关指标结果。最后搭建Hadoop分布式平台和Storm实时处理平台对本文所实现的分布式网络爬虫系统进行测试。

本文所实现的网络爬虫系统具有以下特点:将网络爬虫的抓取任务通过MapReduce分布式计算框架实现,从而将爬虫任务并行化;将抓取到的数据存储到Hbase分布式数据库中,从而将数据均匀分布到各个节点上,并提高了数据读写速度;引入Storm实时计算平台,实时统计网络爬虫运行过程中产生的相关指标。本文网络爬虫系统将抓取到的页面内容存储到Hbase数据库中,解决了以往分布式网络爬虫将页面内容存储到HDFS文件系统中读写速度慢的问题,相对于单节点网络爬虫性能得到显著提高,并支持可扩展性。

关键词:搜索引擎;网络爬虫;Hadoop;Hbase;Storm

I

Abstract

Abstract

With the rapid development of Internet , the quick growing of big data and cloud computing, as well as the continual increasing of Internet resources, search engine plays an important role in the information retrieval. People have been inseparable from the search engine in the daily life. Search engine can quickly and accurately provide the information needed for people. As the key component of the search engine, web crawler has a direct impact on the performance of search engine. This thesis designs and implements a distributed web crawler system based on Hadoop platform.

This thesis introduces Hadoop distributed platform, Hbase database, Storm real-time processing platform and the basic principles of web crawler. Combined with the actual needs of users on web crawler, and the overall goal of web crawler, this thesis designs a distributed web crawler system based on Hadoop platform. It implements the function of each module based on MapReduce computing framework, records the state of grasping and parsing in the Kafka message queue in grasping module and parsing module, as well as counts KPI in real time based on Storm platform. Finally, a Hadoop distributed platform and a Storm real-time processing platform have been built to test the distributed web crawler system designed in this thesis.

The web crawler system developed in this thesis has the following features: It’s a parallel system since it is based on MapReduce computing framework. It stores the fetched data in Hbase distributed database, therefore the data has been evenly distributed to each node and the data read-write speed has been increased to a great degree. It utilizes Storm platform to count KPI in real time. Its performance is significantly improved relative to the single node web crawler, and system scalability is also enhanced.

Keywords: Search Engine; Web Crawler; Hadoop; Hbase; Storm

II

目录

目录

摘要 .......................................................................................................... I Abstract ...................................................................................................... I I 1 绪论 . (1)

1.1 课题研究背景和意义 (1)

1.2 国内外研究现状 (2)

1.3 主要研究内容 (3)

1.4 论文结构安排 (3)

2 相关技术研究 (5)

2.1 Hadoop分布式平台技术 (5)

2.1.1 分布式文件系统HDFS (6)

2.1.2 MapReduce计算框架 (7)

2.2 Hbase数据库 (9)

2.3 Storm实时处理平台 (10)

2.4 Kafka消息队列 (10)

2.5 网络爬虫 (12)

2.5.1 网络爬虫基本原理 (12)

2.5.2 页面搜索策略 (12)

2.5.3 网络爬虫的物理架构 (13)

2.5.4 DNS缓存 (14)

2.5.5 爬虫身份标识 (15)

2.5.6 Robots协议 (15)

2.5.7 解析Html和非Html文档 (16)

2.5.8 OPIC算法 (16)

3 系统需求分析 (18)

3.1 项目总体目标 (18)

3.2 功能需求 (18)

III

目录

3.2.1 需求描述 (19)

3.2.2 功能分类 (19)

3.2.3 确定系统范围和边界 (20)

3.2.4 确定参与者 (20)

3.2.5 构建用例 (20)

3.3 性能需求 (24)

4 系统概要设计 (26)

4.1 网络爬虫系统架构设计 (26)

4.1.1 网络爬虫运行流程分析 (26)

4.1.2 分布式网络爬虫的物理架构设计 (28)

4.1.3 分布式网络爬虫的逻辑架构设计 (29)

4.2 分布式网络爬虫模块设计 (30)

4.3 关键技术设计 (31)

4.3.1 URL规范化 (31)

4.3.2 爬虫任务分配策略 (31)

4.3.3 平衡礼貌策略 (32)

4.3.4 重新访问策略 (32)

4.3.5 页面去重 (33)

4.4 分布式网络爬虫的数据库设计 (34)

4.4.1 分布式网络爬虫的数据库概念设计 (34)

4.4.2 分布式网络爬虫的数据库表结构设计 (34)

5 系统详细设计和实现 (38)

5.1 InitializePhase模块 (38)

5.2 GeneratorPhase模块 (40)

5.3 FetcherPhase模块 (43)

5.4 ParserPhase模块 (45)

5.5 UpdatePhase模块 (47)

5.6 CalculateKPI模块 (50)

6 系统测试 (52)

6.1 测试环境 (52)

IV

目录

6.1.1 系统软硬件环境 (52)

6.1.2 测试环境搭建 (53)

6.2 测试用例 (53)

6.3 测试结果 (55)

7 总结与展望 (58)

7.1 论文总结 (58)

7.2 研究展望 (58)

参考文献 (60)

致谢 (62)

个人简历 (63)

V

图目录

图目录

图2.1 Hadoop分布式平台架构 (6)

图2.2 HDFS体系结构 (7)

图2.3 MapReduce程序数据变化的基本模型 (7)

图2.4 MapReduce任务运行流程图 (8)

图2.5 Hbase体系结构 (10)

图2.6 Storm架构 (11)

图2.7 Kafka架构 (11)

图2.8 传统单机网络爬虫的物理架构 (13)

图2.9 并行网络爬虫的物理架构 (14)

图2.10 OPIC算法伪代码 (17)

图3.1 系统功能图 (20)

图3.2 系统范围 (20)

图3.3 注入种子URL用例图 (21)

图3.4 生成待抓取URL集合用例图 (21)

图3.5 执行URL抓取用例图 (22)

图3.6 解析页面用例图 (22)

图3.7 更新URL状态用例图 (23)

图3.8 统计指标用例图 (23)

图3.9 系统顶层用例图 (24)

图4.1 网络爬虫流程图 (27)

图4.2 分布式网络爬虫物理架构 (28)

图4.3 分布式网络爬虫逻辑架构 (29)

图4.4 系统模块图 (30)

图5.1 InitializePhase模块算法流程图 (38)

图5.2 InitializePhase模块MR算法流程图 (39)

图5.3 InitializePhase模块MR算法时序图 (40)

图5.4 GeneratorPhase模块流程图 (41)

图5.5 GeneratorPhase模块MR算法流程图 (41)

VI

图目录

图5.6 GeneratorPhase模块MR算法时序图 (42)

图5.7 FetcherPhase模块MR算法流程图 (44)

图5.8 FetcherPhase模块MR算法时序图 (45)

图5.9 ParserPhase模块流程图 (46)

图5.10 ParserPhase模块MR算法流程图 (46)

图5.11 ParserPhase模块MR算法时序图 (47)

图5.12 UpdatePhase模块流程图 (47)

图5.13 UpdatePhase模块的MR算法流程图 (48)

图5.14 UpdatePhase模块MR算法时序图 (49)

图5.15 Hadoop任务执行状况 (49)

图5.16 CalculateKPI模块算法流程图 (50)

图5.17 CalculateKPI模块Storm拓扑图 (51)

图5.18 Storm UI监控界面 (51)

图6.1 Hadoop集群可扩展性测试结果 (56)

VII

绪论

1 绪论

1.1 课题研究背景和意义

随着互联网规模的不断扩大,云计算、大数据的快速发展,互联网资源的不断增多,这些异构的资源形成了一个庞大的信息库,并且这些异构的信息资源通常分布在不同的位置,主要有以下特点:

(1)数据量巨大。2015年7月中国互联网络信息中心(CNNIC)在北京发布第36次《中国互联网络发展状况统计报告》[1],报告显示:“截至2015年6月,中国网民规模达6.68亿,中国域名总数为2231万个,中国网站总数为357万个”。

(2)表现形式多样化。互联网资源通常是文本、图像、音频、视频、软件等各种各样的非结构化、半结构化和结构化数据,其中非结构化数据比例较高。

(3)信息传播迅速。随着互联网技术的不断增强,信息的传播速度非常快,能够在短时间内传播到世界各地。

如何在众多的信息资源中快速找到用户所需要的信息,已经成为互联网发展的趋势。面对如此巨大、杂乱无章的信息量以及用户对检索结果和时间的要求,提高信息检索效率已经成为一个迫切的问题。仅仅通过单台计算机很难快速检索出用户所需要的信息,需要通过多台计算机采用分布式协同工作的方式进行信息检索。像Google、百度这样的大型搜索引擎都是采用分布式的体系结构,从而解决了检索信息的效率问题。搜索引擎技术主要包括信息采集和信息处理两方面,网络爬虫属于信息采集部分,它是一个基于Web的程序,从种子URL 集合开始遍历Internet,采集网站信息资源。作为搜索引擎的一个关键组成部分,网络爬虫的效率将直接影响到搜索引擎的性能[2]。

网络爬虫是实现搜索引擎的关键,搜索引擎能够提高检索信息的效率,把用户所希望得到的信息检索出来,所以网络爬虫的性能也间接地影响了信息检索的效率和匹配信息的相关性。当前各个企业有着大量的信息资源,如何从这些数据中检索出需要的信息是急需解决的问题,所以对企业来说实现一个企业搜索引擎是今后发展趋势,而网络爬虫的发展将会推动搜索引擎的发展,网络爬虫的性能极大影响着用户对搜索引擎的体验。

1

绪论

对于网络爬虫系统仅仅使用单台机器抓取互联网上巨大的信息资源是不可行的,所以基于分布式Hadoop[3]的、多节点协同工作的网络爬虫应运而生。Hadoop是一个能够对大量数据信息资源进行分布式处理的软件架构,能够部署在廉价的硬件上,并且以一种可靠的、高效的、可伸缩的分布式方式进行数据处理[4]。基于Hadoop的网络爬虫借助Hadoop的特性,能够部署在大量廉价的计算机上,各个节点能够并行抓取互联网上的资源,能够自动在集群上重新分配失败的爬虫任务,自动保存数据的多个副本,具有高容错性。

1.2 国内外研究现状

国外对网络爬虫的研究起步比较早,Matthew Gray于1993年开发出第一个网络爬虫World Wide Web Wanderer[5],当时是为了统计互联网上的服务器数量,如今搜索引擎的思想就来源于Wanderer。1994年7月20日发布的Lycos网站是第一个将网络爬虫程序接入到索引程序中[6],引入网络爬虫后其远远超过其他搜索引擎的资源量。从此之后几乎所有的知名搜索引擎,都采用网络爬虫来搜集网页信息,不过由于商业性质,这些网络爬虫的设计原理并没有公开。目前比较成熟的开源的网络爬虫有Heritrix[7]、Nutch[8]等。

Heritrix[7]是一个开源的网络爬虫,具有高度的可扩展性,遵守Robots协议,用户可以灵活的实现自己的抓取逻辑,从互联网上抓取所需要的资源。但是Heritrix是一个单实例的爬虫,爬虫之间不能进行合作,在硬件和系统出现故障时,恢复能力很差。

Nutch[8]诞生于2002年8月,最初是Apache旗下的开源搜索引擎项目,Nutch1.2版本后Nutch开始专注于网络爬虫,删除了搜索功能,进而产生了两大分支,这两个分支的主要区别在于Nutch2更改了底层数据存储模型支持各种底层存储技术,Nutch1仅支持存储在HDFS上面。在Nutch的发展过程中,产生了Hadoop、Crawler Commons[9]、Tika[10]和Gora[11]开源项目。Hadoop技术目前在大数据中广泛被应用,提供分布式存储和分布式计算能力。Tika使用现有的多个开源解析工具库,能够从各种格式的文档中提取出元数据和结构化内容。Gora 是大数据中的持久化框架,Crawler Commons是一个通用的网络爬虫工具。

国内对网络爬虫的研究也越来越多,具有代表性的有:北京大学天网搜索引擎基于LAN的网络爬虫系统[12];上海交通大学基于网格的分布式网络爬虫Igloo;

2

绪论

百度搜索引擎、搜狗搜索引擎、有道搜索引擎网络爬虫系统。

1.3 主要研究内容

本文主要基于Hadoop、Storm的基本原理和应用场景,并通过具体的生产实际需求,分析设计出基于Hadoop和Storm的网络爬虫系统。主要完成工作包括以下方面:

(1)调研用户对网络爬虫系统的实际需求,分析网络爬虫系统设计的总体目标、功能需求和性能需求。

(2)对网络爬虫进行分布式架构设计,抓取页面时遵守平衡礼貌原则,使用Gora将抓取到的数据持久化到Hbase中,加入Storm平台实时统计爬虫系统运行过程中产生的相关指标。

(3)采用广度优先页面搜索策略,同时使用OPIC算法计算每个URL的分值,选择URL分值较高的页面进行抓取。分析和设计分布式网络爬虫的核心模块如何使用MapReduce算法模型来实现,并编写程序实现每一个模块的功能。

(4)测试爬虫的性能,将爬虫程序部署在Hadoop、Storm集群上,测试爬虫的稳定性和爬虫运行效率,并优化集群参数,使爬虫系统均衡、稳定、最大性能地运行在集群上。

1.4 论文结构安排

第一章绪论。介绍网络爬虫的研究背景、研究意义、国内外研究现状以及主要完成内容,同时给出论文结构安排。

第二章相关技术研究。介绍Hadoop分布式平台、Hbase数据库、Storm、Kafka以及网络爬虫的相关技术。

第三章系统需求分析。根据用户生产实际需求,通过需求调研,给出网络爬虫设计的总体目标、功能需求以及性能需求。

第四章系统概要设计。首先分析爬虫系统的运行流程、对分布式爬虫系统的整体架构进行设计,接着介绍分布式网络爬虫运用到的核心技术,最后介绍HBase数据库中表结构的设计。

第五章系统详细设计和实现。给出分布式网络爬虫系统各个模块的详细设计和具体实现,描述各个模块所涉及到的算法、数据结构以及时序图。

3

绪论

第六章系统测试。介绍测试所需要的软硬件环境,对如何搭建Hadoop平台和Storm平台进行说明,在测试环境上对本系统进行功能测试、性能测试以及可扩展性测试并给出总结。

第七章总结与展望。对本文所实现的基于Hadoop的分布式网络爬虫系统进行总结,描述了本文所实现的网络爬虫系统的特点,并根据系统仍存在的不足之处提出了今后的工作展望。

4

相关文档
相关文档 最新文档