Файлы остаются в состоянии.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
        }
    });
Другие вопросы по тегам