Как Name Node решает, какие блоки данных хранятся в узле данных, когда он выходит из строя? - PullRequest
0 голосов
/ 30 апреля 2018

Давайте предположим, что какой-то узел данных выйдет из строя, и он прекратит посылать тактовые импульсы. Теперь имя узла узнало, что этого конкретного узла данных больше нет в сети. Имя узла снова должно создавать блоки для поддержания коэффициента репликации. Как имя узла узнает, что все разные копии блока находятся на мертвом узле данных. Если он начнет перебирать FSImage, то это определенно будет очень долгий процесс и займет много времени. Итак, какова точная процедура, которой следует узел имени, чтобы узнать, какие различные блоки данных хранятся на мертвом узле данных?

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

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

Это функция карты размера, но не более 4 ГБ.

0 голосов
/ 01 мая 2018

NameNode периодически получает отчет Heartbeat и Block от каждого из узлов данных в кластере. Получение пульса означает, что DataNode исправен и работает нормально.

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

Самый простой способ понять этот сценарий - это когда узел данных не работает, и другие узлы данных не могут узнать, что соседний узел данных сохранил. Блоки реплицируются в узлах данных в соответствии с инструкциями Namenode, которые, в свою очередь, проверяют блоки мертвого узла данных из его fsimage, и это займет менее 5 секунд, чтобы решить, что будет реплицировано. После того, как будет решено, репликация займет пару минут.

0 голосов
/ 30 апреля 2018

DataNode отправляет отчет о блокировке за каждый фиксированный промежуток времени (по умолчанию установлено значение 21600000 миллисекунд). Отчет о блоке содержит информацию о блоках, которая содержит: идентификатор блока, длину блока, метку времени генерации блока, состояние реплики блока (например, реплика завершена или ожидает восстановления и т. Д.)

...