Hadoop создает InputSplits параллельно

У меня есть большой текстовый файл размером около 13 ГБ. Я хочу обработать файл с помощью Hadoop. Я знаю, что Hadoop использует FileInputFormat для создания InputSplits, которые назначаются задачам сопоставления. Я хочу знать, создает ли Hadoop эти InputSplits последовательно или параллельно. Я имею в виду, читает ли он большой текстовый файл последовательно на одном хосте и создает разделенные файлы, которые затем распределяются по узлам данных, или он читает фрагменты, скажем, по 50 МБ параллельно? Реплицирует ли hadoop большой файл на нескольких хостах перед его разделением?

Рекомендуется ли разделить файл на куски по 50 МБ, чтобы ускорить обработку? Есть много вопросов о подходящем размере разделения для картографических задач, но не о самом процессе разделения.

Спасибо


person ajayaneesh    schedule 27.08.2015    source источник


Ответы (3)


InputSplits создаются на стороне клиента, и это просто логическое представление файла в том смысле, что он будет содержать только путь к файлу, начальное и конечное значения смещения (вычисленные из функции инициализации linerecordreader). Таким образом, вычисление этого логического респ. не займет много времени, поэтому вам нужно разделить ваши куски, реальное выполнение происходит на конце картографа, где выполнение выполняется параллельно. Затем клиент помещает входные сплиты в hdfs, а jobtracker берет их оттуда и в зависимости от сплитов выделяет тасктрекер. Теперь здесь выполнение одного маппера не зависит от другого. Второй преобразователь очень хорошо знает, где он должен начать обработку этого разделения, поэтому выполнение преобразователя выполняется параллельно.

person Vignesh I    schedule 28.08.2015

Я полагаю, вы хотите обработать файл, используя MapReduce, а не Hadoop. Hadoop — это платформа, предоставляющая инструменты для обработки и хранения данных большого размера.

  1. Когда вы сохраняете файл в HDFS (файловая система Hadoop), он разбивает файл на несколько блоков. Размер блока определяется в файле hdfs-site.xml как dfs.block.size. Например, если dfs.block.size=128, то ваш входной файл будет разбит на блоки по 128 МБ. Вот как HDFS хранит данные внутри. Для пользователя это всегда один файл.
  2. Когда вы предоставляете входной файл (хранящийся в HDFS) MapReduce, он запускает задачу сопоставления для каждого блока/разделения файла. Это поведение по умолчанию.
  3. вам не нужно разбивать файл на куски, просто сохраните файл в HDFS, и он будет вам нужен.
person YoungHobbit    schedule 28.08.2015

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

Когда ваш текстовый файл разделен на блоки размером 128 МБ (по умолчанию) с помощью hdfs, предположим, что 10-я строка файла разделена и первая половина находится в первом блоке, а другая половина — во втором блоке. Но когда вы отправляете программу сопоставления, hadoop понимает, что последняя строка 1-го блока (который здесь становится входным разделением) не завершена. Таким образом, он переносит вторую половину 10-й строки в первое разделение ввода. Что подразумевает,

1) 1-й раздел ввода = 1-й блок + 2-я часть 10-й строки из 2-го блока

2) 2-й раздел ввода = 2-й блок - 2-я часть 10-й строки из 2-го блока.

Это встроенный процесс Hadoop, и вы не можете изменить или установить размер разделения ввода. Размер блока в Hadoop v2 по умолчанию составляет 128 МБ. Вы можете увеличить его во время установки, но вы не можете уменьшить его.

person Shravanya    schedule 28.08.2015