lucene nutch solr及hadoop的區(qū)別和聯(lián)系
Lucene是索引,Nutch是完整的搜索引擎實現(xiàn),是基于Lucene來實現(xiàn)的。
可以這么理解,Lucene是一個基礎(chǔ)的東西,主要用于建立數(shù)據(jù)的索引,通過開發(fā)人員自己調(diào)用Lucene api使用。Nutch是一個做好的成品,配置好后就是一個簡單的百度,可以采集、搜索數(shù)據(jù)等等,Lucene是百度服務(wù)器上搜索操作時具體執(zhí)行的代碼。
如何在web工程中調(diào)用nutch
Nutch默認只給用戶提供一種是用方法就是用一個cygwin的模擬器去模擬一個的環(huán)境,然后用戶去用命令行在cygwin中執(zhí)行搜索,還有就是當(dāng)開發(fā)者把nutch的源代碼導(dǎo)入到eclip的工程目錄下然后執(zhí)行
org.apache.nutch.crawl.Crawl類的main()這兩種方法只是適合程序員做調(diào)試的時候手動開啟,所以在二次開發(fā)nutch的時候就要把crawl放到在jsp中去調(diào)用,
步驟
1:新建一個web工程,把nutch源代碼中plugins文件夾下的目錄復(fù)制到src下,把nutch下src/java 中的這些包復(fù)制src下
2:把nutch中conf文件夾的所有配置文件復(fù)制到src目錄下,把nutch中nutch.job文件復(fù)制到src下邊
3 把nutch中l(wèi)ib文件夾的jar文件復(fù)制到web-inf的lib下
4 重新在src下建立一個類,用這個類去調(diào)用crawl的main()
package valley.test;import org.apache.nutch.crawl.Crawl;public class test {public static void main(String[] args) {String []arg ={"url.txt","-dir","crawled","-depth","10","-topN","50"};try {Crawl.main(arg);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
3 接下來就可以在jsp中去調(diào)用這個test類了,一般在調(diào)用的時候都會出現(xiàn)一個異常-Xms100m -Xmx800m 異常代碼如下Injector: Converting injected urls to crawl db entries.
java.io.IOException: Job failed!at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1232)at org.apache.nutch.crawl.Injector.inject(Injector.java:160)at org.apache.nutch.crawl.Crawl.main(Crawl.java:113)at valley.test.test.main(test.java:10)at org.apache.jsp.MyJsp_jsp._jspService(MyJsp_jsp.java:79)at org.apache.jasper.runtime.HttpJspBa.rvice(HttpJspBa.java:94)at javax.rvlet.http.HttpServlet.rvice(HttpServlet.java:717)at org.apache.jasper.rvlet.JspServletWrapper.rvice(JspServletWrapper.java:324)at org.apache.jasper.rvlet.JspServlet.rviceJspFile(JspServlet.java:292)at org.apache.jasper.rvlet.JspServlet.rvice(JspServlet.java:236)at javax.rvlet.http.HttpServlet.rvice(HttpServlet.java:717)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.rvice(CoyoteAdapter.java:293)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)at java.lang.Thread.run(Thread.java:619)
這是因為tomcat的內(nèi)存不夠引起的具體解決辦法不在羅嗦,不要忘記修改src下配置文件,如何修改和nutch中修改相同。
最后肯定感覺很奇怪,沒什么沒有說url.txt放在那個位置, url.txt一定要放在tomcat/bin 下,你爬取的文件也會自動存放在bin下具體原因我也搞不明白,這些的前提是如果你使用tomcat做web服務(wù),項目的jdk一定要使用jdk1.6不然是編譯 不通過的
如何讀取nutch抓取數(shù)據(jù)
1.首先nutch的配置已經(jīng)在博客里面寫好了,如果還不知道,建議現(xiàn)看下,然后再讀這篇文章。
2.用一個SequenceFile.Reader來讀取排序的輸入。SequenceFile.Reader m_reader = m_reader = new SequenceFile.Reader(fs, content, conf);
3.用NutchConfiguration.create()實例化一個Configuration的對象conf。
Configuration conf = NutchConfiguration.create();
//實例化一個path的路徑,"path"是我們通過讀取配置文件(conf.properties)獲取的路徑
Path content = new Path(path + "/data");
//通過這個路徑就可有得到文件所在的位置。
FileSystem fs = content.getFileSystem(conf);
要爬網(wǎng)頁,選哪個爬蟲好?Nutch?Heritrix
用heritrix比nutch要好一些。
nutch適合做搜索引擎,只是附加有crawl的功能。而heritrix是專門crawl的。
用Lucene搞索引和查詢很方便簡單啊,數(shù)據(jù)庫里面取出數(shù)據(jù),封裝成Lucene doc,用IKAnalyzer分詞,建立索引啥的都給Lucene了。現(xiàn)在就是要從外網(wǎng)爬我需要的信息,按照我本地數(shù)據(jù)的格式存入數(shù)據(jù)庫了... 剛上手...
ant-ANT編譯nutch時失敗,請問大神們這是什么原因
前提條件:配置ant
1. 下載nutch(例如:我的是apache-nutch-2.2.1-src.tar.gz)
解壓,重命名nutch文件夾(命名為nutch),然后移動文件夾到/home文件夾下
2. 編譯nutch
cd nutch
ant
2.1 你可能會遇到這種錯誤:
Trying to override old definition of task javac
[taskdef] Could not load definitions from resource org/sonar/ant/antlib.xml. It could not be found.
ivy-probe-antlib:
ivy-download:
[taskdef] Could not load definitions from resource org/sonar/ant/antlib.xml. It could not be found.
原因:缺少相應(yīng)的jar文件
解決方法:
(1)下載sonar-ant-task-2.1.jar,并放到nutch文件夾目錄下
(2)修改build.xml文件,從而引入這個新的jar
<!-- Define the Sonar task if this hasn't been done in a common script -->
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
<classpath path="${ant.library.dir}" />
<classpath path="${mysql.library.dir}" />
<classpath><filet dir="." includes="sonar*.jar" /></classpath>
</taskdef>
//找到相應(yīng)的地方,增加多出的內(nèi)容即可。
2.2 編譯時間過長
nutch使用ivy進行構(gòu)建,故編譯時間長。如果時間過長,可使用該辦法解決。
修改該文件:ivy/ivyttings.xml
http://mirrors.ibiblio.org/maven2/
替換
http://repo1.maven.org/maven2/
2.3 編譯之后的目錄:
3. 修改nutch配置文件
Nutch2.x版本存儲采用Gora訪問Cassandra、HBa、Accumulo、Avro等,需要在該文件中制定Gora屬性。
3.1修改 conf/nutch-site.xml
<property>
<name>storage.data.store.class</name>
<value>org.apache.gora.hba.store.HBaStore</value>
<description>Default class for storing data</description>
</property>
3.2修改 ivy/ivy.xml
<!-- Uncomment this to u HBa as Gora backend. -->
<dependency org="org.apache.gora" name="gora-hba" rev="0.3" conf="*->default" />
3.3修改 conf/gora.properties
gora.datastore.default=org.apache.gora.hba.store.HBaStore
配置nutch
(nutch文件夾已在/home目錄下)
1. 修改系統(tǒng)環(huán)境變量
sudo gedit /etc/profile
//增加
#t nutch
export PATH=/home/nutch/runtime/local/bin:$PATH
2. 測試(nutch/runtime/local/bin中./nutch & ./crawl)