我正在寻找一种zgrep
hdfs
文件方式
就像是:
hadoop fs -zcat hdfs://myfile.gz | grep "hi"
Run Code Online (Sandbox Code Playgroud)
或者
hadoop fs -cat hdfs://myfile.gz | zgrep "hi"
Run Code Online (Sandbox Code Playgroud)
它对我来说真的不起作用,无论如何都可以通过命令行来实现吗?
小智 6
此命令行将自动为任何简单的文本文件找到正确的解压缩器,并将未压缩的数据打印到标准输出:
hadoop fs -text hdfs:///path/to/file [hdfs:///path/to/another/file]
Run Code Online (Sandbox Code Playgroud)
我已将其用于 .snappy 和 .gz 文件。它可能适用于 .lzo 和 .bz2 文件。
这是一项重要功能,因为 Hadoop 对 Snappy 文件使用自定义文件格式。这是解压缩 Hadoop 创建的 Snappy 文件的唯一直接方法。没有像其他压缩器那样的命令行“unsnappy”命令。我也不知道有任何直接命令可以创建一个命令。我只将它们创建为 Hive 表数据。
注意:hadoop fs -text
是单线程的,在运行命令的机器上运行解压。
zless/zcat/zgrep只是 shell 包装器,它使gzip将解压缩的数据输出到标准输出。为了做你想做的,你只需要围绕hadoop fs命令编写一个包装器。
旁白:这可能对您不起作用的原因是您在 hdfs URI 中缺少一个额外的斜线。
你写了:
hadoop fs -cat hdfs://myfile.gz | zgrep "hi"
Run Code Online (Sandbox Code Playgroud)
这会尝试联系名为myfile.gz的主机或集群。您真正想要的是hdfs:///myfile.gz或(假设您的配置文件设置正确),只是myfile.gz,hadoop 命令应该在前面加上fs.defaultFS定义的正确 cluster/namenode 路径。
以下对我有用。
$ 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18981 次 |
最近记录: |