nutch 无法在 eclipse下调试的问题
来源:互联网 发布:4万亿计划 知乎 编辑:程序博客网 时间:2024/06/09 23:37
系统是 ubuntu-10.04
IDE用的是eclipse
这时候出现了一个匪夷所思的现象,在终端中运行nutch,完全没有任何问题。但是,一旦转到eclipse下调试,nutch就跑不起来了,报出的错误如下:
java.io.IOException: Expecting a line not the end of stream
at org.apache.hadoop.fs.DF.parseExecResult(DF.java:109)
at org.apache.hadoop.util.Shell.runCommand(Shell.java:179)
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:321)
at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:124)
at org.apache.hadoop.mapred.MapOutputFile.getSpillFileForWrite(MapOutputFile.java:107)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:930)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:842)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:138)
在网上查了一通后,基本都是在windows下遇到这种问题,那是因为windows下没有df命令。但是,我的是在ubuntu上发生的,这两种情况不是一回事。
我跟踪代码到org.apache.hadoop.fs.DF.parseExecResult,观察了此函数的传入参数 BufferedReader lines, lines里面显示的内容是乱码,但是确实是df正确执行后的结果。这时候,我有点明白了,本来是两行的DF结果,由于乱码,变成了一行,这才导致输出上面的错误。
解决方法是:修改 DebugConfigurations,将commen选项页中的console encoding ,设为 utf-8.以前的值是 Default-Inherited,由于我把项目默认编码设成了gbk,所以此时的default就是 gbk
至此,真相大白: DF命令本身运行的很正常,没有出错,不像网上的韩国和日本的有些人说是权限问题导致DF失败,只是这个结果被输出到eclipse的console后,由于console的编码设置问题,结果变质了,最终导致parseExecResult异常。
教训惨痛,花费了整整一天的时间,看了中,日,韩和英几种语言的二十多篇技术Blog。没想到是自己擅自修改项目编码带来的问题。顺便提一句,装了cygwin后,我在windows系统下调试倒是一帆风顺,没有遇见这个问题.
不过还是想给hadoop项目的开发提点小建议,如果可能的话,最好重新设计一下DF和DF相关的类,争取能自动识别命令结果的编码格式,这样就不会因为这种问题出错。
项目初始的时候是在windows下开发,用的也是eclispe
IDE用的是eclipse
这时候出现了一个匪夷所思的现象,在终端中运行nutch,完全没有任何问题。但是,一旦转到eclipse下调试,nutch就跑不起来了,报出的错误如下:
java.io.IOException: Expecting a line not the end of stream
at org.apache.hadoop.fs.DF.parseExecResult(DF.java:109)
at org.apache.hadoop.util.Shell.runCommand(Shell.java:179)
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:321)
at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:124)
at org.apache.hadoop.mapred.MapOutputFile.getSpillFileForWrite(MapOutputFile.java:107)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:930)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:842)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:138)
在网上查了一通后,基本都是在windows下遇到这种问题,那是因为windows下没有df命令。但是,我的是在ubuntu上发生的,这两种情况不是一回事。
我跟踪代码到org.apache.hadoop.fs.DF.parseExecResult,观察了此函数的传入参数 BufferedReader lines, lines里面显示的内容是乱码,但是确实是df正确执行后的结果。这时候,我有点明白了,本来是两行的DF结果,由于乱码,变成了一行,这才导致输出上面的错误。
解决方法是:修改 DebugConfigurations,将commen选项页中的console encoding ,设为 utf-8.以前的值是 Default-Inherited,由于我把项目默认编码设成了gbk,所以此时的default就是 gbk
至此,真相大白: DF命令本身运行的很正常,没有出错,不像网上的韩国和日本的有些人说是权限问题导致DF失败,只是这个结果被输出到eclipse的console后,由于console的编码设置问题,结果变质了,最终导致parseExecResult异常。
教训惨痛,花费了整整一天的时间,看了中,日,韩和英几种语言的二十多篇技术Blog。没想到是自己擅自修改项目编码带来的问题。顺便提一句,装了cygwin后,我在windows系统下调试倒是一帆风顺,没有遇见这个问题.
不过还是想给hadoop项目的开发提点小建议,如果可能的话,最好重新设计一下DF和DF相关的类,争取能自动识别命令结果的编码格式,这样就不会因为这种问题出错。
项目初始的时候是在windows下开发,用的也是eclispe
- nutch 无法在 eclipse下调试的问题
- nutch 无法在 eclipse下调试的问题
- Nutch在Eclipse上的开发调试环境配置手册
- 在Eclipse中调试运行Nutch
- 【Eclipse Android】Mac下eclipse无法连接手机调试问题
- 在Eclipse下编译和运行Nutch
- 在eclipse下编译运行nutch
- 如何解决eclipse生成的apk无法在真机上调试安装的问题
- mac os 10.10 下使用Eclipse调试,Android Device Chooser无法显示真机的问题
- Vista下无法调试VC的问题.
- 在vs2008在vista下调试web页面,页面无法显示的问题
- Eclipse中加载Nutch遇到的问题
- 在eclipse下的maven工程调试
- mac 下Eclipse无法Debug的问题
- 解决vs2008在vista下本地调试为无法打开网页的问题
- 关于在Eclipse(myeclipse)中加载Nutch中遇到的问题
- nutch 0.9在Windows下的安装
- nutch 0.9在Windows下的安装
- win7系统下服务程序log4cxx不能输出日志
- java 中文输出乱码问题
- [android]androguard相关介绍
- C++ 在DLL中使用std::string乱码的问题
- [linux]watch命令
- nutch 无法在 eclipse下调试的问题
- ASP.NET未处理异常(Unhandled Exception)调试试验
- [java]javap命令行反编译
- protobuf 使用 repeated 出错
- [性能测试]sysstat iptraf 相关分析工具
- 关于MessageBox的非阻塞
- each()循环 迭代
- [android]快速查看apk内androidmanifest文件内容
- 天天团购注册页面空白问题