分布式搜索引擎

39
分分分分分分分 Hadoop+Nutch+Solr

Upload: indira-michael

Post on 31-Dec-2015

88 views

Category:

Documents


0 download

DESCRIPTION

分布式搜索引擎. Hadoop+Nutch+Solr. 工作简述. 将 3 台 PC 使用无线网络连接,组成 hadoop 集群 在集群上配置 nutch 组成一个分布式爬虫器 在集群上配置 solr ,对爬下来的网页进行索引生成,放在 solr 服务器上. 平台体系架构. 平台体系架构. HDFS. Use the concept of block Namenode & Datanode Reading data. HDFS. Writing data. Nutch. 简介: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 分布式搜索引擎

分布式搜索引擎

Hadoop+Nutch+Solr

Page 2: 分布式搜索引擎

工作简述• 将 3 台 PC 使用无线网络连接,组成 hadoop

集群• 在集群上配置 nutch 组成一个分布式爬虫器• 在集群上配置 solr ,对爬下来的网页进行

索引生成,放在 solr 服务器上

Page 3: 分布式搜索引擎

平台体系架构

Hadoop

Nutch

Solr

平台体系架构

Page 4: 分布式搜索引擎

• Use the concept of block• Namenode & Datanode• Reading data

HDFS

Page 5: 分布式搜索引擎

• Writing data

HDFS

Page 6: 分布式搜索引擎

• 简介:Nutch 是一个开源 Java 实现的搜索引擎。它提供

了我们运行自己的搜索引擎所需的全部工具。它由爬虫crawler 和查询 searcher 两部分组成。

Crawler 主要用于从网络上抓取网页并为这些网页建立索引。 Searcher 主要利用这些索引检索用户的查找关键词来产生查找结果。

除去索引部分,两者之间的耦合度很低。这样的主要目的是为了使两部分可以分布式配置在硬件平台上,例如将 Crawler 和 Searcher 分别放在两个主机上,这样可以提升性能。

Nutch

Page 7: 分布式搜索引擎
Page 8: 分布式搜索引擎

• Solr 是一个独立的企业级搜索应用服务器,它对外提供类似于 Web-service 的 API 接口。用户可以通过 http 请求,向搜索引擎服务器提交一定格式的 XML 文件,生成索引;也可以通过 Http get 操作提出查找请求,并得到 XML 格式的返回结果;

Solr

Page 9: 分布式搜索引擎
Page 10: 分布式搜索引擎
Page 11: 分布式搜索引擎

•Hadoop•Nutch•Solr

输入

功能

效果

搭建过程

Page 12: 分布式搜索引擎

1. 安装 jdk原因: hadoop 本身的运行需要 java 虚拟机,所以要先

在 ubuntu 系统中安装好 jdk 以进行支持。• 安装过程:比较简单,在下载完了 jdk 之后,解压到自定

义的目录,并在终端中输入以下命令:vim ~/.bashrc在打开的文档中插入:

export JAVA_HOME=/usr/lib/jvm/java-7-sun  export JRE_HOME=${JAVA_HOME}/jre  export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  export PATH=${JAVA_HOME}/bin:$PATH

保存后执行 source ~/.bashrc  以完成配置

在命令行中敲入 java –version 可以查看配置的 java 版本

Hadoop 平台搭建过程

Page 13: 分布式搜索引擎

2. 配置 ssh原理: ssh 是建立在应用层和传输层基础上的安全协议,

hadoop 需要 ssh 来在组成集群的计算机之间建立联系,从而能够协同操作,共享数据。

配置过程:1. sudo apt-get install ssh ( ubuntu 自带的软件获取)2. sudo mkdir .ssh (创建存放密钥的文件夹)3. ssh-keygen ( master 机生成密钥)4. cp id_rsa.pub authorized_keys (将公钥内容复制到 authorized_keys 文件 )

Hadoop 平台搭建过程

Page 14: 分布式搜索引擎

5.   chmod 644 authorized_keys(设定 authorized_keys 文件属性为 -rw-r--r-- ,即文件属主拥有读写权限, 与文件属主同组的用户拥有读权限,其他人拥有读权限)

6. scp authorized_keys slave1:/home/Aki/.ssh ( 将 master 机上生成的密钥拷贝到从机 slave1 上 )

scp authorized_keys slave2:/root/.ssh ( 将 master 机上生成的密钥拷贝到从机 slave2 上 )

7. ssh slave1(测试 ssh 是否配置成功,如果配置成功,这时输入密码就能登录到从机slave1 上,对 slave1 机上的文档进行操作)

注:在进行 ssh 配置前,要将配置的三台机器的 IP 地址都加入到 /etc/hosts 表中,这样机器间才能正确通信。

Page 15: 分布式搜索引擎

3. 安装配置 hadoop原理:一个分布式系统基础架构,也是能够对大量数据进行

分布式处理的软件框架。 它包含以下三个部分: 1. Hadoop Common 用来支持一些子项目的基本功能:如 IO 操作,进程间通信等等。 2. Hadoop Distributed File System (HDFS™) 一个分布式的文件系统,由各个节点的存储块一起组成,存放进行任 任务所需的文件,各个节点都可以访问。 3. Hadoop MapReduce 一个软件框架,帮助集群对大量的数据进行分布式的处理。

Hadoop 平台搭建过程

Page 16: 分布式搜索引擎

3. 安装配置 hadoop 配置过程:1. 下载 hadoop 的软件包,解压放到根目录下。2. sudo gedit /etc/profile 在文件末尾添加• HADOOP_HOME=/root/hadoop• export HADOOP_HOME• export HADOOP=$HADOOP_HOME/bin• export PATH=$HADOOP:$PATH • ( 以上操作是将 hadoop 的路径添加到系统变量中 )

Hadoop 平台搭建过程

Page 17: 分布式搜索引擎

3. 安装配置 hadoop 配置过程:3. 修改 hadoop 的配置文件,在 /root/hadoop/conf 下 需要修改的文件如下: hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml masters slaves 其中

hadoop-env.sh 中保存的是 hadoop 运行需要的环境变量 core-site.xml 中保存的是 master 机的一些有关信息

hdfs-site.xml 中保存的是分布式文件系统的有关信息mapred-site.xml保存的是与 map reduce 有关的相关设置

masters则保存的主机名 slaves保存的是从机名

Hadoop 平台搭建过程

Page 18: 分布式搜索引擎

4. 完成 hadoop 的平台搭建 在主节点上完成了对 hadoop 配置之后,将配置好的整个 hadoop软件包发送到其它计算机中,然后在主节点的 hadoop/bin 下执行这些命令:• ./ namenode -format 格式化 namenode 以进行初始化• ./start-all.sh 启动 hadoop• ./ dfsadmin -report 生成对当前集群的如果之前的配置正确,就能看到namenode , datanode , jobtracker 在报告中已经被正确的建立起来,则集群已经被正确的建立。我们能够访问以下的链接:http://namenode’s IP:50070 访问 hdfs 文件系统http://namenode’s IP:50030 访问 jobtacker ,观察各个任务的执行

Hadoop 平台搭建过程

Page 19: 分布式搜索引擎

访问 hdfs 文件系统

Page 20: 分布式搜索引擎

访问 hdfs 文件系统

Page 21: 分布式搜索引擎

访问 jobtracker

Page 22: 分布式搜索引擎

访问 jobtracker(已经有两个任务完成了 )

Page 23: 分布式搜索引擎

访问 jobtracker( 查看一个已经完成的任务 )

Page 24: 分布式搜索引擎

• 配置过程 1、下载并解压 nutch 到根目录下2、 配置 /root/nutch/conf 目录下的 nutch-site.xml 文件在经过编译运行之后, nutch-site.xml 的修改内容会复制到nutch-default.xml 中。也可以直接修改 nutch-default.xml 中的内容,但官方不推荐这样做。

nutch-default.xml 是核心配置文件,其中配置了一些用户的个性化设置,它的作用是引导 nutch 的 job按照开发者的规定执行。

Nutch 搭建过程

Page 25: 分布式搜索引擎

3、配置 /root/nutch/conf 目录下的 regex-urlfilter.txt 文件改为如下内容:-^(https|telnet|file|ftp|mailto): # skip some suffixes -\.(swf|SWF|doc|DOC|mp3|MP3|WMV|wmv|txt|TXT|rtf|RTF|avi|AVI|m3u|M3U|flv|FLV|WAV|wav|mp4|MP4|avi|AVI|rss|RSS|xml|XML|pdf|PDF|js|JS|gif|GIF|jpg|JPG|png|PNG|ico|ICO|css|sit|eps|wmf|zip|ppt|mpg|xls|gz|rpm|tgz|mov|MOV|exe|jpeg|JPEG|bmp|BMP)$ # skip URLs containing certain characters as probable queries, etc. -[?*!@=] # allow urls in foofactory.fi domain +^http://([a-z0-9\-A-Z]*\.)*lucidimagination.com/ # deny anything else -.

其中设置了一些爬网页时的过滤信息,将一部分不符合要求的网页直接过滤,以保证爬下来的网页的有效性。

Nutch 搭建过程

Page 26: 分布式搜索引擎

4、在 /root/nutch 目录下创建一个 urls 的目录,并在下面建一个 urls种子文件,并在文件中输入你爬网页的起始网址,如: www.163.com

5、 sudo apt-get install ant ( ubuntu 自带的软件获取)ANT 本身就是这样一个流程脚本引擎,用于自动化调用程序完成项目的编译,打包,测试等。类似于 linux 的 makefile 文件。可以避免大项目的反复编译、打包、测试等。//ant指令命令6、 ant 使用 ant 来编译 nutch 以使得我们之前的配置生效。

Nutch 搭建过程

Page 27: 分布式搜索引擎

// 爬网页的指令7、将 urls种子文件导入 Nutch 的 crawldb ,在 /root/nutch目录下执行 bin/nutch inject crawl/crawldb urls

这部分交给 hadoop 通过 MapReduce 完成,要执行比较长的时间

Nutch 搭建过程

Page 28: 分布式搜索引擎

这部分要执行比较长的时间,其中包括几个步骤:• 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 搭建过程

Page 29: 分布式搜索引擎

等待 hadoop 工作执行完。至此, nutch 的安装、配置以及爬网页(建立索引)的工作完成。

Nutch 搭建过程

Page 30: 分布式搜索引擎

• 1. 原理 Solr 是一个高性能,采用 Java 开发的,基于 Lucene 的全文搜索服务器。用户可以通过 http 请求,向搜索引擎服务器提交一定格式的 XML 文件,生成索引文件。也可以通过在solr 的网页上键入关键字,提出申请请求,并得到 XML 格式的返回结果。 nutch 在 hadoop 的平台上完成了对网页的爬取和初步的索引建立之后,将所得的索引交给 solr 进行最后一步的处理,从而得到最终的索引文件。这时,我们可以在 solr 的网页界面中输入搜索的关键字, solr会在索引中匹配我们输入的关键字,从而得到相关的网页链接。

Solr 搭建过程

Page 31: 分布式搜索引擎

• 2. 安装 solr3.6 的安装比较简单,只需在网页上得到 solr3.6 的软件包,解压到根目录下。然后 修改 solr/conf/solrconfig.xml 文件 <str name=“df”>text</str> 都替换为

<str name="df">content</str>这是因为新版本的搜索程序修改,但是配置文件未更新造成的错误

将 nutch/conf 下的文件全部拷贝到 solr/conf 下,使 nutch 与 solr 能够没有错误的配合

将配置好的 solr发送到所有的机器上,因为 nutch+solr 在最后一步建立索引的过程中仍然是分布式的,所有机器都需要开启 solr 服务来进行索引的建立。

在 /solr/example 下执行 java -jar start.jar ,从而开启 solr 服务

Solr 搭建过程

Page 32: 分布式搜索引擎

Hadoop

Nutch

Solr

运行过程

Page 33: 分布式搜索引擎

• 启动 hadoop• 启动 solr 服务,开启后不要关闭终端• 在 nutch 的 deploy 文件夹下执行以下指令 ~/nutch/src/bin/nutch crawl hdfs_path/urls.txt -solr

http://ip:8983/solr/ -dir hdfs_path/crawled -depth 3 -topN 1000 这条指令的意思是以 hdfs 中存储的文件 urls.txt 作为种子来进行网页爬取,爬取的最大深度为 3 层,每一次抓取的网页时排名前 1000 的网页,并且把生成的索引信息传给 http://ip:8983/solr/,也就是传给 solr 来进行处理。 ~/nutch/src/bin/nutch solrindex

http://ip:8983/solr/  hdfs_path/crawled/crawldb/ hdfs_path/crawled/linkdb/  -dir hdfs_path/crawled/segments/ 生成的 index 在 ~/solr/example/solr/data/index/ 下面

这样就完成的任务的输入,我们只需等待任务进行完成即可

运行过程

Page 34: 分布式搜索引擎

爬取网页过程中的任务

Page 35: 分布式搜索引擎

Solr 的搜索界面种子一共有三个,分别是:www.163.comwww.hoop.comwww.tongji.edu.cn

Page 36: 分布式搜索引擎

搜索关键字是:麦迪

Page 37: 分布式搜索引擎

搜索关键字是:同济

Page 38: 分布式搜索引擎

• Nutch 源码包必须经过 ant 之后才能使用• Nutch 和 Solr 也必须配置到各节点

注意事项

Page 39: 分布式搜索引擎

总结:• 在任务的执行过程中,可以明显的发现消耗的时间大部分花在任务的分配和部署上,实际进行 map 和 reduce 所占的时间并不多,所以,在 hadoop 的集群中,各个计算机之间的通信的带宽是提升集群能的一个关键。

• 进一步,由文件系统中可以看到, hadoop 的分布式文件

系统是把文件分块存储的。就算是很小的几 kb 的文件也会被划分到单独的一个 64M 大小的存储块中。也是这个缘故, hadoop 并不适合对小文件进行处理(如网页的链接),这也符合 hadoop 能够利用低性能计算机,处理大数据的特点。

心得感想