Расшифровка файла Hadoop Snappy
Поэтому у меня возникли проблемы с расшифровкой файла snappy из HDFS. Если я использую hadoop fs -text
Я могу распаковать и вывести файл просто файл. Однако, если я использую hadoop fs -copyToLocal
и попробуйте распаковать файл с python-snappy, я получаю
snappy.UncompressError: Ошибка при распаковке: неверный ввод
Моя программа на Python очень проста и выглядит так:
import snappy
with open (snappy_file, "r") as input_file:
data = input_file.read()
uncompressed = snappy.uncompress(data)
print uncompressed
Это с треском проваливается для меня. Поэтому я попробовал другой текст, я взял вывод из hadoop fs -text
и сжал его, используя библиотеку python-snappy. Затем я вывел это в файл. После этого я смог прочитать этот файл и распаковать его.
AFAIK snappy обратно совместим между версиями. Мой код на Python использует последнюю версию snappy, и я предполагаю, что hadoop использует более старую версию snappy. Может ли это быть проблемой? Или я что-то здесь упускаю?
1 ответ
Хорошо, я понял это. Оказывается, что я использовал распаковку в режиме raw для файла, сжатого с использованием формата кадрирования hadoop. Даже когда я попробовал StreamDecompressor в 0.5.1, он все равно не удался из-за ошибки кадрирования. python-snappy 0.5.1 по умолчанию использует новый формат кадров snappy и, следовательно, не может распаковать snappy-файлы hadoop.
Оказывается, что в основной версии 0.5.2 добавлена поддержка формата кадрирования hadoop. После того как я собрал и импортировал его, я смог легко распаковать файл:
with open (snappy_file, "r") as input_file:
data = input_file.read()
decompressor = snappy.hadoop_snappy.StreamDecompressor()
uncompressed = decompressor.decompress(data)
Теперь единственная проблема заключается в том, что технически это еще не версия в пипсах, поэтому я думаю, мне придется подождать или просто использовать сборку из исходного кода.