问题是作业完成后,/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中的所有临时文件。但是,作业完成后,my/tmp目录中充满了job9196419177728780689.jar文件和一个空pig8776538161976852388tmp子目录。
调试时,我看到(远程)hadoop集群上的很多作业都被删除了,还有一次尝试删除/tmp/temp207120241(本地)。这似乎不是我本地系统上的现有目录。
文件确实会在我关闭虚拟机后被删除,但这显然不是我每次作业后都想做的。我错过什么了吗?
编辑:我不是唯一一个有这个问题的人,这个问题是根据https://issues.apache.org/jira/browse/pig-3338
编辑2:可能的解决方案(不是由我):http://www.lopakalogic.com/articles/hadoop-articles/pig-keeps-temp-files/
1条答案
按热度按时间ni65a41a1#
你的分析是正确的。pig创建一个临时文件
File.createTempFile
使用File.deleteOnExit
在vm关闭时删除它。请看这里的代码。为每个pig脚本启动一个vm怎么样?