Как почистить фляги на моем клиенте hadoop
Проблема в том, что файлы jar в каталоге / tmp (моего клиента) не очищаются после выполнения работы. У меня есть следующий (упрощенный) код:
public void run() throws IOException {
PigServer pigServer = null;
try {
StringBuilder sb = new StringBuilder();
// ... some methods that add to the sb ...
pigServer = new PigServer(ExecType.MAPREDUCE);
pigServer.setBatchOn();
pigServer.registerQuery(sb.toString());
// execute and discard the batch
pigServer.executeBatch();
pigServer.discardBatch();
} finally {
if (pigServer != null) {
pigServer.shutdown();
}
}
}
Насколько я понимаю, pigServer.shutdown() должен удалить все мои временные файлы в / tmp. Однако после выполнения задания в моем каталоге / tmp будет полно файлов Job9196419177728780689.jar и пустого подкаталога pig8776538161976852388tmp.
При отладке я вижу, что удаляется много заданий в (удаленном) кластере hadoop, плюс одна попытка удаления /tmp/temp2071202241 (local). Кажется, это не существующий каталог в моей локальной системе.
Файлы действительно удаляются после того, как я выключаю ВМ, но это, очевидно, не то, что я хочу делать после каждой работы. Я что-то пропустил?
Изменить: я не единственный с этой проблемой, проблема подана в https://issues.apache.org/jira/browse/PIG-3338
Изменить 2: Возможное решение (не мной): http://www.lopakalogic.com/articles/hadoop-articles/pig-keeps-temp-files/
1 ответ
Ваш анализ верен. Свинья создает временный файл File.createTempFile
и использовать File.deleteOnExit
удалить его, когда виртуальная машина выключается. Смотрите код здесь.
Как насчет запуска виртуальной машины для каждого скрипта Pig?