2013-05-21 8 views
4

Я использовал LZO для сжатия выходного сигнала. Я попытался это: Hadoop-LZO project of Kevin Weil, а затем использовали LzoCodec класс с моей работой:Как распаковать файл lzo_deflate?

TextOutputFormat.setOutputCompressorClass(job, LzoCodec.class); 

сжатия теперь работает просто отлично.

Моя проблема заключается в том, что результатом сжатия является файл .lzo_deflate, который я просто не могу распаковать.
Lzop utility, похоже, не поддерживает этот тип файла.
LzopCodec должен предоставить файл .lzo, но это не сработало, однако оно находится в том же пакете, что и LzoCodec (org.apache.hadoop.io.compress), который может ссылаться на проблему совместимости, поскольку я использовал старый API (0.19) для сжатия.

Ответы на это question предлагают решения Python, однако мне это нужно на Java.
Я использую Hadoop 1.1.2 и Java 6.

+0

Что вы подразумеваете под «это не сработало» для LzopCodec? LzopCodec рекомендуется по LzoCodec, он должен работать. Можете ли вы включить эту ошибку? –

+0

Yes.'Exception в теме "main" java.lang.NoClassDefFoundError: org/apache/hadoop/io/compress/LzopCodec'. Я попытался исправить проблему, пока не прочитал, что LzoCodec более рекомендуется. Так что это должно быть ясно. –

+0

Большая разница в том, что Lzop добавляет заголовки, а Lzo - нет. Вы обновили свой файл hadoop-env.sh и правильно настроили HADOOP_CLASSPATH и JAVA_LIBRARY_PATH? –

ответ

5

.lzo_deflate означает поток LZO без обычного заголовка и трейлера. Поэтому вам нужно будет обернуть поток raw .lzo_deflate заголовком и трейлером, ожидаемым lzop. Или, по крайней мере, заголовок, а затем проигнорировать ошибки из пропавшего трейлера. Вам нужно посмотреть на header and trailer documentation.

«Дефлят» в названии является странным выбором, но он относится к аналогии с gzip, где необработанный сжатый формат данных без заголовка gzip и трейлера называется deflate.

+0

Спасибо @Mark Adler за ваш ответ. Теперь я понимаю больше. –

2

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

job.getConfiguration().set("mapred.output.compression.codec","com.hadoop.compression.lzo.LzopCodec");