nutch 无法在 eclipse下调试的问题
来源:互联网 发布:肝功能包括乙肝吗 知乎 编辑:程序博客网 时间:2024/05/29 18:15
系统是 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
0 0
- 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下的安装
- Hadoop学习笔记
- Android SDK更新 Connection to http://dl-ssl.google.com refused 解决方法
- 内存对齐(内存中的数据对齐)、大端模式及小端模式
- 2014年8月接触华为,浪潮,曙光服务器安装系统遇到的一些事情
- 程序设计
- nutch 无法在 eclipse下调试的问题
- C++容器vector和map的正确删除方法
- POJ3352-Road Construction
- ufldl学习笔记与编程作业:Vectorization(向量化/矢量化)
- Hibernate对象状态
- 工厂模式
- windows程序设计-第七章 BLOKOUT1 备注
- const修饰符
- 学车心得