Размер разделения входов Hadoop и размер блока - программирование
Подтвердить что ты не робот

Размер разделения входов Hadoop и размер блока

Я прохожу через исчерпывающий справочник хауопа, где он четко объясняет входные расщепления. Это похоже на

Входные разделители не содержат фактических данных, скорее у них есть хранилище местоположения для данных HDFS

и

Обычно размер разделения ввода такой же, как размер блока

1) позволяет сказать, что блок размером 64 МБ включен в node A и реплицирован из 2 других узлов (B, C), а размер разделенного входа для программы уменьшения карты - 64 МБ, будет этот раскол просто имеет место для node A? Или он будет иметь места для всех трех узлов A, b, C?

2). Поскольку данные локальны для всех трех узлов, как среда решает (выбирает) maptask для выполнения на определенном node?

3) Как это обрабатывается, если размер Разделение ввода больше или меньше размера блока?

4b9b3361

Ответ 1

  • Ответ от @user1668782 является отличным объяснением вопроса, и я попытаюсь дать ему графическое изображение.

  • Предположим, что у нас есть файл 400 МБ, состоящий из 4 записей ( например: файл csv 400 МБ, и он имеет 4 строки, 100 МБ каждый)

введите описание изображения здесь

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

введите описание изображения здесь

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

  • Предположим, что размер 200 МБ

введите описание изображения здесь

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

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

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

Ответ 2

Блок - это физическое представление данных. Split - это логическое представление данных, присутствующих в блоке.

Размер блока и разделения может быть изменен в свойствах.

Карта считывает данные из блока путем разделения, т.е. разделяет действие как посредника между блоком и картоном.

Рассмотрим два блока:

Блок 1

aa bb cc dd ee ff gg hh ii jj

Блок 2

ww ee yy uu oo ii oo pp kk ll nn

Теперь карта читает блок 1 до aa до JJ и не знает, как читать блок 2, т.е. блок не знает, как обрабатывать различные блоки информации. Здесь идет Split, он формирует логическую группировку блоков 1 и блока 2 как единый блок, затем формирует смещение (ключ) и строку (значение) с помощью inputformat и записывающего устройства и отправляет карту для дальнейшей обработки.

Если ваш ресурс ограничен, и вы хотите ограничить количество карт, вы можете увеличить размер разделения. Например: Если у нас есть 640 МБ из 10 блоков, т.е. Каждый блок размером 64 МБ и ресурс ограничен, вы можете указать размер Split как 128 МБ, а затем будет сформирована логическая группировка в 128 МБ и будет выполнено только 5 карт размером 128 МБ.

Если мы укажем, что размер split равен false, тогда весь файл будет формировать один входной раздел и обрабатываться одной картой, для обработки которой требуется больше времени.

Ответ 3

Входные расщепления - это логическое разделение ваших записей, тогда как блоки HDFS - это физическое разделение входных данных. Он чрезвычайно эффективен, когда они одинаковы, но на практике он никогда не выровнен. Записи могут пересекать границы блоков. Hadoop гарантирует обработку всех записей. Машина, обрабатывающая конкретное разделение, может извлекать фрагмент записи из блока, отличного от своего "основного" блока, и который может находиться удаленно. Стоимость связи для извлечения фрагмента записи несущественна, поскольку она происходит относительно редко.

Ответ 4

В 1) и 2): я не уверен на 100%, но если задача не может быть завершена - по какой-либо причине, в том числе, если что-то не так с входным расщеплением, - тогда оно прекращается, а другое начинается с него: поэтому каждая maptask получает ровно один раскол с информацией о файле (вы можете быстро сказать, если это так, отлаживаясь от локального кластера, чтобы узнать, какая информация хранится во входном разделенном объекте: я, кажется, напомню это только одно местоположение).

до 3): если формат файла является разделяемым, то Hadoop попытается вырезать файл до фрагментов размера "inputSplit"; если нет, то это одна задача для каждого файла, независимо от размера файла. Если вы измените значение split-input-split, вы можете предотвратить слишком много заданий mapper, которые порождаются, если каждый из ваших входных файлов разделен на размер блока, но вы можете комбинировать только входы, если вы делаете какую-либо магию с помощью класс объединителя (я думаю, что он назвал).

Ответ 5

Сила каркаса Hadoop - это локальность данных. Так что всякий раз, когда клиент запрашивает данные hdfs, фреймворк всегда проверяет местонахождение, он ищет небольшое использование ввода/вывода.

Ответ 6

Я знаю, что мой ответ задерживается.. но будет полезно для кого-то..

Размер блока hdfs - это точное число, но размер входного разделения основан на нашем логика данных, которая может немного отличаться от настроенного числа

Ответ 7

Входные расщепления - это логические единицы данных, которые подаются на каждый преобразователь. Данные разделяются по действительным записям. Входные разделители содержат адреса блоков и байтовых смещений.

Скажем, у вас есть текстовый файл, который охватывает 4 блока.

Файл:

a b c d
e f g h
i j k l
m n o p

Блоки:

block1: a b c d e
block2: f g h я j
block3: k l m n o
block4: p

расколов:

Split1: a b c d e f h
Split2: я j k l m n o p

Наблюдайте, что расщепления встроены в границы (записи) из файла. Теперь каждый раскол подается в картограф.

Если размер разделенного входа меньше размера блока, вы в конечном итоге будете использовать большее количество маркеров наоборот.

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