Файлы остаются в состоянии.avro.tmp в задании Spark?
У меня есть работа Spark, которая читает миллионы записей из HDFS, обрабатывает их и записывает обратно в HDFS в формате AVRO. Заметил, что многие файлы (записанные) остаются в состоянии.avro.tmp.
Я использую Kite SDK для записи данных в формате AVRO. Среда CDH 5.5.
Может ли это быть из-за того, что задание Spark завершается, как только выполняется чтение записей и отправка их исполнителям (что фактически делает запись?)
Если это так, как я могу гарантировать, что задание не завершится, пока все.tmp не будут преобразованы в.avro? Или в чем еще может быть причина?
1 ответ
Это стало работать после того, как я закрыл писатель в самом методе call() после итерации по всем записям. Основной недостаток здесь заключается в том, что для каждого раздела, который я получаю, пишется новый автор, нужно найти лучший способ.
df.toJavaRDD().foreachPartition(new VoidFunction<Iterator<Row>>() {
@Override
public void call(Iterator<Row> iterator) throws Exception {
final DatasetWriter writer = // obtain writer
while (iterator.hasNext()) {
// process the records; write to HDFS using writer
}
writer.close(); // this ensures that .avro.tmp is converted to .avro
}
});