问题是,在完成作业后,/ tmp目录(我的客户端)中的jar文件没有被清除。 我有以下(简化)代码:
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(本地)。 这似乎不是我本地系统上的现有目录。
关闭虚拟机后,文件会被删除,但这显然不是我在每次工作后都想做的事情。 我错过了什么吗?
编辑:我不是唯一遇到此问题的人,问题是在https://issues.apache.org/jira/browse/PIG-3338
下提交的编辑2:可能的解决方案(不是我):http://www.lopakalogic.com/articles/hadoop-articles/pig-keeps-temp-files/
答案 0 :(得分:1)
您的分析是正确的。 Pig通过File.createTempFile
创建一个临时文件,并在VM向下移动时使用File.deleteOnExit
将其删除。请参阅代码here。
如何为每个Pig脚本启动VM?