При разработке сценариев Pig, использующих команду STORE, я должен удалить выходной каталог для каждого запуска или script и предлагает:
2012-06-19 19:22:49,680 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 6000: Output Location Validation Failed for: 'hdfs://[server]/user/[user]/foo/bar More info to follow:
Output directory hdfs://[server]/user/[user]/foo/bar already exists
Итак, я ищет решение in-Pig для автоматического удаления каталога, а также тот, который не задыхается, если каталог не существует во время вызова.
В латинском справочнике Pig я обнаружил команду shell shell invoker fs. К сожалению, Pig script ломается всякий раз, когда что-либо вызывает ошибку. Поэтому я не могу использовать
fs -rmr foo/bar
(то есть удаляем рекурсивно), так как он ломается, если каталог не существует. На мгновение я подумал, что могу использовать
fs -test -e foo/bar
который является тестом и не должен ломаться или так я думал. Однако Pig снова интерпретирует test
код возврата в несуществующей директории как код отказа и разрывается.
Существует JIRA ticket для проекта Pig, который решает мою проблему и предлагает дополнительный параметр OVERWRITE или FORCE_WRITE для команды STORE. Во всяком случае, я использую Pig 0.8.1 по необходимости и нет такого параметра.