Изменить путь к каталогу spark _temporary

#apache-spark #hadoop #pyspark #partitioning

#apache-spark #hadoop #pyspark #разделение

Вопрос:

Возможно ли изменить _temporary каталог, в котором spark сохраняет свои временные файлы перед записью?

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

Возможно ли это?

Комментарии:

1. вы нашли способ?

2. Нет, кажется, нет способа сделать это

3. в конце концов, мне пришлось переопределить FileOutputCommitter, чтобы заставить его работать.

4. @ArkadiyVerman не могли бы вы пояснить, как вы это сделали?

Ответ №1:

Невозможно использовать FileOutputCommitter по умолчанию из-за его реализации, FileOutputCommitter создает подкаталог $ {mapred.output.dir} /_temporary, в который записываются файлы, а затем, после фиксации, перемещаются в $ {mapred.output.dir} .

В итоге вся временная папка была удалена. Когда два или более заданий Spark имеют один и тот же выходной каталог, взаимное удаление файлов неизбежно.

В конце концов, я загрузил org.apache.hadoop.mapred.FileOutputCommitter и org.apache.hadoop.mapreduce.lib.output.В FileOutputCommitter (вы можете назвать его YourFileOutputCommitter) внесены некоторые изменения, позволяющие _temporaly переименовывать

в вашем драйвере вам нужно будет добавить следующий код:

 val conf: JobConf = new JobConf(sc.hadoopConfiguration)
conf.setOutputCommitter(classOf[YourFileOutputCommitter])


// update temporary path for committer 
YourFileOutputCommitter.tempPath = "_tempJob1"
  

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

Обновить

Я создал короткий пост в нашем техническом блоге, в нем есть более подробная информация https://www.outbrain.com/techblog/2020/03/how-you-can-set-many-spark-jobs-write-to-the-same-path /

Комментарии:

1. в пользовательском коммиттере есть метод без возвращаемого типа, компиляция завершается с ошибкой .

2. как мне установить это в коде spark scala, у меня нет метода conf.setOutputCommitter(classOf[YourFileOutputCommitter]).

3. он все еще там hadoop.apache.org/docs/stable/api/org/apache/hadoop/mapred /…