Hadoop Streaming пропускает очень большие записи - PullRequest
0 голосов
/ 30 июня 2011

У меня есть потоковая программа hadoop, в которой reader.readline () имеет исключение OutOfMemoryException, если переданная строка слишком велика (более 20M или около того).Есть ли способ сказать Hadoop, чтобы не передавать в записи, которые превышают определенный размер?Слишком большие записи - 1 на миллион.Я бы предпочел не использовать опцию пропуска плохих записей ...

Я также пытался использовать этот код http://code.google.com/p/owasp-esapi-java/issues/attachmentText?id=183&aid=-7134623167843514645&name=BoundedBufferedReader.java вместо reader.readline (), но он слишком медленный, я думаю, потому чтоон читает только один символ за раз.

1 Ответ

0 голосов
/ 03 июля 2011

Это не проблема с Hadoop, это проблема с тем, как вы читаете строку.

reader.readline(), вероятно, читает по одному символу за раз, потому что ему нужно выяснить, где находится конец строки. Поэтому проверка символ за символом, вероятно, не будет намного медленнее. Вы можете читать по одному символу за раз, вставлять его обратно в какой-то список или буфер. Если это становится слишком длинным, игнорируйте линию и продолжайте. Как только вы видите символ новой строки, вы можете идти.

...