jvm关闭挂钩意外退出

luaexgnf  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(328)

我正在使用java代理为hadoop任务进行jvm评测,如https://github.com/etsy/statsd-jvm-profiler. profiler注册shutdown hook,将概要文件保存到hdfs。但是现在钩子在完成之前就被终止了。我确信它们是被执行的,因为我可以看到钩子的一些输出。

mftmpeh8

mftmpeh81#

根据javadoc:
关闭钩子也应该很快完成它们的工作。当程序调用exit时,预期虚拟机将立即关闭并退出。。。因此,在关闭挂钩中尝试任何用户交互或执行长时间运行的计算是不可取的。
这意味着你只有不到一秒钟的时间来完成你的任务(具体值取决于平台)。同样值得注意的是:
在极少数情况下,虚拟机可能会中止,也就是说,在没有完全关闭的情况下停止运行。。。如果虚拟机中止,则无法保证是否会运行任何关闭挂钩。

68bkxrlz

68bkxrlz2#

您是否看到任何ioexceptions或filesystem closed错误。如果是这样,那么禁用hdfs shutdown hooks会有所帮助。
hdfs客户机还注册了shutdown hook,以便能够正确地关闭hdfs连接。不能保证关闭挂钩的调用顺序。hdfs钩子可能在其他钩子之前被调用。您可以尝试禁用关闭挂钩。这也意味着您需要关闭代码中的连接。
要创建hdfs客户端示例,请执行以下操作:

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

在关机挂钩中:

fileSystem.close();

相关问题