Hadoop, как сжать выходные данные картографа, но не выходные данные редуктора

У меня есть программа Java с уменьшением карты, в которой я пытаюсь сжать только вывод картографа, но не вывод редуктора. Я думал, что это будет возможно, установив следующие свойства в экземпляре конфигурации, как указано ниже. Однако, когда я запускаю свою работу, сгенерированный редуктором вывод по-прежнему сжимается, поскольку сгенерированный файл имеет вид: part-r-00000.gz. Кто-нибудь успешно сжал данные картографа, но не редуктора? Это вообще возможно?

//Сжатие выходных данных картографа

conf.setBoolean("mapred.output.compress", true);
conf.set("mapred.output.compression.type", CompressionType.BLOCK.toString());
conf.setClass("mapred.output.compression.codec", GzipCodec.class, CompressionCodec.class);

person Marcin    schedule 06.04.2011    source источник


Ответы (5)


С MR2 теперь мы должны установить

conf.set("mapreduce.map.output.compress", true)
conf.set("mapreduce.output.fileoutputformat.compress", false)

Дополнительные сведения см. по адресу: http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

person fengyun    schedule 14.03.2014
comment
В случае, если кому-то интересно, как это работает для avro, поскольку avro поддерживает только snappy и deflate, эта конфигурация является лучшей. Окончательные сокращенные имена файлов не изменятся, однако вы заметите, что размеры файлов изменяются из-за сжатия на уровне внутренних блоков. Подробнее здесь: quora.com/Can- avro-data-files-be-lzop-compressed-in-Hadoop - person Ravindranath Akila; 26.11.2014
comment
Вы устанавливаете эти параметры при добавлении шагов в EMR? - person Barbaros Alp; 03.06.2016

mapred.compress.map.output: сжатие данных между картографом и редуктором. Если вы используете мгновенный кодек, это, скорее всего, увеличит скорость чтения и записи и снизит нагрузку на сеть. Не бойтесь плевать сюда. Эти файлы не хранятся в hdfs. Это временные файлы, которые существуют только для работы по уменьшению карты.

mapred.map.output.compression.codec: я бы использовал быстрый

mapred.output.compress: этот логический флаг определяет, будет ли вся задача map/reduce выводить сжатые данные. Я бы всегда устанавливал это значение true также. Более высокая скорость чтения/записи и меньше места на диске.

mapred.output.compression.type: я использую block. Это сделает сжатие разделяемым даже для всех форматов сжатия (gzip, snappy и bzip2), просто убедитесь, что вы используете разделяемый формат файла, такой как sequence, RCFile или Avro.

mapred.output.compression.codec: это кодек сжатия для задания сопоставления/уменьшения. В основном я использую один из трех: Snappy (самое быстрое r/w сжатие 2x-3x), gzip (обычное r быстрое с 5x-8x сжатием), bzip2 (медленное r/w сжатие 8x-12x)

Также помните, что при сжатии вывода mapred из-за разделения сжатие будет отличаться в зависимости от вашего порядка сортировки. Чем ближе друг к другу данные, тем лучше сжатие.

person ted.malaska    schedule 05.07.2012
comment
Как узнать, действительно ли выходные данные карты были сжаты? Сравнивая выходные байты карты без сжатия и со сжатием? Я вижу, что выходные байты моей карты составляют около 91 ГБ. Является ли это хорошим кандидатом для сжатия выходных данных карты? В общем, как бы мне найти хороших кандидатов на сжатие вывода карты. Является ли выходной байт карты хорошим индикатором? - person Venk K; 29.08.2013
comment
Версия hadoop 2.* теперь использует mapreduce.*.*, читайте мой ответ ниже - person fengyun; 19.05.2014
comment
Не могли бы вы уточнить, что он сделает сжатие разделяемым даже для всех форматов сжатия? По моему опыту, gz на самом деле не разделяется. Вы получаете файлы, хранящиеся в нескольких блоках, но когда мапперы читают их, для каждого файла создается только 1 маппер. Это означает, что все блоки, кроме первого, загружаются по сети. - person markob; 04.03.2017

«сжатие вывода» сожмет ваш окончательный вывод. Чтобы сжать только выходные данные карты, используйте что-то вроде этого:

  conf.set("mapred.compress.map.output", "true")
  conf.set("mapred.output.compression.type", "BLOCK"); 
  conf.set("mapred.map.output.compression.codec", "org.apache.hadoop.io.compress.GzipCodec"); 
person vpk    schedule 07.04.2011
comment
Использование gzip в качестве компрессора не такая уж хорошая идея. Основная проблема в том, что он не разделяемый. - person Niels Basjes; 07.04.2011
comment
Почему? Я думал, что вывод картографа не разделяется, только если используется редуктор или редуктор идентичности, вывод может быть разделен. - person Marcin; 07.04.2011
comment
Насколько я понимаю, использование GZIP для сжатия входных данных — не очень хорошая идея. и причина в том, что он не разделяемый. Нет проблем с использованием gzip для вывода карты. - person root1982; 18.04.2012
comment
Gzip немного медленнее, чем другие алгоритмы, такие как LZO и Snappy, но с Gzip вы получаете лучшее сжатие. Как бы то ни было, EMR AWS по умолчанию использует Snappy. - person Dolan Antenucci; 10.12.2014

  1. Вам нужно установить для «mapred.compress.map.output» значение true.
  2. При желании вы можете выбрать кодек сжатия, установив «mapred.map.output.compression.codec». ПРИМЕЧАНИЕ 1: сжатие вывода mapred никогда не должно быть BLOCK. Подробнее см. в следующей JIRA: https://issues.apache.org/jira/browse/HADOOP-1194 ПРИМЕЧАНИЕ 2. GZIP и BZ2 интенсивно используют ЦП. Если у вас медленная сеть, а GZIP или BZ2 дают лучшую степень сжатия, это может оправдать затраты циклов процессора. В противном случае рассмотрите кодек LZO или Snappy.
    ПРИМЕЧАНИЕ 3. Если вы хотите использовать сжатие вывода карты, рассмотрите возможность установки собственного кодека, который вызывается через JNI и обеспечивает более высокую производительность.
person root1982    schedule 05.04.2012
comment
В дополнение к этому, можем ли мы просто сжать значения преобразователя, а не ключи? - person Piyush Kansal; 12.04.2012

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

MapR изначально сжимает на уровне файловой системы, так что приложению не нужно об этом знать или заботиться. Сжатие может быть включено или выключено на уровне каталога, поэтому вы можете сжимать входные данные, но не выходные или что угодно. Как правило, сжатие настолько быстрое (по умолчанию используется алгоритм, аналогичный snappy), что большинство приложений замечают прирост производительности при использовании собственного сжатия. Если ваши файлы уже сжаты, это обнаруживается очень быстро, и сжатие отключается автоматически, так что вы также не видите штрафа.

person Ted Dunning    schedule 28.03.2013