2017-01-07 4 views
1

У меня есть папка в моей системе HDFS, которая содержит текстовые файлы, сжатые с помощью кодека Snappy.Чтение Snappy Сжатые данные на HDFS от потокового Hadoop

Обычно при чтении сжатых файлов GZIP в задании Hadoop Streaming декомпрессия происходит автоматически. Однако это не происходит при использовании сжатых данных Snappy, и я не могу обрабатывать данные.

Как я могу прочитать эти файлы и обработать их в потоке Hadoop?

Большое спасибо заранее.

UPDATE:

Если я использую команду hadoop fs -text file она работает. Проблема возникает только при использовании потоковой передачи hadoop, данные не распаковываются, прежде чем передать мой скрипт python.

ответ

1

Я думаю, что у меня есть ответ на эту проблему. Было бы здорово, если кто-то сможет это подтвердить.

Просмотр блога Cloudera. Я нашел this article, объясняя кодек Snappy. Как можно прочитать:

Одна вещь, чтобы отметить, что Snappy предназначен для использования с форматом контейнера, как последовательности файлов или Avro файлов данных, а не для использования непосредственно на обычный текст, например, так последний не расщепляется и не может обрабатываться параллельно с использованием MapReduce.

Поэтому файл, сжатый в HDFS с помощью Snappy кодека можно читать с помощью hadoop fs -text, но не в работе Hadoop Streaming (MapReduce).

1

Есть ли у вас мгновенный кодек настроен в core-site, как:

<property> 
    <name>io.compression.codecs</name> 
    <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.BZip2Codec</value> 
</property> 
+0

Благодарим @ravwojdyla за ваш ответ. Это хороший момент, но у меня есть кодек, настроенный в моем core-site.xml. – Salias

+0

Если я использую команду 'hasoop fs -text file', то работает. Проблема возникает только при потоковой передаче данных, данные не распаковываются перед передачей моего скрипта python. – Salias