在开发使用STORE命令的 Pig 脚本时,我必须为每次运行删除输出目录,否则脚本会停止并提供:
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 Latin Reference 中,我找到了 shell 命令调用程序fs。不幸的是,只要任何事情产生错误,Pig 脚本就会中断。所以我不能使用
fs -rmr foo/bar
(即递归删除)因为如果目录不存在它会中断。有那么一刻我想我可以用
fs -test -e foo/bar
这是一个测试,不应该打破,或者我想。但是,Pig 再次将test
不存在目录上的返回代码解释为失败代码并中断。
Pig 项目有一个JIRA 票,它解决了我的问题,并为STORE命令建议了一个可选参数OVERWRITE或FORCE_WRITE 。无论如何,我出于必要使用 Pig 0.8.1,并且没有这样的参数。