390 likes | 582 Views
分布式搜索引擎. Hadoop+Nutch+Solr. 工作简述. 将 3 台 PC 使用无线网络连接,组成 hadoop 集群 在集群上配置 nutch 组成一个分布式爬虫器 在集群上配置 solr ,对爬下来的网页进行索引生成,放在 solr 服务器上. 平台体系架构. 平台体系架构. HDFS. Use the concept of block Namenode & Datanode Reading data. HDFS. Writing data. Nutch. 简介:
E N D
分布式搜索引擎 Hadoop+Nutch+Solr
工作简述 • 将3台PC使用无线网络连接,组成hadoop集群 • 在集群上配置nutch组成一个分布式爬虫器 • 在集群上配置solr,对爬下来的网页进行索引生成,放在solr服务器上
平台体系架构 平台体系架构
HDFS • Use the concept of block • Namenode & Datanode • Reading data
HDFS • Writing data
Nutch • 简介: Nutch是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。它由爬虫crawler和查询searcher两部分组成。 Crawler主要用于从网络上抓取网页并为这些网页建立索引。Searcher主要利用这些索引检索用户的查找关键词来产生查找结果。 除去索引部分,两者之间的耦合度很低。这样的主要目的是为了使两部分可以分布式配置在硬件平台上,例如将Crawler和Searcher分别放在两个主机上,这样可以提升性能。
Solr • Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http get操作提出查找请求,并得到XML格式的返回结果;
搭建过程 • Hadoop • Nutch • Solr
Hadoop平台搭建过程 • 安装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来在组成集群的计算机之间建立联系,从而能够协同操作,共享数据。 • 配置过程: • sudo apt-get install ssh(ubuntu自带的软件获取) • sudomkdir .ssh(创建存放密钥的文件夹) • ssh-keygen(master机生成密钥) • cp id_rsa.pub authorized_keys (将公钥内容复制到authorized_keys文件 )
5. chmod644 authorized_keys (设定authorized_keys文件属性为-rw-r--r--,即文件属主拥有读写权限, 与文件属主同组的用户拥有读权限,其他人拥有读权限) 6. scpauthorized_keysslave1:/home/Aki/.ssh (将master机上生成的密钥拷贝到从机slave1上) scpauthorized_keysslave2:/root/.ssh (将master机上生成的密钥拷贝到从机slave2上) 7. sshslave1 (测试ssh是否配置成功,如果配置成功,这时输入密码就能登录到从机slave1上,对slave1机上的文档进行操作) 注:在进行ssh配置前,要将配置的三台机器的IP地址都加入到/etc/hosts表中,这样机器间才能正确通信。
Hadoop平台搭建过程 3. 安装配置hadoop • 原理:一个分布式系统基础架构,也是能够对大量数据进行分布式处理的软件框架。 它包含以下三个部分: 1.HadoopCommon 用来支持一些子项目的基本功能:如IO操作,进程间通信等等。 2. Hadoop Distributed File System (HDFS™) 一个分布式的文件系统,由各个节点的存储块一起组成,存放进行任 任务所需的文件,各个节点都可以访问。 3. HadoopMapReduce 一个软件框架,帮助集群对大量的数据进行分布式的处理。
Hadoop平台搭建过程 3. 安装配置hadoop • 配置过程: • 下载hadoop的软件包,解压放到根目录下。 • sudogedit /etc/profile 在文件末尾添加 • HADOOP_HOME=/root/hadoop • export HADOOP_HOME • export HADOOP=$HADOOP_HOME/bin • export PATH=$HADOOP:$PATH • (以上操作是将hadoop的路径添加到系统变量中)
Hadoop平台搭建过程 3. 安装配置hadoop • 配置过程: • 修改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,观察各个任务的执行
Nutch搭建过程 • 配置过程 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/crawldburls 这部分交给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的安装、配置以及爬网页(建立索引)的工作完成。
Solr搭建过程 • 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服务
运行过程 • 启动hadoop • 启动solr服务,开启后不要关闭终端 • 在nutch的deploy文件夹下执行以下指令 • ~/nutch/src/bin/nutch crawl hdfs_path/urls.txt -solr http://ip:8983/solr/ -dirhdfs_path/crawled -depth 3 -topN1000 这条指令的意思是以hdfs中存储的文件urls.txt作为种子来进行网页爬取,爬取的最大深度为3层,每一次抓取的网页时排名前1000的网页,并且把生成的索引信息传给http://ip:8983/solr/,也就是传给solr来进行处理。 • ~/nutch/src/bin/nutchsolrindex http://ip:8983/solr/ hdfs_path/crawled/crawldb/ hdfs_path/crawled/linkdb/ -dirhdfs_path/crawled/segments/ 生成的index在~/solr/example/solr/data/index/下面 • 这样就完成的任务的输入,我们只需等待任务进行完成即可
Solr的搜索界面 种子一共有三个,分别是: www.163.com www.hoop.com www.tongji.edu.cn
注意事项 • Nutch源码包必须经过ant之后才能使用 • Nutch和Solr也必须配置到各节点
心得感想 • 总结: • 在任务的执行过程中,可以明显的发现消耗的时间大部分花在任务的分配和部署上,实际进行map和reduce所占的时间并不多,所以,在hadoop的集群中,各个计算机之间的通信的带宽是提升集群能的一个关键。 • 进一步,由文件系统中可以看到,hadoop的分布式文件系统是把文件分块存储的。就算是很小的几kb的文件也会被划分到单独的一个64M大小的存储块中。也是这个缘故,hadoop并不适合对小文件进行处理(如网页的链接),这也符合hadoop能够利用低性能计算机,处理大数据的特点。