問題描述:啓動Hadoop的NFS失敗。
查看日誌:顯示Failed to delete file or dir [/tmp/.hdfs-nfs]: it still exists.
原因:說明當前用戶對/tmp目錄沒有權限;
解決方法:可以用root用戶手動刪除該目錄;也可以對當前用戶賦予對/tmp操作的權限。本人採用暴力方式,手動刪除該/tmp/.hdfs-nfs目錄,重新啓動NFS,成功。
新問題:這樣對導致一個新問題。
當我修改了基本配置,需要停止集羣時,出現如下錯誤:
命令: ./stop-all.sh
Stopping namenode on [nn0]
nn0: no namenode to stop.
dn1: no datanode to stop.
Stopping secondary namenodes [nn0]
nn0: no secondarynamenode to stop
即:停止hadoop相應服務失敗,顯示後臺沒有相應進程在運行。可是事實是相應進程正在運行,且成功提供服務。
查找原因:本人通過調用stop-all.sh腳本執行關閉進程任務,該腳本實際調用stop-dfs.sh和stop-yarn.sh執行關閉任務,而其又分別調用hadoop-daemon.sh和yarn-daemon.sh。查看hadoop-deamon.sh腳本,實際是通過pid來停止相應Hadoop進程。也即是說,Hadoop在停止相應進程時,是通過kill掉相應pid實現。
而集羣默認配置的pid文件位於/tmp目錄下,在解決上一個問題時,把/tmp目錄刪除了,所以導致找不到pid。
網上資料說,linux系統默認每30天清理一次/tmp目錄下的文件,pid文件丟失將導致無法正確關閉相應進程。
解決方法:
通過jps獲取進程號,然後用kill -9 pid殺掉對應進程,停止集羣。
要徹底解決這個問題,最好是修改pid的存放路徑。修改配置文件/hadoop-env.sh,增加export HADOOP_PID_DIR=指定pid文件存放路徑。