hadoop+nutch+mmseg4j

1.  在centos上安装nutch:

#  svn co  http://svn.apache.org/repos/asf/nutch/tags/release-1.6/

检出完成之后,进入nutch的主文件夹:

# cd release-1.6

然后进行构建;

#ant

#ls

#ls –l   (生成build和runtime两个文件夹)

#ls  runtime  (下面有deploy和local两个文件夹,代表俩种运行方式)

# cd r*

#cd l*        (进入local模式)

#ls          (bin  conf  lib plugins test)

# mkdir urls    (存放URL的文件夹)

# vi urls/url.txt (文本中写抓取URL网址)

#bin/nutch     (运行)

#bin/nutch crawl

#nohup  bin/nutch crawl urls –dir data –depth 3 –threads 100 &

#ls (运行之后会生成俩个东西 logs和 nohup.out)

#ls logs  (显示hadoop.log)

#cat n*.out   (报错如下)

报错:

hadoop+nutch+mmseg4j

解决:

hadoop+nutch+mmseg4j

<!-- HTTP properties -->

<property>

  <name>http.agent.name</name>

  <value>nutch</value>

  <description>HTTP 'User-Agent' request header. MUST NOT be empty -

  please set this to a single word uniquely related to your organization.

  NOTE: You should also check other related properties:

        http.robots.agents

        http.agent.description

        http.agent.url

        http.agent.email

        http.agent.version

  and set their values appropriately.

 

  </description>

</property>

 

让配置文件生效需要再次执行ant

# cd.. (回到release-1.6目录下)

# ant

然后回到local模式下,重新进行编译会报错

解决:

hadoop+nutch+mmseg4j

再次运行:http://blog.tianya.cn

 hadoop+nutch+mmseg4j

把url.txt中的https改为http

重新抓取:结果如下:

抓取天涯博客的结果:

 hadoop+nutch+mmseg4j

nutch架构图;

Injector:注入url

Generator:生成抓取列表

Fetcher:抓取网页

PareseSegment:解析网页

CrawlDb:更新抓去列表

以上便是Nutch的一个执行周期,需要注意的似乎Injector只有在第一次执行的时候需要从urls注入,其他步骤后来成为一个循环

 hadoop+nutch+mmseg4j

content:放抓取网页的源代码

crawl——generate:日志列表

crawl——fetch:每一个url的抓取状态(成功抓取或抛出异常)

crawl——parse:每一个url的解析状态(解析成功或解析失败)

对解析出来的内容:

parse——text:页面本身的文本内容

parse——data页面的元数据

1.    简单日志,产生抓取列表

2.    从网上抓取

3.    对抓取的网页进行分析

4.    将抓取的url状态以及新发现的url写回crawlDb

开发测试适合使用单机模式,但是生产中使用hadoop集群模式。

安装配置SOLR4.2

1.下载安装包

2. tar  -xzvf  solr-4.2.0.tgz解压

3. cd  solr-4.2.0/example

复制nutch的conf目录中的schema-solr4.xml文件到solr/collection1/conf目录,改名为schema.xml,覆盖原来文件

 

 hadoop+nutch+mmseg4j

5.  修改solr/collection1/conf/schema.xml,在<fields>下增加:

<field name="_version_" type="long" indexed="true" stored="true"/>

运行成功:

hadoop+nutch+mmseg4j

hadoop+nutch+mmseg4j

3、给SOLR4.2配置分词器mmseg4j

wget https://mmseg4j.googlecode.com/files/mmseg4j-1.9.1.v20130120-SNAPSHOT.zip

unzip mmseg4j-1.9.1.v20130120-SNAPSHOT.zip -d mmseg4j-1.9.1

将mmseg4j-1.9.1/dist/*.jar复制到solr下的lib目录
将schema.xml文件中的
  <tokenizerclass="solr.WhitespaceTokenizerFactory"/>
  和
  <tokenizer class="solr.StandardTokenizerFactory"/>
  替换为
  <tokenizerclass="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory"mode="complex"/>

 

运行SOLR并提交索引

启动SOLR服务器
 java -jar start.jar &

Web界面

 http://host2:8983

提交索引 在local模式下:

bin/nutch solrindex http://192.168.3.200:8983/solrdata/crawldb -linkdb data/linkdb -dir data/segments

hadoop+nutch+mmseg4j

 

出现错误:

hadoop+nutch+mmseg4j

hadoop+nutch+mmseg4j

最终解决方案;

https://stackoverflow.com/questions/21617141/solr-indexing-following-a-nutch-crawl-fails-reports-job-failed#

 hadoop+nutch+mmseg4j

hadoop+nutch+mmseg4j

其实是错误的:

提交索引之后显示结果:

#bin/nutchsolrindex http://192.168.3.200:8983/solr data/crawldb -linkdb data/linkdb -dirdata/segments

 hadoop+nutch+mmseg4j

hadoop+nutch+mmseg4j

hadoop+nutch+mmseg4j

HADOOP单机本地模式

wgethttp://mirror.bit.edu.cn/apache/hadoop/common/hadoop-1.1.2/hadoop-1.1.2.tar.gz

tar -xzvf hadoop-1.1.2.tar.gz

export PATH=/home/ysc/hadoop-1.1.2/bin:$PATH

切换到nutch的deploy目录运行命令

与local模式的比较

相同:都是启动了一个javabin,

不同:的是单一打java进程由谁来启动?

local:nutch的脚本启动

hadoop本地:hadoop的脚本启动

 

2、HADOOP单机伪分布式模式

不同:hadoop本地是一个java进程

hadoop伪分布式有多个java进程,在逻辑上每个进程是相互独立的可以看作是物理上相互分割的机器(通过逻辑的方式来模拟物理的分布式)

 

新建用户和组

addgroup hadoop

adduser --ingroup hadoop hadoop

注销root以hadoop用户登录

hadoop+nutch+mmseg4j

hadoop+nutch+mmseg4j

配置SSH

ssh-****** -t rsa(密码为空,路径默认)

cp .ssh/id_rsa.pub .ssh/authorized_keys 当前用户的公钥追加到authorized_keys中

hadoop+nutch+mmseg4j

 

准备HADOOP运行环境

 

wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-1.1.2/hadoop-1.1.2.tar.gz

tar -xzvf hadoop-1.1.2.tar.gz

在/home/hadoop/.bashrc 中追加:

export  PATH=/home/hadoop/hadoop-1.1.2/bin:$PATH

重新登录就生效

ssh localhost

which hadoop

 

 

配置HADOOP运行参数

vi conf/core-site.xml

vi conf/hdfs-site.xml

vi conf/mapred-site.xml

 

格式化名称节点并启动集群

hadoop namenode –format 用来初始化分布式文件系统

hadoop+nutch+mmseg4j

启动集群并查看WEB管理界面

start-all.sh

hadoop+nutch+mmseg4j

访问http://localhost:50030 可以查看 JobTracker 的运行状态

hadoop+nutch+mmseg4j

访问http://localhost:50060 可以查看 TaskTracker 的运行状态

hadoop+nutch+mmseg4j

访问http://localhost:50070 可以查看 NameNode 以及整个分布式文件系统的状态,浏览

 hadoop+nutch+mmseg4j

执行Nutch的crawl命令

把nutch运行在hadoop上面,需要把注入的url放到hadoop的分布式文件系统上。

fs:-put把本地文件放到hadoop的分布式文件系统上。

hadoop+nutch+mmseg4j

报如下错误:

hadoop+nutch+mmseg4j

解决:重新格式化节点并启动集群

hadoop namenode –format 用来初始化分布式文件系统

hadoop+nutch+mmseg4j

运行50070节点:

hadoop+nutch+mmseg4j

hadoop+nutch+mmseg4j

抓取网页:

hadoop+nutch+mmseg4j

hadoop+nutch+mmseg4j

优越性;可以有多个map和reduce充分的利用cpu的并行性,能够充分利用服务器。多个map在并行的执行。

可以通过web页面方便的对job的执行情况进行查看