2015-10-25 2 views
2

Если у меня есть сжатый файл размером 1 ГБ, который является разделяемым, и по умолчанию размер блока и размер входного разделения составляют 128 МБ, тогда есть 8 блоков и 8 разделенных входных данных. Когда сжатый блок считывается с помощью уменьшения карты, он несжатый и говорит, что после разжатия размер блока становится 200 МБ. Но разделение ввода для этого назначено на 128 МБ, так как обрабатывается остальная часть 82 МБ.Входной сигнал Hadoop для сжатого блока

  1. Переделана ли следующая сплит?
  2. Увеличен ли размер разделенного входа?

ответ

0

Общий размер файла: 1 GB

Размер блока: 128 MB

Количество разделений: 8

Создание раскола для каждого блока не будет работать так как невозможно начать чтение в произвольной точке потока gzip и, следовательно, невозможно, чтобы задача карты считывала ее раскол независимо от других. Формат gzip использует DEFLATE для хранения сжатых данных, а DEFLATE хранит данные в виде серии сжатых блоков. Проблема в том, что начало каждого блока ничем не отличается. По этой причине gzip не поддерживает разделение.

MapReduce будет не разделять gzip-файл, так как он знает, что вход gzip-сжат (если посмотреть на расширение имени файла) и что gzip не поддерживает разделение. Это будет работать, но за счет локальности: одна карта обработает 8 блоков HDFS, большинство из которых не будут локальными для карты.

Посмотрите: this article и название раздела: Вопросы о сжатии и ввода расколоть

EDIT: (для щепляемой распаковки)

BZip2 является алгоритм сжатия/De-сжатия, который делает сжатие на блоках данных, а затем эти сжатые блоки могут быть распакованы независимо друг от друга. Это действительно возможность того, что вместо одного сжатого файла BZip2, идущего на один картограф, мы можем параллельно обрабатывать фрагменты файла. Критерии правильности такой обработки - это то, что для сжатого файла bzip2 каждый сжатый блок должен обрабатываться только одним преобразователем, и в конечном итоге все блоки файла должны обрабатываться. (Под обработкой понимается фактическое использование того, что несжатые данные (выходит из кодеков) в картографе)

Источник: https://issues.apache.org/jira/browse/HADOOP-4012

0

Я здесь в виду сжатые файлов, которые могут быть разделены столом как bzip2, который расщепляется. Если для блока 128 Мбайт bzip2 создается разделитель входных данных, а во время преобразования карты уменьшается, когда это несжато до 200 МБ, что происходит?

+0

Вы потеряете местоположение данных, поскольку данные не могут быть прочитаны на том же узле карты. Данные также будут расширены и для других узлов. Физическое разделение охватывает несколько узлов данных. –

+0

Входные расщепления решаются до того, как данные несжаты. Поэтому в соответствии с моим предыдущим вопросом изначально у меня будет 8 разделенных входных данных для сжатого 1GB-файла размером 128 МБ. Но когда это несжатый блок размером 128 МБ, он станет 200 МБ. Но мой входной бит может обрабатывать только 128 МБ, поэтому после того, как данные блока будут несжаты, они будут увеличивать входной сигнал с 1 на 2. Первый будет обрабатывать 128 МБ, а второй будет обрабатывать остальные 82 МБ. –

0

Вот мое понимание:

Давайте предположим, 1 ГБ сжатых данных = 2 ГБ декомпрессию данных поэтому у вас есть 16 блок данных, Bzip2 знает границу блока как bzip2 файл содержит маркер синхронизации между блоками. Таким образом, bzip2 разбивает данные на 16 блоков и отправляет данные на 16 карточек.Каждый картограф получает размер распакованных данных размером 1 входной раздельный размер = 128 МБ. (конечно, если данные не точно кратно 128 МБ, последний отображает меньше данных)