2011-06-29 27 views
0

我有一个hadoop流媒体程序,其中reader.readline()如果传入的行太大(超过20M左右),会出现OutOfMemoryException。有没有办法告诉hadoop不通过超过一定大小的记录?太大的记录是百万分之一。我宁可不使用跳过坏记录选项...Hadoop数据流丢失非常大的记录

我也试过使用此代码http://code.google.com/p/owasp-esapi-java/issues/attachmentText?id=183&aid=-7134623167843514645&name=BoundedBufferedReader.java而不是reader.readline(),但它太慢了,我认为,因为它只读取一个字符在一次。

+0

我添加了一个似乎减轻了问题的交换,但我原来的问题仍然存在。 –

回答

0

这不是Hadoop的问题,它与您阅读该行的方式有关。

reader.readline()可能一次读取一个字符,因为它需要找出行结束位置。因此,逐个检查字符可能不会太慢​​。您可以一次读取一个字符,将其推回到某种列表或缓冲区中。如果太长,请忽略该行并继续。一旦你看到换行符,你很好走。