-3

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

4

1 回答 1

1

很好地调用 shell 命令迭代,你有 JVM 启动时间来应对每次迭代,而 API 方法你只有一个 JVM 启动。按照这些思路,您必须多次连接到名称节点等。

于 2013-05-10T21:56:50.283 回答