我正在寻找一个方法来zgrep hdfs文件
就像是:
hadoop fs -zcat hdfs://myfile.gz | grep "hi"
要么
hadoop fs -cat hdfs://myfile.gz | zgrep "hi"
它不真的为我工作是否有用命令行来实现这一点?
zless / zcat / zgrep只是使得gzip输出解压缩数据到stdout的shell包装。 要做你想做的事情,你只需要编写一个Hadoop fs命令的包装器。
另外:这可能不适合你的原因是,你缺less一个额外的斜杠你的hdfs的URI。
你写了:
hadoop fs -cat hdfs://myfile.gz | zgrep "hi"
这将尝试联系名为myfile.gz的主机或群集。 你真正想要的是hdfs:///myfile.gz或者(假设你的configuration文件设置正确),只是myfile.gz ,hadoop命令应该加上fs.defaultFS定义的正确的cluster / namenodepath。
以下为我工作。
$ hadoop fs -ls hdfs:///user/hcoyote/foo.gz Found 1 items -rw-r--r-- 3 hcoyote users 5184637 2015-02-20 12:17 hdfs:///user/hcoyote/foo.gz $ hadoop fs -cat hdfs:///user/hcoyote/foo.gz | gzip -c -d | grep -c Authorization 425893 $ hadoop fs -cat hdfs:///user/hcoyote/foo.gz | zgrep -c Authorization 425893
该命令行将自动为任何简单的文本文件find正确的解压缩器,并将未压缩的数据打印到标准输出:
hadoop fs -text hdfs:///path/to/file [hdfs:///path/to/another/file]
我用这个.snappy&.gz文件。 它可能适用于.lzo和.bz2文件。
这是一个重要的function,因为Hadoop使用Snappy文件的自定义文件格式。 这是解压Hadoop创build的Snappy文件的唯一直接方式。 没有像其他压缩机那样的命令行“不愉快”的命令。 我也不知道有什么直接的命令可以创build一个。 我只创build它们作为Hive表数据。
注意: hadoop fs -text是单线程的,并在运行命令的机器上运行解压缩。
我通常使用hdfs保险丝座,所以几乎可以使用任何常规的Unix命令(由于hdfs不符合POSIX标准的文件系统,某些命令可能不起作用)。
gunzip解/ ZCAT
$ gunzip /hdfs_mount/dir1/somefile.gz $ grep hi /hdfs_mount/dir1/somefile.gz
在hdfs保险丝座上工作得很好。 而且input的速度也快:),如果你想要编写脚本,就更容易阅读。
将hadoop安装为“常规”文件系统: http : //www.cloudera.com/content/cloudera/en/documentation/cdh4/latest/CDH4-Installation-Guide/cdh4ig_topic_28.html