2013-05-10 87 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啓動。沿着這些線路,您必須多次連接到名稱節點等。