把Nutch爬虫部署到Hadoop集群上
原文地址:http://cn.soulmachine.me/blog/20140204/
把Nutch爬虫部署到Hadoop集群上
Feb 4th, 2014 | Comments
软件版本:Nutch 1.7, Hadoop 1.2.1, CentOS 6.5, JDK 1.7
前面的3篇文章中,Nutch 快速入门(Nutch 1.7),Nutch
快速入门(Nutch 2.2.1),在Eclipse里运行Nutch,Nutch都是跑在单机上,本文把Nutch部署到Hadoop集群上,在真正的分布式Hadoop集群上跑。
前提
- 学会了搭建一个分布式Hadoop集群,见在CentOS上安装Hadoop集群
- 学会了单机跑Nutch,见Nutch 快速入门(Nutch 1.7)
1 启动Hadoop集群
伪分布式或真分布式的Hadoop集群都可以,无所谓。
选择一台配置好了的Hadoop客户端的机器(见Hadoop多用户的配置),作为客户机,以下操作均在这台客户机上进行。
2 下载Nutch源码
有两种方法,
- 去官网首页下载apache-nutch-1.7-src.tar.gz
用svn checkout
$ svn co https://svn.apache.org/repos/asf/nutch/tags/release-1.7
3 把Hadoop的6个配置文件拷贝到Nutch的conf/目录
将Hadoop的六个配置文件,拷贝到Nutch的conf/目录,相当于把Hadoop集群的配置信息告诉Nutch,
在伪分布式模式下,
$ cd ~/local/opt/hadoop-1.2.1/conf
$ cp hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml masters slaves /home/soulmachine/local/src/apache-nutch-1.7/conf
在分布式模式下,
$ ssh hadoop@localhost
$ cd ~/local/opt/hadoop-1.2.1/conf
$ scp hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml masters slaves soulmachine@localhost:~/local/src/apache-nutch-1.7/conf
$ exit
4 修改Nutch的配置文件
修改 conf/nutch-site.xml:
<property>
<name>http.agent.name</name>
<value>My Nutch Spider</value>
</property>
修改 regex-urlfilter.txt,
见Nutch 快速入门(Nutch 1.7) 第4节,
#注释掉这一行
# skip URLs containing certain characters as probable queries, etc.
#-[?*!@=]
# accept anything else
#注释掉这行
#+.
+^http:\/\/movie\.douban\.com\/subject\/[0-9]+\/(\?.+)?$
5 重新编译Nutch
每次修改了$NUTCH_HOME/conf下的的文件,都需要重新编译Nutch,重新打包生成一个nutch-x.x.x.job文件,见这里,Running
Nutch in (pseudo) distributed-mode。也可以打开build.xml看看里面的”runtime”这个task干了什么,就明白了。
$ ant runtime
这会在runtime/deploy下生成一个Job文件,apache-nutch-1.7.job,它本质上是一个zip压缩包,可以打开看一下它里面的内容。可以看到它包含了很多编译好的class文件,以及从conf/目录下的拷贝出来的xml配置文件。
6 向Hadoop集群提交Job,进行抓取
首先,要在con/hadoop-env.sh 添加HADOOP_CLASSPATH,让Hadoop知道去哪里找Nutch所依赖的jar包,
export HADOOP_CLASSPATH=/home/soulmachine/local/opt/apache-nutch-1.7/runtime/local/lib/*.jar
上传种子URL列表,
$ hadoop fs -put ~/urls urls
$ hadoop fs -lsr urls
提交Job,
$ hadoop jar ./runtime/deploy/apache-nutch-1.7.job org.apache.nutch.crawl.Crawl urls -dir TestCrawl -depth 1 -topN 5
可以打开web页面监控job的进度,
- Jobtracer: http://master:50030
- Namenode: http://master:50070
把Nutch运行在伪分布式Hadoop集群上,比Standalone模式要好,因为可以通过web页面监控job。
查看结果
$ hadoop fs -ls TestCrawl
Found 3 items
drwxr-xr-x - soulmachine supergroup 0 2014-02-04 02:17 /user/soulmachine/TestCrawl/crawldb
drwxr-xr-x - soulmachine supergroup 0 2014-02-04 02:18 /user/soulmachine/TestCrawl/linkdb
drwxr-xr-x - soulmachine supergroup 0 2014-02-04 02:16 /user/soulmachine/TestCrawl/segments
7 注意
如果出现java.io.IOException:的错误,说明你的客户机的mapred-site.xml是从hadoop集群拷贝过来的,没有修改过,
No valid local directories in property: mapred.local.dirmapred.local.dir是一个本地目录,集群上的机器有这个目录,但是你的本机上没有,所以出现了这个错误。解决办法是,在本地新建一个目录,然后把mapred.local.dir设置为这个路径。
如果出现org.apache.hadoop.security.AccessControlException:的错误,多半是因为你没有给这个用户创建
Permission denied: user=soulmachine, access=WRITE, inode="tmp"hadoop.tmp.dir文件夹,见Hadoop多用户的配置第2.2节。
8 把Nutch 1.7 爬虫部署到Hadoop 2.x集群上
事实证明是完全可行的,Hadoop 2.x 向后兼容。
把hadoop 2.x的配置文件,全部拷贝到 nutch 的conf目录下
cp ~/local/opt/hadoop-2.2.0/etc/hadoop* ~/local/src/apache-nutch-1.7/conf
然后编译,
ant runtime
把种子列表上传到hdfs,
$ hdfs dfs -put ~/urls urls
$ hdfs dfs -lsr urls
提交Job,
$ hadoop jar ./runtime/deploy/apache-nutch-1.7.job org.apache.nutch.crawl.Crawl urls -dir TestCrawl -depth 2
查看结果,
$ cd runtime/deploy
$ ./bin/readdb hdfs://localhost/user/soulmachine/TestCrawl/crawldb/ -stats
14/02/14 16:51:07 INFO crawl.CrawlDbReader: Statistics for CrawlDb: hdfs://localhost/user/soulmachine/TestCrawl/crawldb/
14/02/14 16:51:07 INFO crawl.CrawlDbReader: TOTAL urls: 70
14/02/14 16:51:07 INFO crawl.CrawlDbReader: retry 0: 70
14/02/14 16:51:07 INFO crawl.CrawlDbReader: min score: 0.006
14/02/14 16:51:07 INFO crawl.CrawlDbReader: avg score: 0.03972857
14/02/14 16:51:07 INFO crawl.CrawlDbReader: max score: 1.2
14/02/14 16:51:07 INFO crawl.CrawlDbReader: status 1 (db_unfetched): 59
14/02/14 16:51:07 INFO crawl.CrawlDbReader: status 2 (db_fetched): 11
14/02/14 16:51:07 INFO crawl.CrawlDbReader: CrawlDb statistics: done
参考资料
废弃的资料
Nutch and Hadoop Tutorial,讲的是Nutch 1.3的,太老了,完全不适用Nutch 1.7
把Nutch爬虫部署到Hadoop集群上的更多相关文章
- [转载] 把Nutch爬虫部署到Hadoop集群上
http://f.dataguru.cn/thread-240156-1-1.html 软件版本:Nutch 1.7, Hadoop 1.2.1, CentOS 6.5, JDK 1.7 前面的3篇文 ...
- 基于Docker一键部署大规模Hadoop集群及设计思路
一.背景: 随着互联网的发展.互联网用户的增加,互联网中的数据也急剧膨胀.每天产生的数据量数以万计,本地文件系统和单机CPU已无法满足存储和计算要求.Hadoop分布式文件系统(HDFS)是海量数据存 ...
- 在Hadoop集群上的HBase配置
之前,我们已经在hadoop集群上配置了Hive,今天我们来配置下Hbase. 一.准备工作 1.ZooKeeper下载地址:http://archive.apache.org/dist/zookee ...
- Hadoop集群上搭建Ranger
There are two types of people in the world. I hate both of them. Hadoop集群上搭建Ranger 在搭建Ranger工程之前,需要完 ...
- Hadoop集群上使用JNI,调用资源文件
hadoop是基于java的数据计算平台,引入第三方库,例如C语言实现的开发包将会大大增强数据分析的效率和能力. 通常在是用一些工具的时候都要用到一些配置文件.资源文件等.接下来,借一个例子来说明ha ...
- hadoop 把mapreduce任务从本地提交到hadoop集群上运行
MapReduce任务有三种运行方式: 1.windows(linux)本地调试运行,需要本地hadoop环境支持 2.本地编译成jar包,手动发送到hadoop集群上用hadoop jar或者yar ...
- MapReduce编程入门实例之WordCount:分别在Eclipse和Hadoop集群上运行
上一篇博文如何在Eclipse下搭建Hadoop开发环境,今天给大家介绍一下如何分别分别在Eclipse和Hadoop集群上运行我们的MapReduce程序! 1. 在Eclipse环境下运行MapR ...
- 在Hadoop集群上的Hive配置
1. 系统环境Oracle VM VirtualBoxUbuntu 16.04Hadoop 2.7.4Java 1.8.0_111 hadoop集群master:192.168.19.128slave ...
- 在Hadoop集群上,搭建HBase集群
(1)下载Hbase包,并解压:这里下载的是0.98.4版本,对应的hadoop-1.2.1集群 (2)覆盖相关的包:在这个版本里,Hbase刚好和Hadoop集群完美配合,不需要进行覆盖. 不过这里 ...
随机推荐
- Hadoop如何修改HDFS文件存储块大小
一. 临时修改可以在执行上传文件命令时,显示地指定存储的块大小.1. 查看当前 HDFS文件块大小我这里查看HDFS上的TEST目录下的jdk-7u25-linux-x64.gz 文件存储块大小.1 ...
- jsonpath对json数据进行分析校验做接口测试
在做接口测试的时候, 我们需要对返回的数据进行分析校验, 一般返回的都是json格式的数据, 怎么来解析校验呢? 之前有看过使用递归遍历json数据的, 然后找到了jsonpath, 可以很方便的对j ...
- 利用etcd及confd实现配置自动管理
ETCD etcd 架设etcd集群 静态启动etcd集群需要每个成员在集群中知道另一个成员.在许多情况下,集群成员的IP可能提前未知.在这种情况下,可以使用etcd集群的自动发现服务.一旦etcd集 ...
- 使用JobControl控制MapReduce任务
代码结构 BeanWritable:往数据库读写使用的bean ControlJobTest:JobControl任务控制 DBInputFormatApp:将关系型数据库的数据导入HDFS,其中包含 ...
- Entity Framework 学习笔记(一)之数据模型 数据库
关于Entity Framework 数据模型 的开发有三种模式:1.引用数据库方式:2.在VS中新建EF空模型Model 方式:3.Code 方式 Entity Framework 数据模型 ...
- 解决微信浏览器video全屏的问题
解决微信浏览器video全屏的问题 在微信浏览器里面使用video标签,会自动变成全屏,改成下面就好了,起码可以在video标签之上加入其他元素. <video id="videoID ...
- MySQL查询in操作 查询结果按in集合顺序显示
偶尔看到的...或许有人会注意过,但我以前真不知道 SQL: select * from table where id IN (3,6,9,1,2,5,8,7); 这样的情况取出来后,其实,id还是按 ...
- CentOS安装wireshark
yum install wireshark-gnome yum install libpcap
- 手把手编写PHP框架 深入了解MVC运行流程
1 什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller ...
- wiredtiger存储引擎介绍——本质就是LSM,当然里面也可以包含btree和列存储
见:http://www.slideshare.net/profyclub_ru/4-understanding-and-tuning-wired-tiger-the-new-high-perform ...