Ich fand diese Frage auf der Suche nach einer Problemumgehung mit einem Fehler im -text
Dienstprogramm in der neuen Version des hadoop dfs
Clients, den ich gerade installiert habe. Das -text
Dienstprogramm funktioniert wiecat
folgt: Wenn die gelesene Datei komprimiert ist, wird der Klartext (daher der Name) transparent dekomprimiert und ausgegeben.
Die bereits veröffentlichten Antworten waren auf jeden Fall hilfreich, aber einige von ihnen haben ein Problem beim Umgang mit Datenmengen in Hadoop-Größe: Sie lesen alles vor dem Dekomprimieren in den Speicher.
Also, hier sind meine Variationen der Perl
und Python
Antworten oben, die diese Einschränkung nicht haben:
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)'
Beachten Sie die Verwendung des -cat
Unterbefehls anstelle von -text
. Dies ist so, dass meine Problemumgehung nicht unterbrochen wird, nachdem der Fehler behoben wurde. Entschuldigung für die Lesbarkeit der Python-Version.