У меня есть вопрос о отчетах о блокировке, отправляемых на NameNode из DataNodes, когда клиент пишет в HDFS, а также о подтверждении от NameNode клиенту о закрытии файла.
Может кто-нибудь любезно прояснить этот абзац книги Hadoop:
"Когда клиент заканчивает записывать данные, он вызывает close () в потоке. Это действие сбрасывает все оставшиесяотправляет пакеты в конвейер данных и ждет подтверждений перед тем, как связаться с namenode, чтобы сообщить о завершении файла. namenode уже знает, из каких блоков состоит файл, поэтому ему нужно только дождаться минимальной репликации блоков, прежде чем успешное возвращение . "
" возвращение успешно "неоднозначно: это может означать успешное возвращение клиенту (но это не может быть раньше, до следующего отчета о блокированииприходит, что не имеет смысла для меня), или это может означать возвращение успешно, но асинхронно и локально на NameNode, несколько часов спустя, без необходимости ждать клиента.
Этот вопрос немногоотносящиеся к обсуждению здесь , где комментарий спрашивает, пишите лив HDFS асинхронность или синхронизация есть.
- Например, в случае async это будет означать, что вызов close () немедленно возвращается клиенту, а NameNode проверяет репликацию асинхронно после этого;
- в случае sync , это будет означать, что NameNode должен будет дождаться блочных отчетов из DataNodes, прежде чем сообщать клиенту о файле close ().
Другой комментарий в предыдущем обсуждении указывает на этот источник для пояснения, где говорится:
"Вызов функции complete () не вернетсяистина до тех пор, пока все блоки файла не будут реплицированы минимальное количество раз. Таким образом, сбои в DataNode могут привести к тому, что клиент вызовет complete () несколько раз перед успешным выполнением ».
Этот источник информации имеет тенденцию выбирать объяснение sync .
Я был бы очень признателен, если бы инженер Hadoop мог дать совет по этому поводу.Заранее большое спасибо.