Hadoop shell命令与Java API

Hadoop shell命令与Java API,java,api,hadoop,Java,Api,Hadoop,我在编写一个实用程序时遇到了一个性能问题,该实用程序在一个超过一周的循环内(从shell脚本调用shell命令)从hdfs中迭代删除文件和目录。在删除之前,我还要对每个文件/子目录执行某些检查,这样我就不能只删除整个根目录。对于每次删除,shell命令大约需要2秒。因此,如果我必须删除1600个文件和子目录,那么完成它们需要将近1小时。当我改用javaapi(FileStatus和FileSystem)时,我获得了巨大的性能提升。它在5秒内完成。我想详细了解这背后的根本原因。我读到shell命令

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

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