Как почистить фляги на моем клиенте 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?

Другие вопросы по тегам