Порт блокировки процесса зомби при перезапуске Hadoop (Secondary) Namenode

У меня странные проблемы с Hadoop Namenode и Secondary Namenode. Наш кластер HDFS работает без сбоев большую часть времени. Но время от времени либо Первичный Наменод замирает (разбивая весь кластер), либо Вторичный Наменод замирает и перестает создавать контрольные точки.

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

# service hadoop-namenode restart
 * Stopping Hadoop namenode: 
no namenode to stop
 * Starting Hadoop namenode: 
starting namenode, logging to /var/log/hadoop/hadoop-hdfs-namenode-HOST.out
Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 26100; nested exception is: 
        java.net.BindException: Address already in use

Тем не менее, проверка вывода ps auxwНаменоде больше не работает. Проверка, какой процесс блокирует порт, который он получает:

# netstat -tulpen | grep 26100
tcp        0      0 0.0.0.0:26100           0.0.0.0:*               LISTEN      6001       20067       -

что не помогает вообще. Это говорит, порт используется, но процесс -,

ss больше не помогает:

# ss -apne | grep 26100
tcp    LISTEN     34     50                     *:26100                 *:*      uid:6001 ino:20067 sk:000015c1 <->
tcp    CLOSE-WAIT 224    0              127.0.0.1:26100         127.0.0.1:56770  ino:0 sk:00000527 -->
...
tcp    CLOSE-WAIT 13     0              127.0.0.1:26100         127.0.0.1:56762  ino:0 sk:0000078f -->
tcp    CLOSE-WAIT 17     0              127.0.0.1:26100         127.0.0.1:56772  ino:0 sk:000007b1 -->

Единственное, что обе команды говорят мне, это то, что процесс принадлежит UID 6001, который является hdfs пользователь. проверка ps auxw для любых процессов, принадлежащих hdfs Я вижу, что есть один процесс зомби:

hdfs      4947  4.8  0.0      0     0 ?        Zl   Feb23 435:50 [java] <defunct>

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

# pstree -ps 4947
init(1)───java(4947)───{java}(9957)

Единственный обходной путь - это либо перезагрузка операционной системы (не подлежит обсуждению), либо временное использование другого порта Namenode (или Secondary Namenode).

Вы хоть представляете, в чем причина этой странной ошибки? Я не мог найти никаких подсказок в dmesg,

Кластер имеет 130 узлов, на каждом из которых работает Ubuntu 14.04 Trusty с ядром 4.2.0-30-generiC#35~14.04.1-Ubuntu. Версия Hadoop 2.7.1.

0 ответов

Другие вопросы по тегам