分布式搜索引擎
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 PresentationTRANSCRIPT
分布式搜索引擎
Hadoop+Nutch+Solr
工作简述• 将 3 台 PC 使用无线网络连接,组成 hadoop
集群• 在集群上配置 nutch 组成一个分布式爬虫器• 在集群上配置 solr ,对爬下来的网页进行
索引生成,放在 solr 服务器上
平台体系架构
Hadoop
Nutch
Solr
平台体系架构
• Use the concept of block• Namenode & Datanode• Reading data
HDFS
• Writing data
HDFS
• 简介:Nutch 是一个开源 Java 实现的搜索引擎。它提供
了我们运行自己的搜索引擎所需的全部工具。它由爬虫crawler 和查询 searcher 两部分组成。
Crawler 主要用于从网络上抓取网页并为这些网页建立索引。 Searcher 主要利用这些索引检索用户的查找关键词来产生查找结果。
除去索引部分,两者之间的耦合度很低。这样的主要目的是为了使两部分可以分布式配置在硬件平台上,例如将 Crawler 和 Searcher 分别放在两个主机上,这样可以提升性能。
Nutch
• Solr 是一个独立的企业级搜索应用服务器,它对外提供类似于 Web-service 的 API 接口。用户可以通过 http 请求,向搜索引擎服务器提交一定格式的 XML 文件,生成索引;也可以通过 Http get 操作提出查找请求,并得到 XML 格式的返回结果;
Solr
•Hadoop•Nutch•Solr
输入
功能
效果
搭建过程
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 平台搭建过程
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 平台搭建过程
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 表中,这样机器间才能正确通信。
3. 安装配置 hadoop原理:一个分布式系统基础架构,也是能够对大量数据进行
分布式处理的软件框架。 它包含以下三个部分: 1. Hadoop Common 用来支持一些子项目的基本功能:如 IO 操作,进程间通信等等。 2. Hadoop Distributed File System (HDFS™) 一个分布式的文件系统,由各个节点的存储块一起组成,存放进行任 任务所需的文件,各个节点都可以访问。 3. Hadoop MapReduce 一个软件框架,帮助集群对大量的数据进行分布式的处理。
Hadoop 平台搭建过程
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 平台搭建过程
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 平台搭建过程
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 平台搭建过程
访问 hdfs 文件系统
访问 hdfs 文件系统
访问 jobtracker
访问 jobtracker(已经有两个任务完成了 )
访问 jobtracker( 查看一个已经完成的任务 )
• 配置过程 1、下载并解压 nutch 到根目录下2、 配置 /root/nutch/conf 目录下的 nutch-site.xml 文件在经过编译运行之后, nutch-site.xml 的修改内容会复制到nutch-default.xml 中。也可以直接修改 nutch-default.xml 中的内容,但官方不推荐这样做。
nutch-default.xml 是核心配置文件,其中配置了一些用户的个性化设置,它的作用是引导 nutch 的 job按照开发者的规定执行。
Nutch 搭建过程
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 搭建过程
4、在 /root/nutch 目录下创建一个 urls 的目录,并在下面建一个 urls种子文件,并在文件中输入你爬网页的起始网址,如: www.163.com
5、 sudo apt-get install ant ( ubuntu 自带的软件获取)ANT 本身就是这样一个流程脚本引擎,用于自动化调用程序完成项目的编译,打包,测试等。类似于 linux 的 makefile 文件。可以避免大项目的反复编译、打包、测试等。//ant指令命令6、 ant 使用 ant 来编译 nutch 以使得我们之前的配置生效。
Nutch 搭建过程
// 爬网页的指令7、将 urls种子文件导入 Nutch 的 crawldb ,在 /root/nutch目录下执行 bin/nutch inject crawl/crawldb urls
这部分交给 hadoop 通过 MapReduce 完成,要执行比较长的时间
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 搭建过程
等待 hadoop 工作执行完。至此, nutch 的安装、配置以及爬网页(建立索引)的工作完成。
Nutch 搭建过程
• 1. 原理 Solr 是一个高性能,采用 Java 开发的,基于 Lucene 的全文搜索服务器。用户可以通过 http 请求,向搜索引擎服务器提交一定格式的 XML 文件,生成索引文件。也可以通过在solr 的网页上键入关键字,提出申请请求,并得到 XML 格式的返回结果。 nutch 在 hadoop 的平台上完成了对网页的爬取和初步的索引建立之后,将所得的索引交给 solr 进行最后一步的处理,从而得到最终的索引文件。这时,我们可以在 solr 的网页界面中输入搜索的关键字, solr会在索引中匹配我们输入的关键字,从而得到相关的网页链接。
Solr 搭建过程
• 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 搭建过程
Hadoop
Nutch
Solr
运行过程
• 启动 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/ 下面
这样就完成的任务的输入,我们只需等待任务进行完成即可
运行过程
爬取网页过程中的任务
Solr 的搜索界面种子一共有三个,分别是:www.163.comwww.hoop.comwww.tongji.edu.cn
搜索关键字是:麦迪
搜索关键字是:同济
• Nutch 源码包必须经过 ant 之后才能使用• Nutch 和 Solr 也必须配置到各节点
注意事项
总结:• 在任务的执行过程中,可以明显的发现消耗的时间大部分花在任务的分配和部署上,实际进行 map 和 reduce 所占的时间并不多,所以,在 hadoop 的集群中,各个计算机之间的通信的带宽是提升集群能的一个关键。
• 进一步,由文件系统中可以看到, hadoop 的分布式文件
系统是把文件分块存储的。就算是很小的几 kb 的文件也会被划分到单独的一个 64M 大小的存储块中。也是这个缘故, hadoop 并不适合对小文件进行处理(如网页的链接),这也符合 hadoop 能够利用低性能计算机,处理大数据的特点。
心得感想