我有一个hadoop流程序,其中如果传入的行太大(超过20M左右),reader.readline()会出现OutOfMemoryException。有没有办法告诉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()
可能一次读取一个字符,因为它需要找出行尾的位置。因此,逐个字符检查可能不会慢得多。您可以一次读取一个字符,将其推回某种列表或缓冲区。如果它太长,请忽略该行并继续前进。一旦你看到换行符,你就可以去了。