我在编写一个实用程序时遇到了一个性能问题,该实用程序在一个循环(从shell脚本调用shell命令)中迭代地从hdfs中删除文件和目录,这些都超过一周。在删除之前,我还要对每个文件/子目录执行某些检查,这样我就不能删除整个根目录。对于每次删除,shell命令大约需要2秒。因此,如果我必须删除1600个文件和子目录,则需要将近1小时才能完成它们。当我改为使用JAVA API(FileStatus和FileSystem)时,我获得了极大的性能提升。它在5秒内完成。我想详细了解这背后的根本原因。我读到shell命令(比如-rm)使用JAVA API,但这是造成响应时间差异的唯一原因吗?
答案 0 :(得分:1)
好好调用shell命令迭代,你有JVM启动时间来争用每次迭代,而API方法你只有一个JVM启动。沿着这些方向,您必须多次连接到名称节点等。