---------------20080828------------
下载源码,初步研究
--------------20080829-------------
http://blog.csdn.net/lianqiang198505/archive/2007/04/18/1569680.aspx
前两天试用了nutch目前的最新版本。这个版本是完全建立在hadoop基础上的,也就是一个分布式的系统。
去网上搜索了一下,发现了一篇很好的知道文档,这个给出链接地址
http://wiki.apache.org/nutch/NutchHadoopTutorial
按照这个上面的做,如果你运不差的话应该可以让nutch自己跑起来,而且后面的分布式检索也可以尝试一下,这里把我整个过程出现的问题分享如下:
1. 0.9版本需要一个叫masters的文件,这个文件的内容存放备用的名字节点,没有也不影响你正常的使用;
2. 可以把mapred.map.tasks、mapred.reduce.tasks按节点的倍数调大,这样运行速度会更快;
3. 如果发现节点找不到,这个时候有可能是机器的主机名不对,修改一下就可以了;
4. hadoop运行的时候需要占用一些端口,如果你不能弄清需要那些端口,就把防火墙打开,在局域网内安全问题不大;
5. 抓取的时候一定要设置一下nutch-default.xml中的agent,不然它为空的话你将什么都抓取不到;
6. 在分布式检索的时候,为了防止名字节点既做slave,又做search server,使得search server去分布式文件系统中找index,这个时候按照上面的指导我们在nutch目录下可以再建立一个文件夹,然后在里面也安装一个nutch- 0.9,注意这个配置都采用默认的就可以,然后不要调用它的start-all.sh,因为这样会有冲突,你只需要运行bin/nutch server命令就可以了,这样它就可以提供检索服务了;
7. 那个指示所有search server服务节点的文件一定要叫search-servers.txt,不然nutch找不到其他的。
注意:运行nutch之前,需要先启动hadoop,会在/tmp目录下面产生临时PID文件,需要将/tmp改成777权限,你使用的当前用户需要有/tmp的写权限,否则运行不起来。报些看不懂的错误。我在这个地方郁闷了好几个小时,呵呵。
------------------------------20080901---------------------------
尝试crawl页面,当urls/nutch.txt只有一行,nutch-0.90有BUG,具体的链接如下,需要对源码进行修改,这个BUG在最新的版本中已经修改了。
http://hi.baidu.com/phpasp/blog/item/f3b96209f5948bcb3ac76351.html
//BUG FIX NUTCH-503
找到下面这个类删除几行,加上几行,重新编译就可以用了
Index: src/java/org/apache/nutch/crawl/Generator.java
===================================================================
--- src/java/org/apache/nutch/crawl/Generator.java (revision 549414)
+++ src/java/org/apache/nutch/crawl/Generator.java (working copy)
@@ -422,7 +422,16 @@
// check that we selected at least some entries ...
SequenceFile.Reader[] readers = SequenceFileOutputFormat.getReaders(job, tempDir);
- if (readers == null || readers.length == 0 || !readers[0].next(new FloatWritable())) {
+ boolean empty = true;
+ if (readers != null && readers.length > 0) {
+ for (int num=0; num<readers.length; num++) {
+ if (readers[num].next(new FloatWritable())) {
+ empty = false;
+ break;
+ }
+ }
+ }
+ if (empty) {
LOG.warn("Generator: 0 records selected for fetching, exiting ...");
LockUtil.removeLockFile(fs, lock);
fs.delete(tempDir);
修改完后,重新编译
抓取命令
bin/nutch crawl urls -dir crawl -depth 3 -topN 50
Once the index has been created on the DFS you can use the hadoop copyToLocal command to move it to the local file system as such.
nutch可以直接利用分布式进行查询,也可以将文件copy到本地,下面就是copy的命令
bin/hadoop dfs -copyToLocal crawl /nutch/local
配置tomcat
搞定了。
深入了解nutch,学习资料
http://www.gispark.com/html/spatial/2006/1008/294.html
-------------------20080902-03---------------
研究中文分词集成,配置paoding分词插件
1)在src/plugin下面加入,analysis-zh和lib-paoding-analyzers目录。具体参见
E:\workspace\searchengine\nutch-0.9\src\plugin\analysis-zh
E:\workspace\searchengine\nutch-0.9\src\plugin\lib-paoding-analyzers
下面是analysis-zh中的源码,是对paoding的封装,代码超级easy,主要是把配置文件和ant脚本调对就可以了
/**
* Paoding chinese analyzer
*/
package org.apache.nutch.analysis.zh;
// JDK imports
import java.io.Reader;
// Lucene imports
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
// Nutch imports
import org.apache.nutch.analysis.NutchAnalyzer;
/**
* A simple Chinese Analyzer that wraps the Lucene one.
* @author kevin tu
*/
public class ChineseAnalyzer extends NutchAnalyzer {
private final static Analyzer ANALYZER =
new net.paoding.analysis.analyzer.PaodingAnalyzer();
/** Creates a new instance of ChineseAnalyzer */
public ChineseAnalyzer() { }
public TokenStream tokenStream(String fieldName, Reader reader) {
return ANALYZER.tokenStream(fieldName, reader);
}
}
2)修改src\plugin的build.xml
<target name="deploy">
<ant dir="analysis-zh" target="deploy"/><!--kevin 20080903 add-->
<ant dir="lib-paoding-analyzers" target="deploy"/><!--kevin 20080903 add-->
...
</target>
<target name="clean">
<ant dir="analysis-zh" target="clean"/><!--kevin 20080903 add-->
<ant dir="lib-paoding-analyzers" target="clean"/><!--kevin 20080903 add-->
...
</target>
3)修改nutch-site.xml,加入|analysis-(zh)| ,这个很重重要,否则nutch只会加载默认插件,不会加载paoding的jar包,和自己写的analysis-(zh) jar包
<property>
<name>plugin.includes</name>
<value>protocol-http|urlfilter-regex|parse-(text|html|js)|analysis-(zh)|index-basic|query-(basic|site|url)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
<description>
</description>
</property>
4)重新打包 ant package
5)配置tomcat,修改webapps/cse/WEB-INF/classes/nutch-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>local</value>
</property>
<property><!--指定本地的index目录-->
<name>searcher.dir</name>
<value>/nutch/local/crawled</value>
</property>
<property>
<name>plugin.includes</name>
<value>protocol-http|urlfilter-regex|parse-(text|html|js)|analysis-(zh)|index-basic|query-(basic|site|url)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
<description>
</description>
</property>
</configuration>
6)配置paoding运行参数,加入paoding-analysis.properties
paoding.imports=\
ifexists:classpath:paoding-analysis-default.properties;\
ifexists:classpath:paoding-analysis-user.properties;\
ifexists:classpath:paoding-knives-user.properties
配置export PAODING_DIC_HOME=/nutch/dic
6)启动tomcat,查看http://linux1:8080/cse
--------------------------20080904---------------------
模仿神功,修改nutch的web页面
其中about.html,search.html,help.html是用xslt来生成的,需要修改src/web/pages/zh下面的about.xml,search.xml,help.xml,然后用ant generate-docs来进行编译,生成最新的html文件
将现有的zh下面的properties从ascii转码到中文,用以下的命令
native2ascii -reverse -encoding GBK search_zh.properties >original\search_zh.properties
增加ant 的target
<!-- ====================================================== -->
<!-- native to ascii -->
<!-- ====================================================== -->
<target name="native2ascii" description="native to ascii *.js or *.property file">
<native2ascii encoding="GBK" src="src/web/locale/org/nutch/jsp/original" dest="src/web/locale/org/nutch/jsp" ext=".properties" includes="*.properties"/>
</target>
<!-- ====================================================== -->
<!-- Compile the Java files -->
<!-- ====================================================== -->
<target name="compile" depends="native2ascii,compile-core, compile-plugins"/>
解决了分页问题,修改了文字,分页逻辑按照baidu的分页来做,当用户点击1~9页时只显示1~10,当选中10以上的页面时,显示 (n-10)~(n+10),这一块用一个JSP函数来实现
编译nutch0.9,有两个plugin编译不能通过,mp3,rtf插件编译,找不到jar,暂时可以不用
--------------------------20080905---------------------
编译nutch-svn项目,进一步优化页面
Nutch距离一个商业应用的搜索引擎还有多远
http://www.cnblogs.com/liushouzhao/archive/2008/01/02/1023219.html
nutch的cache策略及cache策略研究
http://blog.csdn.net/kauu/archive/2007/11/02/1863217.aspx
待续
下载源码,初步研究
--------------20080829-------------
http://blog.csdn.net/lianqiang198505/archive/2007/04/18/1569680.aspx
前两天试用了nutch目前的最新版本。这个版本是完全建立在hadoop基础上的,也就是一个分布式的系统。
去网上搜索了一下,发现了一篇很好的知道文档,这个给出链接地址
http://wiki.apache.org/nutch/NutchHadoopTutorial
按照这个上面的做,如果你运不差的话应该可以让nutch自己跑起来,而且后面的分布式检索也可以尝试一下,这里把我整个过程出现的问题分享如下:
1. 0.9版本需要一个叫masters的文件,这个文件的内容存放备用的名字节点,没有也不影响你正常的使用;
2. 可以把mapred.map.tasks、mapred.reduce.tasks按节点的倍数调大,这样运行速度会更快;
3. 如果发现节点找不到,这个时候有可能是机器的主机名不对,修改一下就可以了;
4. hadoop运行的时候需要占用一些端口,如果你不能弄清需要那些端口,就把防火墙打开,在局域网内安全问题不大;
5. 抓取的时候一定要设置一下nutch-default.xml中的agent,不然它为空的话你将什么都抓取不到;
6. 在分布式检索的时候,为了防止名字节点既做slave,又做search server,使得search server去分布式文件系统中找index,这个时候按照上面的指导我们在nutch目录下可以再建立一个文件夹,然后在里面也安装一个nutch- 0.9,注意这个配置都采用默认的就可以,然后不要调用它的start-all.sh,因为这样会有冲突,你只需要运行bin/nutch server命令就可以了,这样它就可以提供检索服务了;
7. 那个指示所有search server服务节点的文件一定要叫search-servers.txt,不然nutch找不到其他的。
注意:运行nutch之前,需要先启动hadoop,会在/tmp目录下面产生临时PID文件,需要将/tmp改成777权限,你使用的当前用户需要有/tmp的写权限,否则运行不起来。报些看不懂的错误。我在这个地方郁闷了好几个小时,呵呵。
------------------------------20080901---------------------------
尝试crawl页面,当urls/nutch.txt只有一行,nutch-0.90有BUG,具体的链接如下,需要对源码进行修改,这个BUG在最新的版本中已经修改了。
http://hi.baidu.com/phpasp/blog/item/f3b96209f5948bcb3ac76351.html
//BUG FIX NUTCH-503
找到下面这个类删除几行,加上几行,重新编译就可以用了
Index: src/java/org/apache/nutch/crawl/Generator.java
===================================================================
--- src/java/org/apache/nutch/crawl/Generator.java (revision 549414)
+++ src/java/org/apache/nutch/crawl/Generator.java (working copy)
@@ -422,7 +422,16 @@
// check that we selected at least some entries ...
SequenceFile.Reader[] readers = SequenceFileOutputFormat.getReaders(job, tempDir);
- if (readers == null || readers.length == 0 || !readers[0].next(new FloatWritable())) {
+ boolean empty = true;
+ if (readers != null && readers.length > 0) {
+ for (int num=0; num<readers.length; num++) {
+ if (readers[num].next(new FloatWritable())) {
+ empty = false;
+ break;
+ }
+ }
+ }
+ if (empty) {
LOG.warn("Generator: 0 records selected for fetching, exiting ...");
LockUtil.removeLockFile(fs, lock);
fs.delete(tempDir);
修改完后,重新编译
抓取命令
bin/nutch crawl urls -dir crawl -depth 3 -topN 50
Once the index has been created on the DFS you can use the hadoop copyToLocal command to move it to the local file system as such.
nutch可以直接利用分布式进行查询,也可以将文件copy到本地,下面就是copy的命令
bin/hadoop dfs -copyToLocal crawl /nutch/local
配置tomcat
搞定了。
深入了解nutch,学习资料
http://www.gispark.com/html/spatial/2006/1008/294.html
-------------------20080902-03---------------
研究中文分词集成,配置paoding分词插件
1)在src/plugin下面加入,analysis-zh和lib-paoding-analyzers目录。具体参见
E:\workspace\searchengine\nutch-0.9\src\plugin\analysis-zh
E:\workspace\searchengine\nutch-0.9\src\plugin\lib-paoding-analyzers
下面是analysis-zh中的源码,是对paoding的封装,代码超级easy,主要是把配置文件和ant脚本调对就可以了
/**
* Paoding chinese analyzer
*/
package org.apache.nutch.analysis.zh;
// JDK imports
import java.io.Reader;
// Lucene imports
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
// Nutch imports
import org.apache.nutch.analysis.NutchAnalyzer;
/**
* A simple Chinese Analyzer that wraps the Lucene one.
* @author kevin tu
*/
public class ChineseAnalyzer extends NutchAnalyzer {
private final static Analyzer ANALYZER =
new net.paoding.analysis.analyzer.PaodingAnalyzer();
/** Creates a new instance of ChineseAnalyzer */
public ChineseAnalyzer() { }
public TokenStream tokenStream(String fieldName, Reader reader) {
return ANALYZER.tokenStream(fieldName, reader);
}
}
2)修改src\plugin的build.xml
<target name="deploy">
<ant dir="analysis-zh" target="deploy"/><!--kevin 20080903 add-->
<ant dir="lib-paoding-analyzers" target="deploy"/><!--kevin 20080903 add-->
...
</target>
<target name="clean">
<ant dir="analysis-zh" target="clean"/><!--kevin 20080903 add-->
<ant dir="lib-paoding-analyzers" target="clean"/><!--kevin 20080903 add-->
...
</target>
3)修改nutch-site.xml,加入|analysis-(zh)| ,这个很重重要,否则nutch只会加载默认插件,不会加载paoding的jar包,和自己写的analysis-(zh) jar包
<property>
<name>plugin.includes</name>
<value>protocol-http|urlfilter-regex|parse-(text|html|js)|analysis-(zh)|index-basic|query-(basic|site|url)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
<description>
</description>
</property>
4)重新打包 ant package
5)配置tomcat,修改webapps/cse/WEB-INF/classes/nutch-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>local</value>
</property>
<property><!--指定本地的index目录-->
<name>searcher.dir</name>
<value>/nutch/local/crawled</value>
</property>
<property>
<name>plugin.includes</name>
<value>protocol-http|urlfilter-regex|parse-(text|html|js)|analysis-(zh)|index-basic|query-(basic|site|url)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
<description>
</description>
</property>
</configuration>
6)配置paoding运行参数,加入paoding-analysis.properties
paoding.imports=\
ifexists:classpath:paoding-analysis-default.properties;\
ifexists:classpath:paoding-analysis-user.properties;\
ifexists:classpath:paoding-knives-user.properties
配置export PAODING_DIC_HOME=/nutch/dic
6)启动tomcat,查看http://linux1:8080/cse
--------------------------20080904---------------------
模仿神功,修改nutch的web页面
其中about.html,search.html,help.html是用xslt来生成的,需要修改src/web/pages/zh下面的about.xml,search.xml,help.xml,然后用ant generate-docs来进行编译,生成最新的html文件
将现有的zh下面的properties从ascii转码到中文,用以下的命令
native2ascii -reverse -encoding GBK search_zh.properties >original\search_zh.properties
增加ant 的target
<!-- ====================================================== -->
<!-- native to ascii -->
<!-- ====================================================== -->
<target name="native2ascii" description="native to ascii *.js or *.property file">
<native2ascii encoding="GBK" src="src/web/locale/org/nutch/jsp/original" dest="src/web/locale/org/nutch/jsp" ext=".properties" includes="*.properties"/>
</target>
<!-- ====================================================== -->
<!-- Compile the Java files -->
<!-- ====================================================== -->
<target name="compile" depends="native2ascii,compile-core, compile-plugins"/>
解决了分页问题,修改了文字,分页逻辑按照baidu的分页来做,当用户点击1~9页时只显示1~10,当选中10以上的页面时,显示 (n-10)~(n+10),这一块用一个JSP函数来实现
编译nutch0.9,有两个plugin编译不能通过,mp3,rtf插件编译,找不到jar,暂时可以不用
--------------------------20080905---------------------
编译nutch-svn项目,进一步优化页面
Nutch距离一个商业应用的搜索引擎还有多远
http://www.cnblogs.com/liushouzhao/archive/2008/01/02/1023219.html
nutch的cache策略及cache策略研究
http://blog.csdn.net/kauu/archive/2007/11/02/1863217.aspx
待续