天天看點

CDH中為什麼用jps看不到namenode、datanode

疑問?️

Question:

CDH正常運作,但jps查詢不到程序;

  

Answer:

用ps -ef | grep namenode的指令可以查到;

解析
一、查詢目前登入賬戶權限問題

1、去hadoop安裝源目錄下,用ll指令檢視檔案的所屬者及權限,若歸屬于root則普通使用者可能沒有全部權限操作。則需要修改其對應權限

CDH中為什麼用jps看不到namenode、datanode
二、java配置的jps問題

1、jps的作用

jps類似linux的ps指令,不同的是ps是用來顯示程序,而jps隻顯示java程序,準确的說是目前使用者已啟動的部分java程序資訊,資訊包括程序号和簡短的程序command。

2、分析Question:

java程式啟動後,預設(請注意是預設)會在/tmp/hsperfdata_userName目錄下以該程序的id為檔案名建立檔案,并在該檔案中存儲jvm運作的相關資訊,其中的userName為目前的使用者名,/tmp/hsperfdata_userName目錄會存放該使用者所有已經啟動的java程序資訊。對于windows機器/tmp用Windows存放臨時檔案目錄代替;

而jps、jconsole、jvisualvm等工具的資料來源就是這個檔案(/tmp/hsperfdata_userName/pid)。是以當該檔案不存在或是無法讀取時就會出現jps無法檢視該程序号,jconsole無法監控等問題;

進入cms使用者的/tmp檔案夾下,查詢如下:

CDH中為什麼用jps看不到namenode、datanode

3、原因:

(1)磁盤讀寫、目錄權限問題

若該使用者沒有權限寫/tmp目錄或是磁盤已滿,則無法建立/tmp/hsperfdata_userName/pid檔案。或該檔案已經生成,但使用者沒有讀權限

(2)臨時檔案丢失,被删除或是定期清理

對于linux機器,一般都會存在定時任務對臨時檔案夾進行清理,導緻/tmp目錄被清空。這也是我第一次碰到該現象的原因。常用的可能定時删除臨時目錄的工具為crontab、redhat的tmpwatch、ubuntu的tmpreaper等等

這個導緻的現象可能會是這樣,用jconsole監控程序,發現在某一時段後程序仍然存在,但是卻沒有監控資訊了。

(3)java程序資訊檔案存儲位址被設定,不在/tmp目錄下

上面我們在介紹時說預設會在/tmp/hsperfdata_userName目錄儲存程序資訊,但由于以上1、2所述原因,可能導緻該檔案無法生成或是丢失,是以java啟動時提供了參數(-Djava.io.tmpdir),可以對這個檔案的位置進行設定,而jps、jconsole都隻會從/tmp目錄讀取,而無法從設定後的目錄讀物資訊,這是我第二次碰到該現象的原因

關于設定該檔案位置的參數為-Djava.io.tmpdir

其他:

/tmp/hsperfdata_userName/pid檔案會在對應java程序退出後被清除。如果java程序非正常退出(如kill -9),那麼pid檔案會被保留,直到執行一次java指令或是加載了jvm程式的指令(如jps、javac、jstat),會将所有無用的pid檔案都清除掉

參考連結:

https://blog.csdn.net/zlfprogram/article/details/77978539