如何清理我的hadoop客户端上的jar作业

时间:2013-07-01 07:54:29

标签: hadoop apache-pig

问题是,在完成作业后,/ 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/

1 个答案:

答案 0 :(得分:1)

您的分析是正确的。 Pig通过File.createTempFile创建一个临时文件,并在VM向下移动时使用File.deleteOnExit将其删除。请参阅代码here

如何为每个Pig脚本启动VM?

相关问题