В HDFS доступны ли онлайн-коды данных для чтения/записи до завершения отчета о полном блоке?

#hadoop #hdfs #datanode

Вопрос:

В Apache HDFS, когда запускается код данных, он регистрируется с именем. И через некоторое время появляется отчет о блоке (не связанный с регистром). Я не до конца понял код, но мне кажется, что NameNode обрабатывает код данных, который не отправил свой отчет о блоке, так же, как и все другие коды данных, которые уже сообщили. Я получаю эту подсказку, потому что логика регистра DatanodeManger не помечает код данных как особое состояние, подобное NOT_REPORTED .

Таким образом, клиент HDFS сможет выполнить чтение/запись в новом коде данных до того, как завершит отчет в коде имени. Давайте обсудим, является ли код данных свежим.

Если код данных свежий (т. е. в нем все равно не хранятся блоки), его можно безопасно использовать для чтения/записи. Там нечего читать. И записанные блоки должны быть сообщены в отчете о блоке в NameNode позже.

Если код данных НЕ является свежим (т. Е. в этом коде данных есть данные, он каким-то образом отключился и снова подключился к Сети), в метаданных на стороне именного кода может быть пробел, где некоторые блоки существуют/исчезли из кода данных, но именной код еще не знает. В именном коде все еще хранятся устаревшие метаданные о местоположении блока из предыдущего отчета (если таковые имеются). Приведет ли это к несоответствиям, как показано ниже (конечно, многие другие крайние случаи)?

  1. NameNode инструктирует клиента считывать данные из этого DataNode, но на самом деле блок исчез.
  2. NameNode указывает клиенту записать в этот код данных, но блок фактически существует.

Если эти несоответствия действительно устранены, то что я упускаю? Или, если эти несоответствия не имеют значения, то почему?

Ценю это, если кто-нибудь сможет объяснить логику в дизайне или указать мне на соответствующий код. Заранее спасибо!