您的位置:首页 > 编程语言 > Java开发

Problems when building and running Nutch in eclipse

2012-08-13 13:06 435 查看
最近准备开始学习开源项目Nutch。首先要做的就是将代码checkout出来,生成并运行。我使用的是Windows环境下的Eclipse Juno IDE。在学习的过程中遇到了一些问题,在网上寻求答案时发现了一些问题是比较常见的问题,这里举出几例作为参考并共与大家同学习。

1.“Failed to set permissions to path:”问题

从网上的解决方案综合来看,这个问题与hadoop-core包的版本有关,使用较新的版本时会出现,旧版本的非稳定版也会出现。我使用的是hadoop-0.20.2-core.jar。

2.chmod相关问题

该问题是由于chmod是unix系统下的命令,在windows下使用时要安装Cygwin来模拟,或至少要有cygwin下的chmod.exe,可参考这篇文章:http://javaprotlib.sourceforge.net/packages/io/howtofixhadoop.html 。另外,如果运行时仍找不到chmod,可能是环境变量配置失效,则可以在Eclipse->Run->Run
Configurations...->Environment选项卡,添加Path变量,值设置为chmod的路径。

3.Job Failed问题

引起这个问题的原因可能很多。具体原因可以查看/logs/hadoop.log的内容。我遇到的错误为:

java.io.IOException: Cannot run program "bash": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at org.apache.hadoop.util.Shell.runCommand(Shell.java:149)
at org.apache.hadoop.util.Shell.run(Shell.java:134)
at org.apache.hadoop.fs.DF.getAvailable(DF.java:73)
at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathForWrite(LocalDirAllocator.java:329)
at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:124)
at org.apache.hadoop.mapred.MapOutputFile.getOutputFileForWrite(MapOutputFile.java:61)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.mergeParts(MapTask.java:1469)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:1154)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:359)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:177)

Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
at java.lang.ProcessImpl.start(ProcessImpl.java:30)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 11 more

这里的bash仍然是cygwin中的程序,如果添加%CYGWIN_HOME%\bin到Path变量后仍无效(在命令行中输入bash查看),则可以效仿问题2中的方法在Eclipse的运行配置的环境变量选项中设置。

刚开始学习Nutch会遇到很多问题,尤其是在Windows环境下,并且对Hadoop等项目不甚了解时更是如此,不过这样可以锻炼独立思考和解决问题的能力。对于较大规模的开源项目,在学习时贵有耐心和信心,循序渐进,必有所成。

日后遇到新问题会补充进来,欢迎大家指正。

-----------------------------------------------------------------------------------------------------

2012年8月14日

今天在做爬取时遇到一个新问题:

org.apache.hadoop.mapred.InvalidInputException: Input path does not exist:\NewWS\Nutch\crawl\segments\20120814230156\parse_data

去该路径看了一下,parse_data文件夹确实没有生成。在网上论坛查了一下,结论是爬取过程中的错误所致。解决方案是将crawl目录删除,重新开始爬取即可。

另外在爬取某些网页时会遇到这样的提示:

Failed with: java.net.SocketException: Software caused connection abort: recv failed

这个错误的原因通常是:客户端或者服务器端有一端已经关闭,而另一端则以为连接还在的,在发送或接受请求的时候就会报这个错误。目前,我还没有研究具体的爬取代码部分,待今后详细学习调查。

补充一点:在linux系统(我用的是Ubuntu12)下运行crawl命令没有出现上述任何问题。

-----------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐