我構建了hadoop集羣。我們一定會寫一個shell腳本去每一個節點上去jps,查看每個節點的進程情況。
原先以爲shell很簡單:
#!/bin/bash
#查看每個節點運行情況
for((host=101;host<108;host++));do
echo -----------hadoop$host-------------
ssh hadoop$host "jps"
done
這裏默認服務器節點的名字是hadoop101-hadoop107
默認已經配置了ssh_key的公鑰和私鑰
看是運行這段程序的時候會彈出一個錯誤:
-bash: jps: command not found
錯誤原因:
在shell腳本寫的ssh到其他節點的時候默認是不加載配置文件的。linux並不能去找到java中jps的命令。
- 解決方案一:在ssh到其他節點的時候source 一下配置文件。
具體操作爲:ssh hadoop$host “source /etc/profile;jps” - 解決方案二:在ssh到其他節點的時候輸入jps命令下的絕對路徑。
在筆者的linux的jdk的絕對路徑爲:/opt/module/jdk1.8.0_144/bin這個目錄下就有jps的命令。
具體操作爲:ssh hadoop$host “/opt/module/jdk1.8.0_144/bin/jps” - 解決方案三:在當前用戶的家目錄中輸入命令ll -a會顯示隱藏文件,修改配置文件.bashrc。
.bashrc 是當你登入shell時執行
在其中添加JDK的環境變量 - 解決方案四:在/etc/profile.d目錄下創建一個以sh結尾的文件。將profile配的環境變量拷貝到這個文件目錄下
運行結果:
-----------hadoop101-------------
10720 DataNode
10993 NodeManager
10573 NameNode
19663 Jps
-----------hadoop102-------------
37744 Jps
31282 NodeManager
31154 ResourceManager
31036 DataNode
-----------hadoop103-------------
30725 NodeManager
30620 SecondaryNameNode
30511 DataNode
41135 Jps
-----------hadoop104-------------
30995 DataNode
31109 NodeManager
37483 Jps
-----------hadoop105-------------
30882 NodeManager
30766 DataNode
37358 Jps
-----------hadoop106-------------
8816 Jps
2592 NodeManager
2477 DataNode
-----------hadoop107-------------
37445 Jps
31035 DataNode
31151 NodeManager