分享

Windows7环境下MyEclipse+Nutch2.2.1+Mysql搭建


问题导读

1.Windows7环境下MyEclipse+Nutch2.2.1+Mysql搭建包含哪些步骤?
2.如何从eclipse中下载nutch?
3.如何解决eclipse编码问题?






一、环境准备
首先肯定是配置开发环境,这里暂时不作详细描述。
需要的环境有jdk1.7,MyEclipse,SVN,ant,以及MyEclipse下的三个插件subclipse 、IvyDe和m2e,下载地址http://subclipse.tigris.org/update_1.8.xhttp://www.apache.org/dist/ant/ivyde/updatesite以及http://download.eclipse.org/technology/m2e/releases

二、从svn检出项目

1.png
2.png
3.png
4.png

Finish完成导入。

三、  修改ivy目录
修改ivy目录下的ivysetting.xml地址http://mirrors.ibiblio.org/maven2/(只有这个地址访问是正常的,其余的地址我尝试访问不了)

5.png

四、  修改ivy目录下的ivy.xml(增加mysql访问依赖java包)
修改gora-core版本为0.2.1,并解除注释gora-sql和mysql-connector-java
6.png

五、  Cd 到目录执行Ant eclipse(直接在Eclipse下ant build貌似有问题)

7.png


六、  回到Eclipse工程,刷新项目,会发现目录结构已经发生变化

8.png

七、编码问题
看到还有一个错误,是编码的问题,工程右键Properties -> Resource ->utf-8
9.png

八、  选中Conf

工程右键Build Path->Config Build Path->Order and Export下选中Conf 文件夹置顶

10.png

九、  修改Conf文件夹下gora.properties配置mysql

  1. #Default MySQL properties        #
  2. ###############################
  3. gora.datastore.default=org.apache.gora.sql.store.SqlStore
  4. gora.datastore.autocreateschema=true
  5. gora.sqlstore.jdbc.driver=com.mysql.jdbc.Driver
  6. gora.sqlstore.jdbc.url=jdbc:mysql://localhost:3306/nutch?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull
  7. gora.sqlstore.jdbc.user=root
  8. gora.sqlstore.jdbc.password=123456
复制代码



十、工程目录下新建文件夹urls
工程目录下新建文件夹urls,urls目录下新建一个文件url,里面输入要爬取的root_url,比如http://www.qq.com

十一、配置conf目录下nutch-site.xml

  1. <property>
  2.   <name>http.agent.name</name>
  3.   <value>YourNutchSpider</value>
  4. </property>
  5. <property>
  6.   <name>http.accept.language</name>
  7.   <value>ja-jp, en-us,en-gb,en,zh-cn,zh-tw;q=0.7,*;q=0.3</value>
  8.   <description>Value of the “Accept-Language” request header field.
  9.   This allows selecting non-English language as default one to retrieve.
  10.   It is a useful setting for search engines build for certain national group.</description>
  11. </property>
  12.   
  13. <property>
  14.   <name>parser.character.encoding.default</name>
  15.   <value>utf-8</value>
  16.   <description>The character encoding to fall back to when no other information
  17.   is available</description>
  18. </property>
  19.   
  20. <property>
  21.   <name>plugin.folders</name>
  22.   <value>src/plugin</value>
  23.   <description>Directories where nutch plugins are located. Each
  24.   element may be a relative or absolute path. If absolute, it is used
  25.   as is. If relative, it is searched for on the classpath.</description>
  26. </property>
  27. </pre><pre name="code" class="html"><!-- 为解决utf-8类中的空指针问题 -->
  28. <property>
  29. <span>        </span><name>generate.batch.id</name>
  30. <span>        </span><value>*</value>
  31. </property>
  32.   
  33. <property>
  34.   <name>storage.data.store.class</name>
  35.   <value>org.apache.gora.sql.store.SqlStore</value>
  36.   <description>The Gora DataStore class for storing and retrieving data.
  37.   Currently the following stores are available: ….</description>
  38. </property>
复制代码



十二、运行Run Configuration

配置完上述步骤后配置命令运行Run Configuration选择org.apache.nutch.crawl.Crawler,参数设置urls -depth 3 -topN 5和-Dhadoop.log.dir=logs -Dhadoop.log.file=hadoop.log
11.png
这时运行会遇到错误Exception in thread "main" java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator606301699\.staging to 0700
12.png

十三、修改CheckReturnValue方法
上述错误一般只是windows下才会遇到的,所以我们一般的做法是找到Hadoop-core-1.2.0源码中的org.apache.hadoop.fs下的FileUtil.java修改其中的CheckReturnValue方法,注释掉其中的内容

  1. private static void checkReturnValue(boolean rv, File p,
  2.                                        FsPermission permission
  3.                                        ) throws IOException {
  4. //    if (!rv) {
  5. //      throw new IOException("Failed to set permissions of path: " + p +
  6. //                            " to " +
  7. //                            String.format("%04o", permission.toShort()));
  8. //    }
  9.   }
复制代码


然后编译成java包替换我们工程build/lib下的hadoop-core-1.2.0.jar。

另外一种方法是找到FileUtil.java编译过后的class文件,替换掉jar包中相应的class文件FileUtil.clas和FileUtil$CygPathCommand.clas(用压缩软件打开就行)
附上已修改编译的Hadoop-core-1.2.0.jar文件,包含单独的FileUtil.class文件,链接http://download.csdn.net/detail/cvj1991/7727299(1个积分,有钱的捧个钱场)和直接下载链接http://files.cnblogs.com/e-life/hadoop-core-1.2.0.rar

十四、接下来再运行就没有问题
13.png
14.png

这里注意,你会发现mysql数据库中很多记录除了id,status这几个基本字段有数据外其他值都是null,这是正常情况,请注意status字段,
status    记录抓取状态
        1     unfetched (links not yet fetched due to limits set in regex-urlfilter.txt, -TopN crawl parameters, etc.)  
        2     fetched (page was successfully fetched)  
        3     gone (that page no longer exists)  
        4     redir_temp (temporary redirection — see reprUrl below for more details)  
        5     redir_perm (permanent redirection — see reprUrl below for more details)  
        34     retry  
        38     not modified     
这是因为我们的topN设置太小,所以很多url被限制抓取了(当然还有可能是url被regex-urllfilter过滤了),自己注意一下就好了。
Good Job,到此我们就完成了整个流程的配置和运行。






已有(4)人评论

跳转到指定楼层
QQo0oBIQ 发表于 2015-4-14 09:16:37
回复

使用道具 举报

271592448 发表于 2015-4-14 09:18:32
回复

使用道具 举报

帅的惊动党中央 发表于 2016-5-20 14:31:09
首先非常非常感谢你的付出,这方面的资料本来就不多。很谢谢你,没别的意思,我是新手看着你这个搭的,可是把那个包替换掉后出了别的错误,我确信我每一步都跟你一样。下面是贴图

运行出错

运行出错
回复

使用道具 举报

Jeelon 发表于 2016-8-8 10:06:27
Nutch2.2.1里面有Crawler类?你这个是 1.7的吧。楼上莫名点赞。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条