В конвейере данных задание Spark преобразует файлы последовательности в файлы паркета. Оригинальные файлы последовательности написаны KafkaConnect, который читает данные из тем Кафки.
Есть несколько файлов (2-3 файла в день), которые не может прочитать задание. Кидает
java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:197)
at org.apache.hadoop.io.DataOutputBuffer$Buffer.write(DataOutputBuffer.java:70)
at org.apache.hadoop.io.DataOutputBuffer.write(DataOutputBuffer.java:120)
at org.apache.hadoop.io.SequenceFile$Reader.next(SequenceFile.java:2446)
at org.apache.hadoop.io.SequenceFile$Reader.next(SequenceFile.java:2578)
Я могу повторить ту же ошибку с помощью следующего метода Java:
reader = new SequenceFile.Reader(new Configuration(),
SequenceFile.Reader.file(input));
LongWritable key = new LongWritable();
Text val = new Text();
while (reader.next(key, val)) {
}
reader.close();
Проблема в том, что я могу правильно читать поврежденные файлы из команды hdfs:
hdfs dfs -text <file> | text
Но почему он выбрасывает исключение из кода Java?