nutch2.2.1 整合到java web工程
不知道你转为web项目意义何在,可能是为了在线对爬取的配置,首先:nutch2.2.1提供了一个API,实现其相应的接口,就可以实现相应的功能了,第二点:nutch本身爬取就需要占用大规模的资源,支持hadoop的,hadoop本身就是离线的,所以设置成web意义不大。
所以建议去实现nutch的API接口进行爬取,然后用web项目查询数据就好了
如何在web工程中调用nutch
用命令行在cygwin中执行搜索,还有就是当开发者把nutch的源代码导入到eclipse的工程目录下然后执行
org.apache.nutch.crawl.Crawl类的main()这两种方法只是适合程序员做调试的时候手动开启,所以在二次开发nutch的时候就要把crawl放到在jsp中去调用,
步骤
1:新建一个web工程,把nutch源代码中plugins文件夹下的目录复制到src下,把nutch下src/java 中的这些包复制src下
2:把nutch中conf文件夹的所有配置文件复制到src目录下,把nutch中nutch.job文件复制到src下边
3 把nutch中lib文件夹的jar文件复制到web-inf的lib下
4 重新在src下建立一个类,用这个类去调用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中去调用这个test类了,一般在调用的时候都会出现一个异常-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.HttpJspBase.service(HttpJspBase.java:94)at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)at javax.servlet.http.HttpServlet.service(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.service(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的内存不够引起的具体解决办法不在罗嗦,不要忘记修改src下配置文件,如何修改和nutch中修改相同。
最后肯定感觉很奇怪,没什么没有说url.txt放在那个位置, url.txt一定要放在tomcat/bin 下,你爬取的文件也会自动存放在bin下具体原因我也搞不明白,这些的前提是如果你使用tomcat做web服务,项目的jdk一定要使用jdk1.6不然是编译 不通过的
如何读取nutch抓取数据
1.首先nutch的配置已经在博客里面写好了,如果还不知道,建议现看下,然后再读这篇文章。
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);
如何在web工程中调用nutch
Nutch默认只给用户提供一种是用方法就是用一个cygwin的模拟器去模拟一个的环境,然后用户去用命令行在cygwin中执行搜索,还有就是当开发者把nutch的源代码导入到eclipse的工程目录下然后执行
org.apache.nutch.crawl.Crawl类的main()这两种方法只是适合程序员做调试的时候手动开启,所以在二次开发nutch的时候就要把crawl放到在jsp中去调用,
步骤
1:新建一个web工程,把nutch源代码中plugins文件夹下的目录复制到src下,把nutch下src/java 中的这些包复制src下
2:把nutch中conf文件夹的所有配置文件复制到src目录下,把nutch中nutch.job文件复制到src下边
3 把nutch中lib文件夹的jar文件复制到web-inf的lib下
4 重新在src下建立一个类,用这个类去调用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中去调用这个test类了,一般在调用的时候都会出现一个异常-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.HttpJspBase.service(HttpJspBase.java:94)at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)at javax.servlet.http.HttpServlet.service(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.service(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的内存不够引起的具体解决办法不在罗嗦,不要忘记修改src下配置文件,如何修改和nutch中修改相同。
最后肯定感觉很奇怪,没什么没有说url.txt放在那个位置, url.txt一定要放在tomcat/bin 下,你爬取的文件也会自动存放在bin下具体原因我也搞不明白,这些的前提是如果你使用tomcat做web服务,项目的jdk一定要使用jdk1.6不然是编译 不通过的
nutch和lucene的区别
Lucene其实是一个提供全文文本搜索的函数库,它不是一个应用软件。它提供很多API函数让你可以运用到各种实际应用程序中。现在,它已经成为Apache的一个项目并被广泛应用着。
Nutch是一个建立在Lucene核心之上的Web搜索的实现,它是一个真正的应用程序。也就是说,你可以直接下载下来拿过来用。它在Lucene的基础上加了网络爬虫和一些和Web相关的东东。其目的就是想从一个简单的站内索引和搜索推广到全球网络的搜索上,就像Google和Yahoo一样。当然,和那些巨人竞争,你得动一些脑筋,想一些办法。我们已经测试过100M的网页,并且它的设计用在超过1B的网页上应该没有问题。当然,让它运行在一台机器上,搜索一些服务器,也运行的很好。
总的来说,我认为LUCENE会应用在本地服务器的网站内部搜索,而Nutch则扩展到整个网络、Internet的检索。当然LUCENE加上爬虫程序等就会成为Nutch,这样理解应该没错吧。