Я столкнулся с этой проблемой, когда изменил свою программу на использование метода saveAsHadoopFile для повышения производительности, и в этом случае я не могу напрямую использовать API DataFrame. см. Проблему
Причина, по которой это может произойти, в основном состоит в том, что, как сказал Zohar , метод saveAsHadoopFile с MultipleTextOutputFormat фактически не позволяет нескольким программам, работающим одновременно, сохранять файлы в одном каталоге. Как только программа завершится, она удалит общий каталог _tevent, в котором все еще нуждаются другие, я не уверен, что это ошибка в M / R API. ( 2.6.0-cdh5.12.1 )
Вы можете попробовать это решение ниже, если вы не можете изменить дизайн своей программы:
Это исходный код FileOutputCommitter в M / R API: (вы должны загрузить соответствующую версию)
package org.apache.hadoop.mapreduce.lib.output;
public class FileOutputCommitter extends OutputCommitter {
private static final Log LOG = LogFactory.getLog(FileOutputCommitter.class);
/**
* Name of directory where pending data is placed. Data that has not been
* committed yet.
*/
public static final String PENDING_DIR_NAME = "_temporary";
Изменения:
"_temporary"
Кому:
System.getProperty("[the property name you like]")
Компилирует один класс со всеми необходимыми зависимостями, затем создает jar с тремя выходными файлами классов и помещает jar в ваш classpath. (сделайте это до оригинальной банки)
Или вы можете просто поместить исходный файл в ваш проект.
Теперь вы можете настроить временный каталог для каждой программы, установив другое системное свойство.
Надеюсь, это поможет вам.