2011-06-29 61 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()可能一次讀取一個字符,因爲它需要找出行結束位置。因此,逐個檢查字符可能不會太慢​​。您可以一次讀取一個字符,將其推回到某種列表或緩衝區中。如果太長,請忽略該行並繼續。一旦你看到換行符,你很好走。