JVM关闭挂钩意外退出

时间:2015-04-27 20:05:17

标签: java hadoop jvm

我正在使用Java代理对Hadoop任务进行JVM分析,如https://github.com/etsy/statsd-jvm-profiler中所述。探查器注册关闭挂钩,将配置文件保存到HDFS。但是目前钩子在它们完成之前就被终止了。我确定它们已被执行,因为我可以从钩子中看到一些输出。

2 个答案:

答案 0 :(得分:2)

您是否看到任何IOExceptions或FileSystem已关闭错误。如果是这样,那么禁用hdfs shutdown hooks可以提供帮助。

Hdfs Client还注册了shutdown hooks,以便能够正确关闭hdfs连接。不保证调用关闭挂钩的顺序。可以在其他人之前调用Hdfs钩子。您可以尝试禁用关闭挂钩。这也意味着您需要关闭代码中的连接。

创建hdfs客户端实例:

Configuration conf = new Configuration();
conf.setBoolean("fs.automatic.close", false);
filesystem = FileSystem.get(nnURI, conf)

在关机钩子中:

fileSystem.close();

答案 1 :(得分:1)

根据JavaDoc:

  

关机挂钩也应该快速完成工作。当一个程序   调用退出期望就是那个   虚拟机会立即关闭并退出。 ... 因此不宜尝试   任何用户交互或执行长时间运行的计算   关机钩。

这意味着您完成任务的时间不到一秒(确切的值实际上取决于平台)。另外值得注意的是:

  

在极少数情况下,虚拟机可能中止,即停止运行而不会干净地关闭。 ...如果虚拟机中止,则无法保证是否将运行任何关闭挂钩