2013-05-10 88 views
-3

我在编写一个实用程序时,在循环内(从shell脚本调用shell命令)迭代地删除hdfs中的文件和目录超过一周时,遇到了性能问题。此外,我还在删除前对每个文件/子目录执行了一些检查,以便我不能删除整个根目录。对于每次删除,shell命令花费大约2秒。所以,如果我不得不删除1600个文件和子目录,那么完成它们需要花费接近1个小时。当我使用JAVA API(FileStatus和FileSystem)时,我获得了巨大的性能提升。它在5秒内完成。我想详细了解这背后的根本原因。我读过shell命令(如-rm),主要使用JAVA API,但这是响应时间差异巨大的唯一原因吗?Hadoop shell命令VS Java API

回答

1

调用shell命令迭代,每个迭代都有JVM启动时间,而API方法只有一个JVM启动。沿着这些线路,您必须多次连接到名称节点等。