Вопрос по compression – Как использовать Snappy в Hadoop в формате контейнера

4

Я должен использовать Snappy, чтобы сжать карту o / p и уменьшить карту также. Кроме того, это должно быть разделяемым.

Поскольку я учился в Интернете, чтобы заставить Снейппи писать разделяемые o / p, мы должны использовать его в формате, подобном контейнеру.

Подскажите, пожалуйста, как это сделать? Я попытался найти несколько примеров в Интернете, но не смог найти хороший. Я использую Hadoop v0.20.203.

Благодарю. Piyush

Ваш Ответ

2   ответа
5

для вывода

conf.setOutputFormat(SequenceFileOutputFormat.class); SequenceFileOutputFormat.setOutputCompressionType(conf, CompressionType.BLOCK); SequenceFileOutputFormat.setCompressOutput(conf, true); conf.set("mapred.output.compression.codec","org.apache.hadoop.io.compress.SnappyCodec");

Для вывода карты

Configuration conf = new Configuration(); conf.setBoolean("mapred.compress.map.output", true); conf.set("mapred.map.output.compression.codec","org.apache.hadoop.io.compress.SnappyCodec");

Данные, которые мы собираемся сжать с помощью Snappy, не будут переданы никакому заданию MapReduce, они просто останутся на диске. Итак, мы просто хотим использовать его для сжатия и измерить разницу между ч / б Gzip и Snappy с точки зрения степени сжатия и времени выполнения. Так что со мной все в порядке, даже если оно не разделимо. Piyush Kansal
Я думаю, что все должно быть в порядке.
& quot; Следует отметить, что Snappy предназначен для использования с форматом контейнера, таким как файлы последовательностей или файлы данных Avro, а не для непосредственного использования, например, в виде простого текста, поскольку последний не разделяется и может & # x2019; обрабатываться параллельно с использованием MapReduce. & quot; (cloudera.com/blog/2011/09/snappy-and-hadoop)
Благодарю. Однако я использую не формат файла Sequence, а BufferedWriter. Итак, вы можете предложить, как это сделать. Piyush Kansal
1

В новом API OutputFormat устанавливается для работы, а не для конфигурации. Тогда первая часть будет:

Job job = new Job(conf);
...
SequenceFileOutputFormat.setOutputCompressionType(job, CompressionType.BLOCK);
SequenceFileOutputFormat.setCompressOutput(job, true);

conf.set("mapred.output.compression.codec","org.apache.hadoop.io.compress.SnappyCodec");

Похожие вопросы