hadoop啟動後的pid檔案預設配置是儲存在/tmp
目錄下的,而linux下 /tmp 目錄會定時清理,所以在集群執行一段時間後如果在停hadoop相關服務是會出現類似:no datanode to stop
的錯誤提示,一般生產環境中我們需要重新修改pid的儲存路徑。
由於機器伺服器維護需要,要求hadoop集群的一台伺服器停止服務,於是我就到那台伺服器去停止hadoop的datanode和tasktracker,執行以下命令:
bin/hadoop-daemon.sh stop datanode
竟然輸出:
no datanode to stop
但是檢視程序,卻發現datanode和tasktracker都還在執行,嘗試了好幾次都是同樣結果,最後我試圖使用namenode的命令停止:
bin/stop_dfs.sh
還是輸出:
no datanode to stop
不得已,只好使用暴力手段,直接kill -9 程序了。
在殺死hadoop程序之後,bin/hadoop-daemon.sh又可以正常使用了。不知道其他的hadoop使用者是否遇到過此問題??
但是問題不能就這麼算了,在網上查了下資料,沒找到滿意的結果。沒辦法,自己看**吧!
在看了hadoop-daemon.sh**後,我發現指令碼是通過pid檔案來停止hadoop服務的,而我的集群配置是使用的預設配置,pid檔案位於/tmp目錄下,於是我對比了/tmp目錄下hadoop pid檔案中的程序id和ps ax查出來的程序id,發現兩個程序id不一致,終於找到了問題的根源。
呵呵,趕緊去更新hadoop的配置吧!
修改hadoop-env.sh中的:hadoop_pid_dir = hadoop安裝路徑
然後根據集群hadoop程序的pid在hadoop安裝路徑下建立相應的pid檔案:
hadoop-hadoop執行使用者名稱-datanode.pid
hadoop-hadoop執行使用者名稱-tasktracker.pid
hadoop-hadoop執行使用者名稱-namenode.pid
hadoop-hadoop執行使用者名稱-jobtracker.pid
hadoop-hadoop執行使用者名稱-secondarynamenode.pid
hadoop程序pid檔案問題
由於機器伺服器維護需要,要求hadoop集群的一台伺服器停止服務,於是我就到那台伺服器去停止hadoop的datanode和tasktracker,執行以下命令 bin hadoop daemon.sh stop datanode 竟然輸出 no datanode to stop 但是檢視程序,卻發...
hadoop中pid檔案的坑
先說說pid檔案的預設位置為什麼必須修改,原因在我的hadoop部署那節也提到過是因為 tmp目錄下的檔案有30天不訪問的話就會自動清理。它的作用是程序的啟動和停止都需要依賴此對應的pid檔案 pid檔案預設是儲存在 tmp下的,如下圖 經過第二步的測試,修改pid檔案的話會影響hadoop的重啟,...
程序標識(pid)
每個linux下的程序都會分配唯一乙個程序標識 pid pid是個16位元的整數。pid就是process id type 的縮寫,c程式用到程序標識時,通常會用pid t來宣告程序標識變數,通過getpid 來獲得程序pid。通過getppid來獲得父程序的pid。讓我們來看一下pid的定義 開啟...