2017-01-28 19 views
1

Я просто хотел получить более подробное описание ниже. Когда я попытался понять how the HDFS writes happens to Data nodes. Я получил ниже объяснение о записи HDFS.Трубопровод данных в Hadoop HDFS при копировании файлов в DataNodes

Почему клиент hdfs отправляет 4kb в узлы данных вместо отправки всего блока 64 МБ на узел данных? Может ли кто-нибудь объяснить подробно?

Для повышения производительности узлы данных поддерживают конвейер для передачи данных. Узлу данных 1 не нужно ждать завершения полного блока, прежде чем он сможет начать передачу в узел данных 2 в потоке. Фактически, передача данных от клиента к узлу данных 1 для данного блока происходит в меньших кусках 4 КБ. Когда узел данных 1 получает первый клиент из 4KB от клиента, он сохраняет этот фрагмент в своем локальном репозитории и сразу же начинает передачу его в узел данных 2 в потоке. Аналогично, когда узел данных 2 принимает первый блок 4KB из узла данных 1, он сохраняет этот фрагмент в своем локальном репозитории и немедленно начинает его перенос на узел данных 3. Таким образом, все узлы данных в потоке, кроме последнего, принимают данные из предыдущий и перенести его на следующий узел данных в потоке, чтобы улучшить производительность записи, избегая времени ожидания на каждом этапе.

+0

Вы можете добавить источник контента, который разместили на сайте? – mrsrinivas

+0

http://www.informit.com/articles/article.aspx?p=2460260&seqNum=2. –

ответ

3

На ваш вопрос есть ответ.

На этом снимке можно предположить, что размер файла равен размеру блока (128 МБ). Так **A, B, C .. are the chunks in block**

Data Flow Pipeline https://i.stack.imgur.com/REO6r.jpg

Когда узел данных 1 принимает первый 4KB (А) кусок от клиента, он хранит этот блок в его локальном хранилище и немедленно начинает передачи его к узлу данных- в потоке.Аналогичным образом, когда узел 2 данных получает первый 4KB кусок от узла 1 данных, он сохраняет этот кусок в своем локального хранилища, и сразу же начинает передавать его в узел данных 3

Здесь преимущество является узлом данных 2 и 3 не обязательно дождаться, пока данные 128 МБ будут скопированы в узел данных 1 перед началом репликации. Таким образом, задержка, потому что репликация будет всего лишь одним или двумя времени копирования патронов, так как все куски копируются в узлы параллельно.

+1

Спасибо, что помог мне лучше понять. –

1

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

Давайте обсудим это с примером, предположим, что есть 3 узла данных и задание карты должно быть выполнено. Данные или блок, в которых присутствует входной файл, находятся в узле 1, а его репликация находится в узле 2 (мы предполагаем коэффициент репликации 2). Но по какой-то причине или может быть выполнено другое задание на обоих узлах 1 и узле 2, из-за которых они заняты, поэтому задание карты теперь необходимо выполнить на узле 3, у которого нет входного файла, по которому мы хотим выполнить карту задание таким образом, что входной файл теперь необходимо перенести на этот узел 3. Теперь, если диспетчер узлов будет ожидать, что целая часть, возможно, 64 Мб, будет перенесена на узел 3 перед началом задания карты, то у нее, безусловно, будет больше головы, а затем передача 4 кб. Поскольку 4kb будет передаваться быстрее и как только узел 3 получит его. он начнет работу с картой. Теперь это один из простых сценариев Hadoop.

Если вы изучите Hadoop, потоковые данные необходимы для непрерывной потоковой передачи, поэтому данные 4 kB передаются между различными узлами данных, чтобы обеспечить короткую и быструю передачу, и это также является одной из основных причин, почему предпочтительна искровая потоковая передача над потоком Hadoop, потому что Hadoop не передает непрерывные данные, передавая очень маленький фрагмент данных, который кажется непрерывным.

Вы можете посетить http://javacrunch.in/Yarn.jsp, если вы хотите посмотреть, как менеджер узлов запускает любую работу.

Надеюсь, что это разрешит ваш запрос.