【Nutch2.3基础教程】集成Nutch/Hadoop/Hbase/Solr构建搜索引擎:安装及运行【集群环境】
1、下载相关软件,并解压
版本号如下:
(1)apache-nutch-2.3
(2) hadoop-1.2.1
(3)hbase-0.92.1
(4)solr-4.9.0
并解压至/opt/jediael。
若要下载最新的开发版本nutch,可以进行以下操作
svn co https://svn.apache.org/repos/asf/nutch/branches/2.x
2、安装hadoop1.2.1集群环境
见http://blog.csdn.net/jediael_lu/article/details/38926477
3、安装hbase0.92.1集群环境
见http://blog.csdn.net/jediael_lu/article/details/43086641
4、Nutch的配置
(1)vi /usr/search/apache-nutch-2.3/conf/nutch-site.xml
<property>
<name>storage.data.store.class</name>
<value>org.apache.gora.hbase.store.HBaseStore</value>
<description>Default class for storing data</description>
</property>
<pre name="code" class="html"><property>
<name>http.agent.name</name>
<value>My Nutch Spider</value>
</property>
(2)vi /usr/search/apache-nutch-2.3/ivy/ivy.xml
默认情况下,此语句被注释掉,将其注释符号去掉,使其生效。
<dependency org="org.apache.gora" name="gora-hbase" rev="0.5" conf="*->default" />
gora-hbase 0.5对应hbase0.94.12
根据需要修改hadoop的版本:
<dependency org="org.apache.hadoop" name="hadoop-core" rev="1.2.1" conf="*->default”>
<dependency org="org.apache.hadoop" name="hadoop-test" rev="1.2.1" conf="test->default”>
(3)vi /usr/search/apache-nutch-2.2.1/conf/gora.properties
添加以下语句:
gora.datastore.default=org.apache.gora.hbase.store.HBaseStore
以上三个步骤指定了使用HBase来进行存储。
(4)根据需要修改网页过滤器
vi /usr/search/apache-nutch-2.3/conf/regex-urlfilter.txt
vi /usr/search/apache-nutch-2.3/conf/regex-urlfilter.txt
将
# accept anything else
+.
修改为
# accept anything else
+^http://([a-z0-9]*\.)*nutch.apache.org/
(9)增加索引内容
默认情况下,schema.xml文件中的core及index-basic中的field才会被索引,为索引更多的field,可以通过以下方式添加。
修改nutch-default.xml,新增以下红色内容【或者只增加index-more】
<property>
<name>plugin.includes</name>
<value>protocol-http|urlfilter-regex|parse-(html|tika)|index-(basic|anchor)|urlnormalizer-(pass|regex|basic)|scoring-opic|index-anchor|index-more|languageidentifier|subcollection|feed|creativecommons|tld</value>
<description>Regular expression naming plugin directory names to
include. Any plugin not matching this expression is excluded.
In any case you need at least include the nutch-extensionpoints plugin. By
default Nutch includes crawling just HTML and plain text via HTTP,
and basic indexing and search plugins. In order to use HTTPS please enable
protocol-httpclient, but be aware of possible intermittent problems with the
underlying commons-httpclient library.
</description>
</property>
或者可以在nutch-site.xml中添加plugin.includes属性,并将上述内容复制过去。注意,在nutch-site.xml中的属性会代替nutch-default.xml中的属性,因此必须将原有的属性也复制过去。
(5)构建runtime
cd /usr/search/apache-nutch-2.3/
ant runtime
(6)验证Nutch安装完成
# cd /usr/search/apache-nutch-2.3/runtime/local/bin/
# ./nutch
Usage: nutch COMMAND
where COMMAND is one of:
inject inject new urls into the database
hostinject creates or updates an existing host table from a text file
generate generate new batches to fetch from crawl db
fetch fetch URLs marked during generate
parse parse URLs marked during fetch
updatedb update web table after parsing
updatehostdb update host table after parsing
readdb read/dump records from page database
readhostdb display entries from the hostDB
elasticindex run the elasticsearch indexer
solrindex run the solr indexer on parsed batches
solrdedup remove duplicates from solr
parsechecker check the parser for a given url
indexchecker check the indexing filters for a given url
plugin load a plugin and run one of its classes main()
nutchserver run a (local) Nutch server on a user defined port
junit runs the given JUnit test
or
CLASSNAME run the class named CLASSNAME
Most commands print help when invoked w/o parameters.
(7)创建seed.txt
cd /usr/search/apache-nutch-2.3/runtime/deploy/bin/
vi seed.txt
http://nutch.apache.org/
hadoop fs -copyFromLocal seed.txt /
将seed.txt放到HDFS的根目录下。
(8)在运行过程中,会出现以下异常:
java.lang.RuntimeException: java.lang.ClassNotFoundException: org.apache.nutch.indexer.solr.SolrDeleteDuplicates$SolrInputFormat
原因未明。为使抓取能正常继续,先将crawl文件中的以下语句注释掉
#echo "SOLR dedup -> $SOLRURL"
#__bin_nutch solrdedup $commonOptions $SOLRURL
以后找原因。
export CLASSPATH=$CLASSPATH:.....无效。
但使用local模式运行不会有以上的错误。
5、Solr的配置
(1)覆盖solr的schema.xml文件。(对于solr4,应该使用schema-solr4.xml)
cp /usr/search/apache-nutch-2.3/conf/schema.xml /usr/search/solr-4.9.0/example/solr/collection1/conf/
(2)若使用solr3.6,则至此已经完成配置,但使用4.9,需要修改以下配置:【新版本已经不需要此步骤】
修改上述复制过来的schema.xml文件
删除:<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" />
增加:<field name="_version_" type="long" indexed="true" stored="true"/>
或者使用tomcat来运行solr,见http://blog.csdn.net/jediael_lu/article/details/37908885。
6、启动抓取任务
(1)启动hadoop
#start-all.sh
(2)启动HBase
# ./start-hbase.sh
(3)启动Solr
[# cd /usr/search/solr-4.9.0/example/
# java -jar start.jar
(4)启动Nutch,开始抓取任务
将seed.txt复制到hdfs的根目录下。
# cd /usr/search/apache-nutch-2.3/runtime/deploy
# bin/crawl /seed.txt TestCrawl http://localhost:8583/solr 2
大功告成,任务开始执行。
7、安装过程中可能出现的异常
异常一:No active index writer.
修改nutch-default.xml,在plugin.includes中增加indexer-solr。
异常二:ClassNotFoundException: org.apache.nutch.indexer.solr.SolrDeleteDuplicates$SolrInputFormat
在SolrDeleteDuplicates中的Job job = new Job(getConf(), "solrdedup");
后添加以下代码:
job.setJarByClass(SolrDeleteDuplicates.class);
关于上述过程的一些分析请见:
集成Nutch/Hbase/Solr构建搜索引擎之二:内容分析
http://blog.csdn.net/jediael_lu/article/details/37738569
以及
Can't find Hadoop executable. Add HADOOP_HOME/bin to the path or run in local mode.
$ vi /opt/jediael/apache-nutch-2.3/runtime/deploy/bin/myCrawl.sh
#!/bin/bash
export JAVA_HOME=/usr/java/jdk1.7.0_51
export PATH=$PATH:/opt/jediael/hadoop-1.2.1/bin/
/opt/jediael/apache-nutch-2.3/runtime/deploy/bin/crawl /seed.txt `date +%h%d%H` http://master:8983/solr/ 2
0 0,9,12,15,19,21 * * * bash /opt/jediael/apache-nutch-2.3/runtime/deploy/bin/myCrawl.sh >> ~/nutch.log
【Nutch2.3基础教程】集成Nutch/Hadoop/Hbase/Solr构建搜索引擎:安装及运行【集群环境】的更多相关文章
- 【Nutch2.2.1基础教程之2.2】集成Nutch/Hbase/Solr构建搜索引擎之二:内容分析
请先参见"集成Nutch/Hbase/Solr构建搜索引擎之一:安装及运行",搭建测试环境 http://blog.csdn.net/jediael_lu/article/deta ...
- 【Nutch2.2.1基础教程之2.1】集成Nutch/Hbase/Solr构建搜索引擎之一:安装及运行【单机环境】
1.下载相关软件,并解压 版本号如下: (1)apache-nutch-2.2.1 (2) hbase-0.90.4 (3)solr-4.9.0 并解压至/usr/search 2.Nutch的配置 ...
- hadoop 2.5.1单机安装部署伪集群
环境:ubuntu 14.04 server 64版本 hadoop 2.5.1 jdk 1.6 部署的步骤主要参考了http://blog.csdn.net/greensurfer/article/ ...
- Envoy 基础教程:使用 Unix Domain Socket(UDS) 与上游集群通信
Envoy Proxy 在大多数情况下都是作为 Sidecar 与应用部署在同一网络环境中,每个应用只需要与 Envoy(localhost)交互,不需要知道其他服务的地址.然而这并不是 Envoy ...
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(三):搭建jenkins集群环境
写在前面 大家可以看到本文的配图,左边是jenkins单机环境,右边是jenkins集群.个中区别,不言而喻,形象生动. 前面我分别介绍了.net core 程序的多种部署方式(无绝对孰优孰劣): 1 ...
- Hadoop学习(一):完全分布式集群环境搭建
1. 设置免密登录 (1) 新建普通用户hadoop:useradd hadoop(2) 在主节点master上生成密钥对,执行命令ssh-keygen -t rsa便会在home文件夹下生成 .ss ...
- Hadoop+HBase+ZooKeeper分布式集群环境搭建
一.环境说明 集群环境至少需要3个节点(也就是3台服务器设备):1个Master,2个Slave,节点之间局域网连接,可以相互ping通,下面举例说明,配置节点IP分配如下: Hostname IP ...
- 基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎
基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎 网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并 ...
- 基于HBase Hadoop 分布式集群环境下的MapReduce程序开发
HBase分布式集群环境搭建成功后,连续4.5天实验客户端Map/Reduce程序开发,这方面的代码网上多得是,写个测试代码非常容易,可是真正运行起来可说是历经挫折.下面就是我最终调通并让程序在集群上 ...
随机推荐
- 在Ajax中将数组转换成字符串(0517-am)
一.如何在Ajax中将数组转换成字符串 1. 主页面; <head> <meta http-equiv="Content-Type" content=" ...
- php魔术方法——构造函数和析构函数
php有一类很神奇的方法,这些方法是保留方法,通常不会在外部被显式调用,他们使用双下划线(__)开头,他们被称为魔术方法(Magic Methods).php官方也不建议定义其他双下划线开头的方法. ...
- PHP页面中文乱码问题
首先纯html页要用meta标签声明编码<meta http-equiv="Content-Type" content="text/html; charset=&q ...
- F#(1)
如果你也会C#,那不妨了解下F#(1):F# 数据类型 简单介绍 F#(与C#一样,念作“F Sharp”)是一种基于.Net框架的强类型.静态类型的函数式编程语言.可以说C#是一门包含函数式编程 ...
- 数据挖掘-Python基本模块
1.numpy:基础模块,高效处理数据.提供数组支持 2.pandas:数据探索和数据分析 3.matplotlib:数据成图模块,解决数据可视化 4.scipy:支持数值计算,支持矩阵运算,提供高等 ...
- JAVA中this用法小结[转]
Java关键字this只能用于方法方法体内.当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this.因此,this只能在类中的非静态方法中使用,静 ...
- 如何用js检测手机是否安装某个app
问题描述 如果本地安装了app那么直接打开,否则苹果要跳转到app-store,安卓则要跳到对应的市场 解决方案 一 //html代码中 的 a 标签,以微信为例,默认的是调用weixin schem ...
- 调用Android系统设置中的Intent
开发Android软件时,常常需要打开系统设置或信息界面,来设置相关系统项或查看系统的相关信息,这时我们就可以使用以下语句来实现:(如打开“无线和网络设置”界面) Intent intent = ne ...
- hdu 找新朋友
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; ]; ...
- android 让图片充满整个屏幕
方法1: <ImageView android:id="@+id/imageView1" android:layout_width="fill_parent&quo ...