【问题标题】:How to count lines in a file on hdfs command?如何在 hdfs 命令上计算文件中的行数?
【发布时间】:2020-03-27 17:00:58
【问题描述】:

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

在linux中,我可以做到:

wc -l <filename>

我可以用“hadoop fs”命令做类似的事情吗?我可以打印文件内容:

hadoop fs -text /user/mklein/testfile

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

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

【问题讨论】:

    标签: hadoop


    【解决方案1】:

    文件总数: 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

    【讨论】:

    • 比起公认的答案,我更喜欢这个答案。接受的一个似乎是很多开销,这是完美的答案。干得好!
    • 请注意,这会将 hdfs 文件夹中的所有数据提取到本地计算机并在本地进行行数计算。如果数据量很大,由于网络 IO 和内存使用的瓶颈,这可能会非常慢。对于大数据,map-reduce/pig 方法会更好。
    • @ScottH 不错的评论,对于非常大的集合,我会担心 IO,但您确定内存使用是个问题吗?从hadoop fs -cat something | head 的工作方式来看,我希望数据会随着您的使用而“减少”。
    • @DennisJaheruddin 听起来可能会“减少”。我没有测试过。如果你弄清楚记忆是否真的是一个问题,我很想听听。
    • hdfs路径过大会需要很长时间吗?
    【解决方案2】:

    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。顶部(标题)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`
    

    【讨论】:

      【解决方案3】:

      你不能用hadoop fs 命令来做到这一点。您必须使用post 中解释的逻辑编写 mapreduce 代码,否则这个 pig 脚本会有所帮助。

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

      确保您的 snappy 文件具有正确的扩展名,以便 pig 可以检测和读取它。

      【讨论】:

      • 这不是真正正确的方法,下面是简单的方法
      • 如果您必须处理大数据,简单的方法将无法扩展。其他选项:创建一个包含一列的外部 Hive 表并计算行数或使用简单的 Spark 作业。
      猜你喜欢
      • 2021-12-26
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 2011-11-23
      相关资源
      最近更新 更多