2016-01-07 137 views
1

運行Hadoop系統將運行一些守護進程作業,如namenode,journalnode等。我將使用namenode作爲示例。Hadoop守護進程無法停止使用正確的命令

當我們開始的NameNode我們可以使用命令:hadoop-daemon.sh車站名稱節點:當我們停止的NameNode我們可以使用命令hadoop-daemon.sh啓動NameNode的

但是問題在於,如果我昨天或幾個小時前剛剛啓動了namenode,stop命令將正常工作。但是如果namenode一直工作了一個月。當我使用停止命令時,它將顯示:

no namenode stop。

但我可以看到使用命令JPS運行的守護程序NameNode。然後我必須使用kill命令來終止進程。

爲什麼會發生這種情況?任何方式來確保停止命令可以始終工作?

感謝

回答

1

之所以hadoop-daemon.sh一段時間後不能正常工作是因爲在hadoop-env.sh有參數叫做: 出口HADOOP_PID_DIR那些守護進程的 出口HADOOP_SECURE_DN_PID_DIR 其存儲PID號。該目錄的默認位置是/ tmp。問題是/ tmp文件夾會在某個時候自動清理(Red Hat Linux)。在這種情況下,pid文件被刪除,所以當我們運行daemon命令時,該命令無法找到存儲在該文件中的進程標識 。 與yarn-daemon.sh命令相同。

修改hadoop-env.sh: HADOOP_PID_DIR HADOOP_SECURE_DN_PID_DIR yarn-env.sh: YARN_PID_DIR mapred-env.sh: HADOOP_MAPRED_PID_DIR 到其他目錄,而不是使用缺省的/ tmp文件夾中應該解決的問題。 修改後,重新啓動與之相關的所有進程。 也出於安全考慮,包含pid的文件夾不能被其他非管理員用戶訪問。