2013-08-12 5 views
2

Я вижу, что свинья может читать файлы .bz2 изначально, но я не уверен, что она выполняет явное задание для разделения bz2 на несколько inputplits? Может ли кто-нибудь подтвердить это? Если свинья работает над созданием inputplits, есть ли способ избежать этого? Я имею в виду способ раскодирования среды MapReduce для файлов bz2 в muplitple inputlits на уровне структуры?Apache Pig обрабатывает файл bz2 изначально?

+1

Вопрос заключается в том, что свинья запускает задание, чтобы предварительно разбить файл, а затем запустить задание по разделенному файлу? –

+0

Да. Спасибо, что попросили разъяснения. Вероятно, это зависит от базового Hadoop? – kee

ответ

1

Разделимые форматы ввода не реализованы в hadoop (или у свиньи, которая просто запускает задания MR для вас), так что файл разбивается на одно задание, а затем разбивается на второе задание.

Формат ввода определяет метод isSplittable, который определяет, можно ли разделять формат файла. В дополнение к этому большинство текстовых форматов проверит, использует ли файл известный кодек сжатия (например: gzip, bzip2), и если поддержка кодека разделяется (gzip не является, в принципе, а bz2).

Если входной формат/кодек разрешает разделение файлов, то разделение определяется в определенных (и настраиваемых) точках в сжатом файле (скажем, каждые 64 МБ). Когда задачи карты создаются для обработки каждого раскола, затем получите формат ввода для создания устройства чтения записей для файла, передавая разделенную информацию для того, откуда должен начинаться считыватель (смещение блока 64 МБ). Затем читателю предлагается искать точку смещения раскола. В этот момент базовый кодек будет искать эту точку в сжатом файле и сканировать вперед, пока не найдет следующий заголовок сжатого блока (в случае bz2). Считывается затем, как обычно, в несжатом потоке, возвращенном из кодека, до тех пор, пока конечная точка разделения не будет передана в несжатом потоке.