2015-04-27 5 views
2

Я выполняю профилирование JVM для задач Hadoop с использованием Java-агента, как в https://github.com/etsy/statsd-jvm-profiler. Профайлер регистрирует крючки остановки, которые сохраняют профили в HDFS. Но в настоящее время крючки прекращаются, прежде чем они смогут закончить. Я уверен, что они выполнены, потому что я вижу некоторые выходы из перехватов.JVM shutdown hook неожиданно завершает работу

ответ

2

Вы видите ошибки IOExceptions или FileSystem, которые были закрыты. Если это так, то может помочь отключение hdfs hookdown.

Клиент Hdfs также регистрирует крюки остановки, чтобы иметь возможность правильно закрыть соединения hdfs. Не гарантируется порядок, в котором вызывается блокировка выключения. Ключи Hdfs могут быть вызваны перед другими. Вы можете попробовать отключить крюки остановки. Это также означает, что вам нужно будет закрыть соединение в коде.

Для создания экземпляра HDFS клиента:

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

В отключающей крючке:

fileSystem.close(); 
+0

Я думаю, что это проблема. Потому что то, что я делаю на крючке, - это написать короткую строку в файл. Но если я установил fs.automatic.close на false, как вручную закрыть соединение HDFS вручную на моем крючке? Я не мог найти его нигде. Большое спасибо! – Zhi

1

По JavaDoc:

Shutdown крючки должны также закончить свою работу быстро. Когда программа вызывает выход, ожидается, что виртуальная машина будет быстро отключена и выйдет. ... Поэтому нецелесообразно предпринимать попытку любого взаимодействия с пользователем или выполнить долговременное вычисление в крюке отключения .

Это означает, что у вас есть меньше одной секунды, чтобы выполнить свою задачу (точное значение действительно зависит от платформы). Также стоит отметить, что:

В редких случаях виртуальная машина может прервать, то есть перестают работать без остановки чисто. ... Если виртуальная машина прерывается, то не может быть гарантирована, будут ли выполняться какие-либо выключения крюков.

Смежные вопросы