Hadoop管道程序抛出的EOFException

时间:2010-12-09 05:25:28

标签: hadoop pipe eofexception

首先,我是Hadoop的新手。

我有一个小的Hadoop管道程序抛出java.io.EOFException。该计划需要 输入一个小文本文件并使用hadoop.pipes.java.recordreader和hadoop.pipes.java.recordwriter。 输入非常简单,如:

1 262144 42.8084 15.9157 4.1324 0.06 0.1

但是,Hadoop会抛出一个EOFException,我看不出原因。下面是 堆栈跟踪:

10/12/08 23:04:04 INFO mapred.JobClient: Running job: job_201012081252_0016
10/12/08 23:04:05 INFO mapred.JobClient:  map 0% reduce 0%
10/12/08 23:04:16 INFO mapred.JobClient: Task Id : attempt_201012081252_0016_m_000000_0, Status : FAILED 
java.io.IOException: pipe child exception
    at org.apache.hadoop.mapred.pipes.Application.abort(Application.java:151)
    at org.apache.hadoop.mapred.pipes.PipesMapRunner.run(PipesMapRunner.java:101)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:358)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
    at org.apache.hadoop.mapred.Child.main(Child.java:170)
Caused by: java.io.EOFException
    at java.io.DataInputStream.readByte(DataInputStream.java:267)
    at org.apache.hadoop.io.WritableUtils.readVLong(WritableUtils.java:298)
    at org.apache.hadoop.io.WritableUtils.readVInt(WritableUtils.java:319)
    at org.apache.hadoop.mapred.pipes.BinaryProtocol$UplinkReaderThread.run(BinaryProtocol.java:114)

顺便说一下,我是在完全分布式模式(一个有3个工作节点的集群)上运行它。

任何帮助表示赞赏!感谢

2 个答案:

答案 0 :(得分:1)

经验教训:一定要尽量确保自己的程序中没有错误。

答案 1 :(得分:0)

此堆栈跟踪通常表示工作者计算机中的可用文件描述符用完。这非常常见,记录稀少,而且正是为什么我在这个主题上有两个related questions

如果您对所有计算机都具有root访问权限,则应考虑通过编辑/etc/sysctl.conf来提高Hadoop用户的文件描述符限制:

(Add) fs.file-max = 4096

或发出:

ulimit -Sn 4096
ulimit -Hn 4096

无限广告。提高此限制的一般信息为available here.

然而,从长远规划的角度来看,这种策略有些虚假。如果你碰巧发现了关于这个问题的更多信息,也许你可以help me help you help us all? [谢谢你,GLaDOS。 -Ed]

(编辑:见下面的评论。)