文档章节

基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎

杨尚川
 杨尚川
发布于 2014/08/30 23:11
字数 1203
阅读 14725
收藏 98
点赞 15
评论 22

网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并提供了大量的配置定制选项。由于网络爬虫只负责网络资源的抓取,所以,需要一个分布式搜索引擎,用来对网络爬虫抓取到的网络资源进行实时的索引和搜索。

 

搜 索引擎架构在ElasticSearch之上,是一个典型的分布式在线实时交互查询架构,无单点故障,高伸缩、高可用。对大量信息的索引与搜索都可以在近 乎实时的情况下完成,能够快速实时搜索数十亿的文件以及PB级的数据,同时提供了全方面的选项,可以对该引擎的几乎每个方面进行定制。支持RESTful 的API,可以使用JSON通过HTTP调用它的各种功能,包括搜索、分析与监控。此外,还为Java、PHP、Perl、Python以及Ruby等各 种语言提供了原生的客户端类库。

 

网络爬虫通过将抓取到的数据进行结构化提取之后提交给搜索引擎进行索引,以供查询分析使用。由于搜索引擎的设计目标在于近乎实时的复杂的交互式查询,所以搜索引擎并不保存索引网页的原始内容,因此,需要一个近乎实时的分布式数据库来存储网页的原始内容。

 

分布式数据库架构在Hbase+Hadoop之上,是一个典型的分布式在线实时随机读写架构。极强的水平伸缩性,支持数十亿的行和数百万的列,能够对网络爬虫提交的数据进行实时写入,并能配合搜索引擎,根据搜索结果实时获取数据。

 

网 络爬虫、分布式数据库、搜索引擎均运行在普通商业硬件构成的集群上。集群采用分布式架构,能扩展到成千上万台机器,具有容错机制,部分机器节点发生故障不 会造成数据丢失也不会导致计算任务失败。不但高可用,当节点发生故障时能迅速进行故障转移,而且高伸缩,只需要简单地增加机器就能水平线性伸缩、提升数据 存储容量和计算速度。

 

网络爬虫、分布式数据库、搜索引擎之间的关系:

 

1、网络爬虫将抓取到的HTML页面解析完成之后,把解析出的数据加入缓冲区队列,由其他两个线程负责处理数据,一个线程负责将数据保存到分布式数据库,一个线程负责将数据提交到搜索引擎进行索引。

 

2、搜索引擎处理用户的搜索条件,并将搜索结果返回给用户,如果用户查看网页快照,则从分布式数据库中获取网页的原始内容。

 

整体架构如下图所示:

 


 

爬虫集群、分布式数据库集群、搜索引擎集群在物理部署上,可以部署到同一个硬件集群上,也可以分开部署,形成1-3个硬件集群。

 

网络爬虫集群有一个专门的网络爬虫配置管理系统来负责爬虫的配置和管理,如下图所示:

 

 

搜 索引擎通过分片(shard)和副本(replica)实现了高性能、高伸缩和高可用。分片技术为大规模并行索引和搜索提供了支持,极大地提高了索引和搜 索的性能,极大地提高了水平扩展能力;副本技术为数据提供冗余,部分机器故障不影响系统的正常使用,保证了系统的持续高可用。

 

有2个分片和3份副本的索引结构如下所示:

 

 

 

 

一个完整的索引被切分为0和1两个独立部分,每一部分都有2个副本,即下面的灰色部分。

 

在 生产环境中,随着数据规模的增大,只需简单地增加硬件机器节点即可,搜索引擎会自动地调整分片数以适应硬件的增加,当部分节点退役的时候,搜索引擎也会自 动调整分片数以适应硬件的减少,同时可以根据硬件的可靠性水平及存储容量的变化随时更改副本数,这一切都是动态的,不需要重启集群,这也是高可用的重要保 障。

 

 


© 著作权归作者所有

共有 人打赏支持
杨尚川

杨尚川

粉丝 1078
博文 218
码字总数 1620540
作品 12
东城
架构师
加载中

评论(22)

杨尚川
杨尚川

引用来自“键盘侠客”的评论

我想做全文检索,对网页标题和内容进行检索,这样的话不是应该把标题和内容全部存储到es中吗?这样还存到hbase里一份都什么意义吗? 毕竟主要的内容都存到es中了?
你如果不把网页原始内容存一份到HBASE里面,那你在搜索结果页面中的快照功能咋实现呢?
键盘侠客
键盘侠客
我想做全文检索,对网页标题和内容进行检索,这样的话不是应该把标题和内容全部存储到es中吗?这样还存到hbase里一份都什么意义吗? 毕竟主要的内容都存到es中了?
杨尚川
杨尚川

引用来自“罗慢慢”的评论

既然Hbase和ES的数据是一样的,它们之间如何配合?

引用来自“杨尚川”的评论

HBase存储完整数据,可对单个网页进行随机读写操作;ES存储部分数据,可以对所有网页进行各种复杂条件的快速检索;ES的检索结果如果需要获取完整网页数据,则利用URL从HBase中读取。

引用来自“elvissss”的评论

请问,检索不是应该发生在获取到数据之后吗?
是的,爬虫“获取到数据”之后,将数据存储到HBASE并索引到ES。
elvissss
elvissss

引用来自“罗慢慢”的评论

既然Hbase和ES的数据是一样的,它们之间如何配合?

引用来自“杨尚川”的评论

HBase存储完整数据,可对单个网页进行随机读写操作;ES存储部分数据,可以对所有网页进行各种复杂条件的快速检索;ES的检索结果如果需要获取完整网页数据,则利用URL从HBase中读取。
请问,检索不是应该发生在获取到数据之后吗?
杨尚川
杨尚川

引用来自“罗慢慢”的评论

既然Hbase和ES的数据是一样的,它们之间如何配合?
HBase存储完整数据,可对单个网页进行随机读写操作;ES存储部分数据,可以对所有网页进行各种复杂条件的快速检索;ES的检索结果如果需要获取完整网页数据,则利用URL从HBase中读取。
罗慢慢
罗慢慢
既然Hbase和ES的数据是一样的,它们之间如何配合?
罗慢慢
罗慢慢
这个设计有实现不?
daixiaoyun3013
daixiaoyun3013
川哥就是牛!!
杨尚川
杨尚川

引用来自“鄂世嘉”的评论

请教一下这个开源项目叫什么名字?Google的结果都是您的这篇文章。
这个是一个方案,不是一个开源项目。
v1daddy
v1daddy

引用来自“PaulWong”的评论

怎么不用ELASTICSEARCH的HBASE RIVER?

引用来自“杨尚川”的评论

在解析完网页后,并行写入HBASE和ELASTICSEARCH
请问下博主 是怎么保证 HBASE和ELASTICSEARCH 数据同步的?
python爬虫(一)_爬虫原理和数据抓取

本篇将开始介绍Python原理,更多内容请参考:Python学习指南 为什么要做爬虫 著名的革命家、思想家、政治家、战略家、社会改革的主要领导人物马云曾经在2015年提到由IT转到DT,何谓DT,DT即数...

小七奇奇
2017/11/13
0
0
网络爬虫基础

网络爬虫 网络爬虫(Computer Robot)(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不...

白志华
2016/01/05
280
0
33款可用来抓数据的开源爬虫软件工具

要玩大数据,没有数据怎么玩?这里推荐一些33款开源爬虫软件给大家。 爬虫,即网络爬虫,是一种自动获取网页内容的程序。是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上就是针对爬虫...

Airship
2015/11/09
0
1
网络爬虫 --goodcrawler

goodcrawler(GC) 网络爬虫 GC是一个垂直领域的爬虫,同时也是一个拆箱即用的搜索引擎。 GC基于httpclient、htmlunit、jsoup、elasticsearch。 GC的特点: 1、具有DSL特性的模板。 2、分布式、...

shenbaise
2013/07/12
7.5K
1
Nutch:从搜索引擎到网络爬虫

开源力量公开课第三十一期- Nutch:从搜索引擎到网络爬虫 开源力量公开课,每周二晚线上线下同时开课,让我们一起向IT技术大牛们学习! 课程题目: 开源力量公开课第三十一期- Nutch:从搜索引...

liuhua0312
2013/09/10
1K
1
NUTCH公开课:从搜索引擎到网络爬虫

课程背景:Nutch诞生于2002年8月,是Apache旗下的一个用Java实现的开源搜索引擎项目,自Nutch1.2版本之后,Nutch已经从搜索引擎演化为网络爬虫,接着Nutch进一步演化为两大分支版本:1.X和2...

杨尚川
2013/09/12
3.3K
1
网络爬虫——网络爬虫的发展

网络爬虫本质就是模拟人模拟浏览器访问网站,保存网站内容。 网络爬虫最开始是为了整理网络信息,抓取初步处理成资料文档,类似heritrix爬虫。 另一个广泛的应用就是搜索引擎,搜索引擎需要全...

HZCoder
2015/09/04
91
0
5.2 高富帅python-人工智能时代

小奈:其实你们写的代码好像有不同派系的? 大仁:你是说编程语言?我来介绍下吧,我们来看下GitHub(程序员同城交友、代码协作平台)的数据,看下各种编程语言 Pull Requst的数据, Javascr...

产品经理的技术课堂
05/11
0
0
Python爬虫(1.爬虫的基本概念)

爬虫的基本概念 1. 网络爬虫的组成 网络爬虫由控制结点、爬虫结点、资源库构成,如图1 所示: 图1 网络爬虫的控制节点和爬虫节点结构的关系 可以看到,网络爬虫中可以有多个控制节点,每个控...

lhs322
04/20
0
0
什么样的爬虫才是好爬虫:Robots协议探究

  网站的管理者们通常会有这样一种心态:一方面期待百度、Google这样的搜索引擎来抓取网站的内容,另一方面又很厌恶其他来路不明的网络爬虫抓取自己的信息。正是因为这样,才有“好爬虫”、...

FreeBuf
03/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

代码生成利器:IDEA 强大的 Live Templates

代码生成利器:IDEA 强大的 Live Templates

qwfys
15分钟前
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
18分钟前
0
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
21分钟前
0
0
日常运维--rsync同步工具

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而...

chencheng-linux
25分钟前
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
37分钟前
1
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
0
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
0
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
0
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
0
0
rsync工具介绍/rsync通过ssh同步

rsync工具介绍 数据备份是必不可少,在Linux系统下数据备份的工具很多,其中重点介绍就是rsync工具,rsync不仅可以远程同步数据,还可以本地同步数据,且不会覆盖以前的数据在已经存在的数据...

Hi_Yolks
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部