HDFS 如何计算集群上的文件数量及其大小?

kr98yfug  于 2023-04-27  发布在  HDFS
关注(0)|答案(1)|浏览(271)

如果一个集群上的文件是由不同的用户创建的,那么如何统计该集群上的文件数量和大小?即一个用户创建了10个文件,另一个用户创建了20个文件,第一个文件的大小是2GB,第二个文件的大小是4GB。bash或python中的哪个命令可以用来统计?
allUsers = os.popen('cut-d:- f1/user/hive/warehouse/yp.db').read().split('\ n')[:-1]
对于所有用户中的用户:print(os.system('du-s/user/hive/warehouse/yp.db ' + str(users)))

4dbbbstv

4dbbbstv1#

Preamble

我在这里做一些假设。
1.您正在从中阅读信息的文件yp.db很可能是NIS服务Map文件。如果这是真的,你需要先使用db_dump来提取信息,或者(更好地)找到创建它的人类可读的源文件。为了这个问题的目的,我假设你有那个文件,并且你的文件是passwd-类似的格式(username:some:other:unrelated:fields:home_directory:shell),被恰当地称为human_readable_users_file。注意,主目录是第6个字段。
1.您试图列出每个用户的主目录的大小,而不是只包含“工作”文件的子目录。
1.您可以查看所有的用户文件。根据设置,这可能意味着(按可能性顺序)您需要root,或者您需要在特定的机器上运行此程序,从而获得访问权限。如果安全性不高,您可能只能以普通用户身份运行它(这是最不可能的一种)。

  • 在我们开始之前还有一件事。* 避免使用Python来做bash工作。它效率低,更难维护(人们需要理解这两点)。当你可以的时候,只使用bash来做与系统相关的事情,Python只做......好吧,Python的事情。
查找用户目录

你可以从用户数据库文件中读取目录如果你知道格式并且它是稳定的,或者让bash以~username的形式为你找到它。
我们将使用前者,因为这是您已经在尝试的,而且它根本不需要解析用户名字段。

拼起来

du -sch $(cut -d: -f6 /user/hive/warehouse/human_readable_users_file)

这将从human_readable_users_file中提取所有主目录(第6个字段由:分隔),并将它们馈送到单个du以打印大小(-s选项)。这使du也可以在末尾打印总计数(-c选项)。最后,它将打印人类可读的大小(-h选项),例如45G,而不是46721185。如果您稍后尝试使用这些数字进行精确计算,则可以删除h

荣誉奖

如果一个命令行中容纳不下太多的用户(bash会抱怨),则需要使用带有--files0-from选项的du,这将使它从stdin读取列表,而不是将其作为命令行参数传递。

相关问题