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 (报错如下) |
报错:
解决:
<!-- 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模式下,重新进行编译会报错
解决:
再次运行:http://blog.tianya.cn
把url.txt中的https改为http
重新抓取:结果如下:
抓取天涯博客的结果:
nutch架构图;
Injector:注入url
Generator:生成抓取列表
Fetcher:抓取网页
PareseSegment:解析网页
CrawlDb:更新抓去列表
以上便是Nutch的一个执行周期,需要注意的似乎Injector只有在第一次执行的时候需要从urls注入,其他步骤后来成为一个循环
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,覆盖原来文件
|
5. 修改solr/collection1/conf/schema.xml,在<fields>下增加:
<field name="_version_" type="long" indexed="true" stored="true"/> |
运行成功:
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服务器 Web界面
提交索引 在local模式下: bin/nutch solrindex http://192.168.3.200:8983/solrdata/crawldb -linkdb data/linkdb -dir data/segments |
出现错误:
最终解决方案;
其实是错误的:
提交索引之后显示结果:
#bin/nutchsolrindex http://192.168.3.200:8983/solr data/crawldb -linkdb data/linkdb -dirdata/segments
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用户登录 |
配置SSH
ssh-****** -t rsa(密码为空,路径默认)
cp .ssh/id_rsa.pub .ssh/authorized_keys 当前用户的公钥追加到authorized_keys中
准备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 用来初始化分布式文件系统
启动集群并查看WEB管理界面
start-all.sh
访问http://localhost:50030 可以查看 JobTracker 的运行状态
访问http://localhost:50060 可以查看 TaskTracker 的运行状态
访问http://localhost:50070 可以查看 NameNode 以及整个分布式文件系统的状态,浏览
执行Nutch的crawl命令
把nutch运行在hadoop上面,需要把注入的url放到hadoop的分布式文件系统上。
fs:-put把本地文件放到hadoop的分布式文件系统上。
报如下错误:
解决:重新格式化节点并启动集群
hadoop namenode –format 用来初始化分布式文件系统
运行50070节点:
抓取网页:
优越性;可以有多个map和reduce充分的利用cpu的并行性,能够充分利用服务器。多个map在并行的执行。
可以通过web页面方便的对job的执行情况进行查看