Я нашел этот вопрос в поиске обходного пути с ошибкой с помощью утилиты -text
в новой версии hadoop dfs
клиента, который я только что установил. Утилита -text
работает как cat
, за исключением того, что читаемый файл сжат, прозрачно распаковывает и выводит простой текст (отсюда и название).
Ответы, которые уже были опубликованы, были определенно полезны, но у некоторых из них есть одна проблема при работе с объемами данных Hadoop - они считывают все в память перед распаковкой.
Итак, вот мои варианты ответов Perl
и Python
выше, которые не имеют этого ограничения:
Python:
hadoop fs -cat /path/to/example.deflate |
python -c 'import zlib,sys;map(lambda b:sys.stdout.write(zlib.decompress(b)),iter(lambda:sys.stdin.read(4096),""))'
Perl:
hadoop fs -cat /path/to/example.deflate |
perl -MCompress::Zlib -e 'print uncompress($buf) while sysread(STDIN,$buf,4096)'
Обратите внимание на использование подкоманды -cat
вместо -text
. Это сделано для того, чтобы мой обход не сломался после того, как они исправили ошибку. Извиняюсь за удобочитаемость версии Python.