为了在我们的 IBM GPFS 集群中递归删除文件,我们使用简单的 unix 命令,例如:
rm /my/directories -fr
然而删除操作需要花费很长时间。
问题是我们的分布式应用程序(基于 Spark)需要花费一些时间one hour
才能完成。但随后,它还会took about an other hour
删除由 Spark 等分布式应用程序生成的临时文件。
因此,全局工作负载效率很低。可能是因为该rm
命令必须列出每个子目录。
无论如何,您知道如何使用 GPFS 有效地删除整个目录(和子目录)吗?
IBM 是否可以给出特殊命令来执行此操作?
答案1
我认为您无法加快此过程,因为“rm”会触发分布式文件系统的大量元数据更新,并且需要相当长的时间才能完成。您可以尝试向同一文件系统中的某个临时文件夹发出“mv”(!!!),然后在后台执行实际的“rm”。
答案2
您可以使用比‘rm’快得多的 gpfs 策略。
这是一个例子,例如我想删除 /gpfs2/mysql/performance_schema/ 下的所有文件
该策略文件为:
规则‘my_del’删除 DIRECTORIES_PLUS 其中 PATH_NAME 类似于‘/gpfs2/mysql/performance_schema/%’
然后我可以使用以下命令运行该策略:
mmapplypolicy /gpfs2/mysql -P del.pol
您可以参考这两个链接了解有关策略和 DELETE 规则的一些解释:
实际上在 /usr/lpp/mmfs/samples/ilm 下有一个 'mmfile' 工具。您需要先通过 :make -f mmfindUtil_processOutputFile.sampleMakefile 编译 mmfindUtil_processOutputFile
mmfile 具有与“find”完全相同的语法,但它使用 GPFS 策略,因此它的运行速度比 GPFS 文件系统的 find 快得多。例如,您可以使用:mmfind sub1/| xargs rm -f 来删除文件。
您也可以关注我@guanglei_li,并可以通过“https://www.ibm.com/mysupport/s/”获得更多支持。