EOFException в org.apache.hadoop.io.SequenceFile$Reader.init(SequenceFile.java:1508)

Я пытался запустить пример умножения матриц, представленный г-ном Норштадтом по следующей ссылке http://www.norstad.org/matrix-multiply/index.html. Я могу успешно запустить его с помощью hadoop 0.20.2, но я пытался запустить его с помощью hadoop 1.0.3, но получаю следующую ошибку. Это проблема с моей конфигурацией Hadoop или проблема совместимости в коде, который был написан автором в Hadoop 0.20. Также, пожалуйста, подскажите, как я могу исправить эту ошибку в любом случае. Вот ошибка, которую я получаю.

in thread "main" java.io.EOFException
        at java.io.DataInputStream.readFully(DataInputStream.java:180)
        at java.io.DataInputStream.readFully(DataInputStream.java:152)
        at org.apache.hadoop.io.SequenceFile$Reader.init(SequenceFile.java:1508)
        at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1486)
        at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1475)
        at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1470)
        at TestMatrixMultiply.fillMatrix(TestMatrixMultiply.java:60)
        at TestMatrixMultiply.readMatrix(TestMatrixMultiply.java:87)
        at TestMatrixMultiply.checkAnswer(TestMatrixMultiply.java:112)
        at TestMatrixMultiply.runOneTest(TestMatrixMultiply.java:150)
        at TestMatrixMultiply.testRandom(TestMatrixMultiply.java:278)
        at TestMatrixMultiply.main(TestMatrixMultiply.java:308)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:156)

заранее спасибо

С уважением, вакас


person waqas    schedule 25.05.2012    source источник
comment
Если он создает проблемы из-за того, что не может прочитать заголовок файла последовательности, почему бы вам не сгенерировать файл заново? Или просто использовать 20.2?   -  person Thomas Jungblut    schedule 25.05.2012
comment
Томас, да, конечно, 20.2 — это вариант, но я хотел использовать его с более новой версией (1.0.3). И если это все нормально работает с 20.2, значит, метод записи или чтения файлов последовательностей правильный (по крайней мере, для 20.2). Как вы думаете, может ли быть разница в поддержке чтения и записи файлов последовательности в 20.2 и 1.0.3?   -  person waqas    schedule 29.05.2012
comment
Эта ошибка может возникнуть только в том случае, если размер входного файла меньше 4 байтов. Можете ли вы указать размер входного файла (файлов) в исходном вопросе?   -  person Chris White    schedule 30.05.2012
comment
@ Крис, спасибо .. У меня проблема. На самом деле он читает файл _SUCCEESS вместе с другими при использовании метода FileSystem.listStatus. Не могли бы вы рассказать мне, как фильтровать файлы _SUCCESS при использовании listStatus. Спасибо   -  person waqas    schedule 30.05.2012
comment
Я вижу, вы сами ответили на свой вопрос - stackoverflow.com/questions/10817824/, опубликуйте ответ со ссылкой на этот вопрос, чтобы пометить этот вопрос как отвеченный и помочь тем, кто наткнется на этот вопрос в будущем   -  person Chris White    schedule 30.05.2012
comment
спасибо Крису и Томасу за вашу помощь. Я написал это в ответах.   -  person waqas    schedule 30.05.2012


Ответы (2)


Я также столкнулся с той же проблемой, в моем случае это давало исключение, потому что я не закрыл объект SequenceFile.Writer. Проблема была решена, когда я добавил оператор sequenceFileWriter.close() в свой код.

Кроме того, если входные данные в программе MapReduce являются выходными данными какой-либо предыдущей программы MapReduce, вам необходимо явно написать код для игнорирования файла _SUCCESS.

PS: я использую конфигурацию CHD4 Cloudera Hadoop.

person Neo    schedule 30.04.2013

Я понял это правильно. На самом деле он не фильтровал файл _SUCCESS автоматически, и из-за чтения этого файла журнала возникало исключение, упомянутое в вопросе. Я отфильтровал файлы, и теперь все работает нормально. Вот ссылка, как я отфильтровал файлы Файлы журнала фильтрации (_success и _log) в FileSystem.liststatus

person waqas    schedule 30.05.2012