分布式网络爬虫框架Crawlzilla
2018-01-28徐海啸董飒李翔于洪梅吴旗
徐海啸+董飒+李翔+于洪梅+吴旗
摘要 互联网技术的飞速发展带了网络信息的爆炸式增长,互联网已经成为了企业,机构和个人发布信息的主要平台。据CNNIC(中国互联网络信息中心)发布的2015年中国网民搜索行为研究报告中指出,截止到2015年12月,我国搜索引擎用户达到了5.66亿,使用率为82.3%,手机搜索用户达4.78亿,使用率为77.1%。互联网的发展速度日益加快,随之而来的是爆炸式的信息体量的增长。传统的搜索引擎已经不能够满足一些企业和单位内部的个性化检索的需求。本文将对通用爬虫框架Crawlzilla做简要的分析,并说明其在企业内部制定个性检索服务的可行性。
【关键词】爬虫 Crawlzilla 搜索引擎
1引言
互联网技术的飞速发展带了网络信息的爆炸式增长,互联网己经成为了企业,机构和个人发布信息的主要平台,随着互联网用户的激增,网络上也充斥这各种虚假、冗余等信息。如何能在如此海量的信息中快速、精确的发现自己想要的信息是一个具有挑战性的工作。网络爬虫技术应运而生,网络爬虫(又被称为网页蝴蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,简单的说,网络爬虫技术就是可以运用自己定义的搜索策略在互联网的大数据仓库中找到你想要的信息。网络的爬虫的主要功能就是为搜索引擎提供搜索的数据源,随着分布式计算、网格计算、云计算等并行计算技术的发展,使得大规模数据处理和海量数据分布式存储技术得以发展,这也对网络爬虫技术的研究和发展具有重大意义。首先,互联网上的信息都是分散地存储在不同的网络中的不同服务器上的,其特点是并不集中,为了提高信息的抓取速度可以采用并行抓取的方式,将分散在网络上的机器组成计算集群分布式抓取;其次,互联网上的信息体量比较庞大,网络爬虫抓取到的数据有可能也很多,需要一个大的数据仓库来存储这些抓取到的数据,分布式存储可以很容易的解决这个问题。Crawlzilla底层采用分布式数据处理框架Hadoop,Hadoop具有高可靠性、高扩展性、高效性、高容错性、低成本的优点,使得任何一个机构或者个人都可以轻松的搭建自己的搜索引擎。
2网络爬虫的基本原理
网络爬虫从本质上来说就是一个基于HTTP协议的计算机程序,网络爬虫需要完成的主要工作就是从互联网上抓取网页,文档等数据,并存储到本地作为搜索引擎的数据源,其工作流程如圖一所示。网络爬虫作为搜索引擎的核心部分,其在启动前需要选择一些URL作为种子,这些种子可以人为指定也可以通过算法筛选出一些可信度较高的URL。当网络爬虫启动后,就会按照这些种子去抓取相应的网页,而抓取到的网页中还会包含大量的URL,这些URL与最初的种子之间就有了一定的逻辑关系,如果要继续抓取就涉及到了采用什么抓取策略的问题,常用的策略是深度优先和广度优先。选定了抓取策略后,就按照这种抓取策略继续抓取符合条件的URL,直到遇到空网页或者终止条件为止。综上就是网络爬虫工作的原理。
3Crawlzilla介绍
Crawlzilla是一个基于集群的搜索引擎部署工具。它可以帮助用户建立集群中的搜索引擎,提供了管理机制(如:集群管理,爬管理,索引池管理)。它以nutch项目为核心,底层使用Hadoop并行数据处理框架,并整合更多相关套件,系统的架构图如图2。
3.1Hadoop
Hadoop是Apache的一个开源的可运行于大规模集群上的分布式文件系统和应用程序处理基础框架,Hadoop擅长于在廉价机器搭建的集群上进行海量数据(结构化与非结构化)的存储与离线处理。Hadoop框架中最重要的两个设计师:MapReduce和HDFS。MapReduce的思想就是“分而治之”。HDFS是Hadoop底层文件系统提供了一个对用户来说完全透明的分布式文件系统的架构。其实纵观Hadoop的框架不难发现,其实现的根本思想就是迁移计算。在分布式计算系统中,迁移数据的代价要比迁移计算的代价高得多,Hadoop就是在分布式系统中迁移了计算任务,也就是“分而治之的思想”,将要处理的数据也“分而存储”,每份存储利用本地资源进行计算,最终把所有的计算结果归总,充分发挥了分布式系统的计算性能,因此而高效。
MapReduce最开始的设计初衷是用来分析海量数据用的。同时由于HDFS是Google自己开发的文件系统,所以它的设计初衷是服务于搜索引擎的,它们最开始都不是用到分布式系统中的,但是由于他们自身的特点,最终都被用到了分布式系统中,并取得了非常好的应用效果。
3.1.1MapReduce并行编程模型
在MapReduce编程模型中,主要有两个操作,一个是Mapper,一个是reducer,他们相互配合,最终可以完成理论上任何规模的并行计算任务。下面具体介绍一下这俩个MapReduce编程模型中最重要的俩个操作。首先,Mapper,它的作用就是将用户提交到系统的一个大作业分解成为一个个可以被每个计算接待你处理的小作业,而reducer的功能则是负责把mapper处理完成后的输出文件结合到一起,最后得出结果。其实,纵观整个Mapreduce模型,其实它的实现思想非常的简单,就是“分而治之”,再把每部分的结果汇总成一个完整的输出结果。这不是什么新思想,归纳起来就是一个分解再集合的过程。其实Mapreduce变成模型做的工作有点像是一个集中的调度器做的工作,它首先把可以执行作业的硬件资源看成是一个可以利用的资源池,然后每个任务是需要这些资源池中拿出合适的资源来提供计算支持,那么为了能够充分发挥硬件资源的效率,也就是更高效的利用底层的硬件资源以达到最快的执行速度,就需要把作业进行分解,然后处理,在集合。综上的任务分解、计算再集合的过程就是MapReduce的工作流程。
3.1.2HDFS文件系统endprint
整个HDFS系统中主要有三个重要部分,这三部分分别是:NameNode、DataNode和Client。其中在HDFS中NameNode是主要的管理员,负责整个系统的协调工作,包括域名解析、数据同步等。NameNode会将整个系统的元数据存储在自己的内存中,这也说明了为什么Namenode需要一个内存比较大的机器做比较合适,这些元数据主要是为了用户提交数据操作的时候能够快速的找到数据,它里面存储的主要信息就是每个文件的头信息,以及这个文件被分成了几分,每一份都被存储在了那个datanode上,己经这些数据副本的存储位置,由于Hadoop框架中只有一台namenode,所以它的稳定和安全是至关重要的,这也是Hadoop框架中唯一的一个存在单点故障的地方。DataNode是真正的存储容器,也就是说真正的数据都是存储在datanode上的,它的存储方式是把一个大文件分成了很多不同的小的blcck保存在底层的HDFS中,如果它的信息发生了变化,他也会把自己的信息同步给存储它元数据的namenode。
3.2Nutch
Nutch是一个开源Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。尽管Web搜索是漫游Internet的基本要求,但是现有web搜索引擎的数目却在下降。并且这很有可能进一步演变成为一个公司垄断了几乎所有的web搜索为其谋取商业利益。这显然不利于广大Internet用户。Nutch为我们提供了这样一个不同的选择.,相对于那些商用的搜索引擎,Nutch作为开放源代码搜索引擎将会更加透明,从而更值得大家信赖。Nutch初始开发出来时,是一个完整的开源搜索引擎,在Nutchl.3版本之后,Nutch将搜索部分剔除,保留了网络爬虫部分。Nutch的创始人是DougCutting,他同时也是Lucene、Hadoop和Avro开源项目的创始人。在Nutch2.X版本后,Nutch引入了Gom对象映射存储框架,从而支持数据库操作。Nutch中的文件操作是基于HDFS,采用MapReduce软件框架实现海量网页数据的处理。另外,Nutch提供了灵活的插件系统,开发者可以根据不同的情况对Nutch进行二次开发,构造适合不同应用场景的网络爬虫系统。
3.3Lucene
Lucene是apache软件基金会jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个簡单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了Lucene作为其内部全文检索子系统的核心。Lucene以其开放源代码的特性、优异的索引结构、良好的系统架构获得了越来越多的应用。Lucene是一个高性能、可伸缩的信息搜索(IR)库。它可以为你的应用程序添加索引和搜索能力。
4结语
虽然Google,Yahoo等IT巨头己经提供的比较完善的搜索功能,但是由于涉及到商业信息等因素,会搜索到很多冗余和不想要的信息,这并不适合机构内部网站。本文对Crawlzilla的总体框架和各个主要的组成部分做了介绍,其所有的组成部分都是基于开源的项目,对任何一个机构或者个人来说搭建一个这样的基于集群的分布式搜索引擎几乎都是不需要太大的成本的。不过,这并不意味这Crawlzilla就是一个性能很低劣的网络爬虫框架,由于底层采用Hadoop并行数据处理框架,使得Crawlzilla也可以高效的运行。
参考文献
[1]何国正.分布式智能网络爬虫的设计与实现[D].中国科学院大学(工程管理与信息技术学院),2016.
[2]王霓虹,张露露.分布式爬虫任务调度策略的优化[J].黑龙江大学自然科学学报,2016(05):671-675+701.
[3]李松.基于Hadoop的分布式网络爬虫研究[D].电子科技大学,2016.
[4]孔涛,曹丙章,邱荷花.基于MapReduce的视频爬虫系统研究[J].华中科技大学学报(自然科学版),2015(05):129-132.endprint