2012-02-13 5 views
15

Хотелось бы просто подтвердить следующее. Проверьте, правильно ли это: 1. Как я понимаю, когда мы копируем файл в HDFS, это тот момент, когда файл (при условии, что размер его размером> 64 МБ = размер блока HDFS) разделяется на несколько фрагментов, и каждый фрагмент хранится на разные узлы данных.О разделении файлов Hadoop/HDFS

  1. содержимое файла уже разбит на куски, когда файл копируется в HDFS, и этот файл сплит не происходит в момент запуска карты задания. Задачи карты назначаются только таким образом, чтобы они работали на каждом куске макс. размер 64 МБ с локальностью данных (например, задача карты выполняется на том узле, который содержит данные/кусок)

  2. Разделение файлов также происходит, если файл сжат (gzipped), но MR гарантирует, что каждый файл обрабатывается только одним устройством отображения , т. е. MR будет собирать все куски gzip-файла, лежащие на других узлах данных, и давать их всем одному картографу.

  3. То же, что и выше, произойдет, если мы определим isSplitable(), чтобы вернуть false, то есть все куски файла будут обработаны одним устройством отображения, работающим на одной машине. MR прочитает все куски файла из разных узлов данных и сделает их доступными для одного картографа.

+0

Более наглядное название было бы приятным дополнением к вашему вопросу. –

ответ

10

Ваше понимание не идеальное. Я хотел бы отметить, что существуют два, почти независимых процесса: разбиение файлов на блоки HDFS и разделение файлов на обработку различными картографами.
HDFS разделяет файлы на блоки на основе определенного размера блока.
Каждый формат ввода имеет свою собственную логику, как файлы могут быть разделены на части для независимой обработки различными картографами. Логикой по умолчанию для FileInputFormat является разделение файлов на блоки HDFS. Вы можете реализовать любую другую логику.
Сжатие, как правило, является противником расщепления, поэтому мы используем метод сжатия блоков, чтобы обеспечить разделение сжатых данных. Это означает, что каждая логическая часть файла (блока) сжимается независимо.

+2

Привет, Дэвид, спасибо за это разъяснение. Если мой файл предположим, что 128 МБ. Думаю, в этом случае HDFS будет разделять это на два куска, каждый размером 64 МБ (при условии, что размер блока HDFS = 64 МБ). Они могут храниться на разных машинах. Теперь, если я использую свой собственный FileInputFormat, который просто расширяет TextInputFormat и возвращает false в «isSplitable()», каково будет поведение, т. Е. Будет только один обработчик, который получит как куски ввода (т. Е. Весь файл, обработанный только одним картографом) или будет два картографа, каждый из которых обрабатывает один кусок файла. – sunillp

+0

Я здесь смущен, я хотел попробовать, но как-то мой пользовательский формат ввода компилируется, но не работает в тестовой настройке. – sunillp

+2

Если isSplitable возвращает false - файл будет обрабатываться одним преобразователем, независимо от количества блоков. –

1

Да, содержимое файла разделяется на куски, когда файл копируется в HDFS. Размер блока настраивается, и если он скажет 128 МБ, тогда весь 128 МБ будет один блок, а не 2 блока по 64 МБ отдельно. Также не обязательно, чтобы каждый фрагмент файла хранился на отдельном datanode.A. datanode может иметь более одного фрагмента определенного файла. И конкретный фрагмент может присутствовать в нескольких базах данных, основанных на коэффициенте репликации.

+0

Пожалуйста, внимательно прочитайте вопрос - ваш ответ не имеет ничего общего с темой –

+0

Могу ли я спросить, каким образом? Сам заголовок говорит - расщепление файла Hadoop/HDFS. Я согласен, что это не так хорошо, как ответ Дэвида. Но я не нахожу ничего, что не связано с темой. Пожалуйста, дайте мне знать, чтобы я не повторил ошибку. Спасибо. – Tariq

32

Ответ Дэвида в значительной степени поражает гвоздь на голове, я просто разрабатываю его здесь.

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

Во-первых -

1) Разделив файл на блоки - Когда файл записывается в HDFS, HDFS делит файл на блоки и заботится о его репликации. Это выполняется один раз (в основном), а затем доступно для всех заданий MR, выполняемых в кластере.Это кластер расширенной конфигурации

Во-вторых -

2) Разбиение файла на вход расщепляется - Когда входной путь передается в работу MR, работа MR использует путь вместе с форматом входного сконфигурированный для разделения файлов, указанных в входном пути, на разбиения, каждый разбитый обрабатывается заданием карты. Вычисление входных расщеплений выполняется с помощью формата ввода каждый раз, когда выполняется задание

Теперь, когда у нас есть это под нашим поясом, мы можем понять, что метод isSplitable() относится ко второй категории.

Чтобы действительно прибить это вниз взглянуть на поток данных записи HDFS (Concept 1)

HDFS Write Data Flow

Вторая точка на диаграмме, вероятно, где раскол происходит, обратите внимание, что это не имеет никакого отношения к делать при работающем от МР Работа

Теперь посмотрим на ступеньках выполнение МР задания

MR

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

Большая часть вашего замешательства проистекает из того факта, что вы объединяете оба эти понятия, я надеюсь, что это немного упростит.