【问题标题】:Number of subdirectories in a directory?一个目录中有多少个子目录?
【发布时间】:2016-08-11 00:34:36
【问题描述】:

如何在HDFS中查找指定目录下的子目录个数?


当我执行hadoop fs -ls /mydir/ 时,我收到一个Java 堆空间错误,因为目录太大,但我感兴趣的是该目录中子目录的数量。我试过了:

gsamaras@gwta3000 ~]$ hadoop fs -find /mydir/ -maxdepth 1 -type d -print| wc -l
find: Unexpected argument: -maxdepth
0

我知道目录不为空,所以0不正确:

[gsamaras@gwta3000 ~]$ hadoop fs -du -s -h /mydir
737.5 G  /mydir

【问题讨论】:

  • 我不明白ls 命令如何导致堆空间错误。它应该只是列出目录。
  • 我认为只有路径和表达式对 -find 命令有效,这就是为什么你得到 0 - 你有一个错误。
  • @cricket_007 可能它需要在 HDFS 中进行一些计算,我不确定,这就是为什么我认为应该给予支持,我让你今天学到了一些东西(开玩笑)!我已经看到了这两个问题,实际上还有更多,但是无论我从 命令行 尝试过什么都不会成功,我确实尝试过(例如刚才)hadoop fs -ls -R /mydir 并得到了OutOfMemoryError: Java heap space: failed reallocation of scalar replaced objects.

标签: linux hadoop apache-spark hdfs redhat


【解决方案1】:

使用的命令是: hdfs dfs -ls -R /path/to/mydir/ | grep "^d" | wc -l

但这也会给你错误java.lang.OutOfMemoryError: Java heap space。为了避免报错,需要增加java堆空间,运行同样的命令:

export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Xmx5g" 然后

hdfs dfs -ls -R /path/to/mydir/ | grep "^d" | wc -l .....#对于所有子目录

hdfs dfs -ls /path/to/mydir/ | grep "^d" | wc -l .....#For maxdepth=1

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 2021-08-04
    • 2020-05-01
    • 2012-04-01
    • 2020-08-26
    • 2022-07-02
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    相关资源
    最近更新 更多