2015-05-30 2 views
8

Что такое соотношение между размером разделения и размером блока в Hadoop? Как я читал в this, размер разделения должен быть n раз больше размера блока (n - целое число и n> 0), это правильно? Есть ли необходимость в соотношении между размером разделения и размером блока?Разделение по сравнению с размером блока в Hadoop

ответ

43

В архитектуре HDFS существует концепция блоков. Типичный размер блока, используемый HDFS, составляет 64 МБ. Когда мы помещаем большой файл в HDFS, он прерывается до 64 МБ фрагментов (основанный на стандартной конфигурации блоков). Предположим, что у вас есть файл размером 1 ГБ, и вы хотите поместить этот файл в HDFS, тогда будет 1GB/64MB = 16 split/blocks, и этот блок будет распространяться через DataNodes. Эти блоки/фрагменты будут размещаться на другом другом DataNode на основе конфигурации вашего кластера.

Разделение данных происходит на основе смещений файлов. Цель расщепления файла и хранения его в разных блоках - это параллельная обработка и сбой данных.

Разница между размером блока и раздельным размером.

Разделение - это логическое разделение данных, в основном используемых при обработке данных с использованием программы Map/Reduce или других методов обработки данных на Hadoop Ecosystem. Раздельный размер - это определенное пользователем значение, и вы можете выбрать свой собственный размер разбиения на основе объема данных (сколько данных вы обрабатываете).

Сплит в основном используется для управления числом карт в Map/Reduce program. Если вы не определили размер разнесенного ввода в программе Map/Reduce, тогда разделение блоков HDFS по умолчанию будет считаться входным.

Пример:

Предположит, у вас есть файл 100MB и HDFS конфигурации блока по умолчанию является 64, то он будет нарезанным в 2 расколе и занимает 2 блока. Теперь у вас есть программа Map/Reduce для обработки этих данных, но вы не указали какой-либо входной распад, а на основании количества разделов ввода блоков (2 блока) будут рассмотрены для обработки Map/Reduce, и для этого будет назначен 2 картографа работа.

Но предположим, что вы указали размер разметки (скажем, 100 МБ) в своей программе Map/Reduce, тогда оба блока (2 блока) будут рассматриваться как один раскол для обработки Map/Reduce, а 1 Mapper будет назначен для эта работа.

Предположим, вы указали размер разметки (скажем, 25 МБ) в своей программе Map/Reduce, тогда будет 4 разделенных входа для программы Map/Reduce, и 4 Mapper получит назначение для задания.

Вывод:

  1. Сплит является логическим разделением входных данных в то время как блок представляет собой физическое разделение данных.
  2. Размер блока по умолчанию HDFS по умолчанию является разделенным размером, если входной сплит не указан.
  3. Сплит определяется пользователем, и пользователь может управлять разделенным размером в своей программе Map/Reduce.
  4. Один раскол может быть сопоставлен с несколькими блоками, и их можно разделить на один блок.
  5. Число задач карты (Mapper) равно числу разделов.
+0

Я понял. Благодаря! –

+0

Одно из лучших объяснений. Я хочу, чтобы я мог бесконечно голосовать за это. – fanbondi

+0

sandeep bhai, badhiya :) – Nerrve

9
  • Предположим, у нас есть файл 400 МБ с состоит из 4 записей (например: CSV файл 400MB и имеет 4 строки, 100Мб каждый)

enter image description here

  • Если HDFS Размер блока настроен как 128MB, тогда 4 записи не будут равномерно распределены между блоками. Это будет выглядеть так.

enter image description here

  • Блок 1 содержит всю первую запись и 28MB кусок второй записи.
  • Если картограф должен быть запущен на Блок 1, то обработчик не может обработать, так как он не будет иметь всю вторую запись.

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

  • Позволяет Предположим вход разделить размер 200MB

enter image description here

  • Поэтому вход разделенное 1 должен иметь как запись 1 и записи 2. И входной бит 2 не начинается с записи 2, поскольку запись 2 была назначена на входной сплит 1. Входной бит 2 начнется с записи 3.

  • Именно поэтому входной сплит - это только логический фрагмент данных. Он указывает на начало и конец местоположений в блоках.

  • Если размер входного Раскола в п раз больше размера блока, вход раскол может поместиться несколько блоков и, следовательно, меньшее количеством Картостроителей, необходимых для всей работы и, следовательно, меньше параллелизма. (Количество датчиков - это количество входных разрывов)

  • входной раздельный размер = размер блока - идеальная конфигурация.

Надеюсь, это поможет.

+1

Почему входной раскол 2 100 мб, а не 200 мб? – ssinganamalla

+0

@ssinganamalla: Это ошибка. Все входные расщепления в этом изображении должны быть 200 МБ –

Смежные вопросы