http://f.dataguru.cn/thread-240156-1-1.html

软件版本: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集群上跑。

前提

1 启动Hadoop集群

伪分布式或真分布式的Hadoop集群都可以,无所谓。

选择一台配置好了的Hadoop客户端的机器(见Hadoop多用户的配置),作为客户机,以下操作均在这台客户机上进行。

2 下载Nutch源码

有两种方法,

3 把Hadoop的6个配置文件拷贝到Nutch的conf/目录

将Hadoop的六个配置文件,拷贝到Nutch的conf/目录,相当于把Hadoop集群的配置信息告诉Nutch,

在伪分布式模式下,

  1. $ cd ~/local/opt/hadoop-1.2.1/conf
  2. $ cp hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml masters slaves /home/soulmachine/local/src/apache-nutch-1.7/conf

复制代码

在分布式模式下,

  1. $ ssh hadoop@localhost
  2. $ cd ~/local/opt/hadoop-1.2.1/conf
  3. $ scp hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml masters slaves soulmachine@localhost:~/local/src/apache-nutch-1.7/conf
  4. $ exit

复制代码

4 修改Nutch的配置文件

修改 conf/nutch-site.xml:

  1. <property>
  2. <name>http.agent.name</name>
  3. <value>My Nutch Spider</value>
  4. </property>

复制代码

修改 regex-urlfilter.txt, 见Nutch 快速入门(Nutch 1.7) 第4节,

  1. #注释掉这一行
  2. # skip URLs containing certain characters as probable queries, etc.
  3. #-[?*!@=]
  4. # accept anything else
  5. #注释掉这行
  6. #+.
  7. +^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干了什么,就明白了。

  1. $ 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包,

  1. export HADOOP_CLASSPATH=/home/soulmachine/local/opt/apache-nutch-1.7/runtime/local/lib/*.jar

复制代码

上传种子URL列表,

  1. $ hadoop fs -put ~/urls urls
  2. $ hadoop fs -lsr urls

复制代码

提交Job,

  1. $ hadoop jar ./runtime/deploy/apache-nutch-1.7.job org.apache.nutch.crawl.Crawl urls -dir TestCrawl -depth 1 -topN 5

复制代码

可以打开web页面监控job的进度,

把Nutch运行在伪分布式Hadoop集群上,比Standalone模式要好,因为可以通过web页面监控job。

查看结果

  1. $ hadoop fs -ls TestCrawl
  2. Found 3 items
  3. drwxr-xr-x   - soulmachine supergroup          0 2014-02-04 02:17 /user/soulmachine/TestCrawl/crawldb
  4. drwxr-xr-x   - soulmachine supergroup          0 2014-02-04 02:18 /user/soulmachine/TestCrawl/linkdb
  5. drwxr-xr-x   - soulmachine supergroup          0 2014-02-04 02:16 /user/soulmachine/TestCrawl/segments

复制代码

7 注意

如果出现java.io.IOException: No valid local directories in property: mapred.local.dir的错误,说明你的客户机的mapred-site.xml是从hadoop集群拷贝过来的,没有修改过,mapred.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目录下

  1. cp ~/local/opt/hadoop-2.2.0/etc/hadoop* ~/local/src/apache-nutch-1.7/conf

复制代码

然后编译,

  1. ant runtime

复制代码

把种子列表上传到hdfs,

  1. $ hdfs dfs -put ~/urls urls
  2. $ hdfs dfs -lsr urls

复制代码

提交Job,

  1. $ hadoop jar ./runtime/deploy/apache-nutch-1.7.job org.apache.nutch.crawl.Crawl urls -dir TestCrawl -depth 2

复制代码

查看结果,

  1. $ cd runtime/deploy
  2. $ ./bin/readdb hdfs://localhost/user/soulmachine/TestCrawl/crawldb/ -stats
  3. 14/02/14 16:51:07 INFO crawl.CrawlDbReader: Statistics for CrawlDb: hdfs://localhost/user/soulmachine/TestCrawl/crawldb/
  4. 14/02/14 16:51:07 INFO crawl.CrawlDbReader: TOTAL urls:        70
  5. 14/02/14 16:51:07 INFO crawl.CrawlDbReader: retry 0:        70
  6. 14/02/14 16:51:07 INFO crawl.CrawlDbReader: min score:        0.006
  7. 14/02/14 16:51:07 INFO crawl.CrawlDbReader: avg score:        0.03972857
  8. 14/02/14 16:51:07 INFO crawl.CrawlDbReader: max score:        1.2
  9. 14/02/14 16:51:07 INFO crawl.CrawlDbReader: status 1 (db_unfetched):        59
  10. 14/02/14 16:51:07 INFO crawl.CrawlDbReader: status 2 (db_fetched):        11
  11. 14/02/14 16:51:07 INFO crawl.CrawlDbReader: CrawlDb statistics: done

复制代码

参考资料

废弃的资料

Posted by soulmachine Feb 4th, 2014 Search-Engine

[转载] 把Nutch爬虫部署到Hadoop集群上的更多相关文章

  1. 把Nutch爬虫部署到Hadoop集群上

    原文地址:http://cn.soulmachine.me/blog/20140204/ 把Nutch爬虫部署到Hadoop集群上 Feb 4th, 2014 | Comments 软件版本:Nutc ...

  2. 基于Docker一键部署大规模Hadoop集群及设计思路

    一.背景: 随着互联网的发展.互联网用户的增加,互联网中的数据也急剧膨胀.每天产生的数据量数以万计,本地文件系统和单机CPU已无法满足存储和计算要求.Hadoop分布式文件系统(HDFS)是海量数据存 ...

  3. 在Hadoop集群上的HBase配置

    之前,我们已经在hadoop集群上配置了Hive,今天我们来配置下Hbase. 一.准备工作 1.ZooKeeper下载地址:http://archive.apache.org/dist/zookee ...

  4. MapReduce编程入门实例之WordCount:分别在Eclipse和Hadoop集群上运行

    上一篇博文如何在Eclipse下搭建Hadoop开发环境,今天给大家介绍一下如何分别分别在Eclipse和Hadoop集群上运行我们的MapReduce程序! 1. 在Eclipse环境下运行MapR ...

  5. Hadoop集群上搭建Ranger

    There are two types of people in the world. I hate both of them. Hadoop集群上搭建Ranger 在搭建Ranger工程之前,需要完 ...

  6. Hadoop集群上使用JNI,调用资源文件

    hadoop是基于java的数据计算平台,引入第三方库,例如C语言实现的开发包将会大大增强数据分析的效率和能力. 通常在是用一些工具的时候都要用到一些配置文件.资源文件等.接下来,借一个例子来说明ha ...

  7. hadoop 把mapreduce任务从本地提交到hadoop集群上运行

    MapReduce任务有三种运行方式: 1.windows(linux)本地调试运行,需要本地hadoop环境支持 2.本地编译成jar包,手动发送到hadoop集群上用hadoop jar或者yar ...

  8. 在Hadoop集群上的Hive配置

    1. 系统环境Oracle VM VirtualBoxUbuntu 16.04Hadoop 2.7.4Java 1.8.0_111 hadoop集群master:192.168.19.128slave ...

  9. 在Hadoop集群上,搭建HBase集群

    (1)下载Hbase包,并解压:这里下载的是0.98.4版本,对应的hadoop-1.2.1集群 (2)覆盖相关的包:在这个版本里,Hbase刚好和Hadoop集群完美配合,不需要进行覆盖. 不过这里 ...

随机推荐

  1. 清理memcached缓存

    清理memcached缓存 学习了:https://blog.csdn.net/allus0918/article/details/50481927 使用telnet登录 flush_all 命令:

  2. Linq 数据排序,分页

    在用Linq查询中,常常需要用到分页功能,因为每次都需要些分页这些功能,于是把分页功能提取出来,不喜大家勿喷,只是贴出来,自觉地很实用.一下贴出核心代码: /// <summary> // ...

  3. EffectiveJava(11)Java中的clone

    java中的clone clone构造器及其静态工厂的变形 优点:它们不依赖于某一种很有风险的,语言之外的对象创建机制; 它们不要求遵守尚未制定好文档的规范 他们不会于final域的正常使用发生冲突 ...

  4. HNU11376:Golf Bot

    Problem description Input The first line has one integer: N, the number of different distances the G ...

  5. Makefile.am, Makefile.in 与 Makefile的关系(转)

    文章出处:http://blog.mcuol.com/User/wangguangdong/Article/17384_1.htm Makefile.am, Makefile.in, Makefile ...

  6. POJ 2375 Cow Ski Area (强连通分量)

    题目地址:POJ 2375 对每一个点向与之相邻并h小于该点的点加有向边. 然后强连通缩点.问题就转化成了最少加几条边使得图为强连通图,取入度为0和出度为0的点数的较大者就可以.注意,当强连通分量仅仅 ...

  7. STL学习笔记(数值算法)

    运用数值算法之前必须先加入头文件<numeric> 加工运算后产生结果 1.对序列进行某种运算 T accumulate(InputIterator beg,InputIterator e ...

  8. Ubuntu14.04下MySQL的安装与卸载

    转载自:https://www.2cto.com/os/201408/329502.html 安装MysQL 执行以下命令:sudo apt-get install mysql-server 2. 继 ...

  9. Android下 调用原生相机拍照摄像

    1 http://www.cnblogs.com/franksunny/archive/2011/11/17/2252926.html 2 http://www.cnblogs.com/vir56k/ ...

  10. IIS管理器如何添加网站

    IIS服务器一些步骤 安装好iis后 右击网站按钮点击添加网站 网站名称填写无所谓,物理路径(注意是大路径,一个项目所有的文件在那个文件夹下), Ip地址自己定义最好是hosts文件已经绑定了域名的, ...