EOFException, создаваемое программой Hadoop pipe - PullRequest
1 голос
/ 09 декабря 2010

Прежде всего, я новичок в Hadoop.

У меня есть небольшая программа Hadoop pipe, которая генерирует исключение 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 ]

1 голос
/ 10 декабря 2010

Извлеченные уроки: во что бы то ни стало, постарайтесь убедиться, что в вашей программе нет ошибок.

0 голосов
/ 09 декабря 2010

Эта трассировка стека обычно указывает на исчерпание доступных файловых дескрипторов на ваших рабочих машинах.Это очень часто встречается, редко документируется, и именно поэтому у меня есть два связанных вопроса на эту тему.

Если у вас есть root-доступ на всех компьютерах, выследует рассмотреть возможность увеличения лимита дескриптора файла для вашего пользователя Hadoop, отредактировав /etc/sysctl.conf:

(Add) fs.file-max = 4096

или введя:

ulimit -Sn 4096
ulimit -Hn 4096

Ad Infinitum.Общая информация для повышения этого лимита доступна здесь: .

Однако, с точки зрения долгосрочного планирования, эта стратегия является несколько ложной.Если вам случится узнать больше информации о проблеме, возможно, вы сможете помочь мне помочь вам всем нам помочь? [Спасибо, GLaDOS.-Ed]

(Изменить: см. Следующий комментарий.)

...