如何在hdfs命令中计算文件中的行?

时间:2015-09-16 15:29:43

标签: hadoop

我在HDFS上有一个文件,我想知道有多少行。 (testfile的)

在linux中,我可以这样做:

wc -l <filename>

我可以使用“hadoop fs”命令执行类似的操作吗?我可以用以下方式打印文件内容:

hadoop fs -text /user/mklein/testfile

我怎么知道我有多少行?我想避免将文件复制到本地文件系统,然后运行wc命令。

注意:我的文件使用snappy压缩进行压缩,这就是为什么我必须使用-text而不是-cat

3 个答案:

答案 0 :(得分:66)

文件总数: hadoop fs -ls /path/to/hdfs/* | wc -l

总行数: hadoop fs -cat /path/to/hdfs/* | wc -l

给定文件的总行数: hadoop fs -cat /path/to/hdfs/filename | wc -l

答案 1 :(得分:4)

使用hadoop fs命令无法执行此操作。您必须使用此post中解释的逻辑编写mapreduce代码,否则此猪脚本会有所帮助。

A = LOAD 'file' using PigStorage() as(...);
B = group A all;
cnt = foreach B generate COUNT(A);

确保您的snappy文件具有正确的扩展名,以便猪可以检测并阅读它。

答案 2 :(得分:3)

  1. 映射器输出文件的行数:

    ~]$ hadoop fs -cat /user/cloudera/output/part-m-00000 | wc -l

  2. hdfs上的文本行数或任何其他文件:

    ~]$ hadoop fs -cat /user/cloudera/output/abc.txt | wc -l

  3. Top(Header)5行文本或hdfs上的任何其他文件:

    ~]$ hadoop fs -cat /user/cloudera/output/abc.txt | head -5

  4. hdfs上的文本或任何其他文件的底部10行:

    ~]$ hadoop fs -cat /user/cloudera/output/abc.txt | tail -10