centos7搭建hadoop叢集之xcall指令碼
阿新 • • 發佈:2018-11-15
在一些特定場景下,需要所有節點同時執行相同的命令,比如主機hadoop1執行ls命令,其他節點主機也同時執行ls命令,實現這種效果快捷方式一般有兩種:
- 1.使用工具,同一傳送執行命令,如SecureCRT,同時連線所有節點,在視窗下面可以直接輸入需要同時執行的命令。
優點:如果命令後面帶有路徑,如ls /opt/demo,可以直接寫成ls demo/(前提是其他節點也有此目錄),寫成相對路徑,SecureCRT會正確的讓該命令在其他節點得到解析執行。
缺點:如果節點數目過多,啟動的連線視窗是否過多?- 2.使用xcall指令碼分發命令
優點:不侷限與節點數目,只要配置了ssh免密登入,一個命令即可(最好配置了hosts對映,指令碼連線以主機名,比ip方便)
缺點
用法:
- 1.以root使用者建立xcall指令碼
- 2.編寫指令碼
指令碼內容:
#!/bin/bash
pcount=$#
if((pcount==0));then
echo no args;
exit;
fi
echo -------------localhost----------
[email protected]
for((host=2; host<=3; host++)); do
echo ----------hadoop$host---------
ssh hadoop$host [email protected]
done
注:host是主機號,這裡一共三臺伺服器,通過其中一臺伺服器執行xcall分發命令,達到其他節點伺服器也同時執行相同的命令,配置了hosts對映,主機名和對應的ip
- 3.更改指令碼讀寫許可權
- 4.執行指令碼
- 5.結果圖:
注:這裡分別需要輸入其他節點的root密碼,因為沒有給執行xcall命令的使用者配置ssh免密登入,執行命令前可以先配置執行xcall命令的root使用者的ssh,可參考:https://blog.csdn.net/yhblog/article/details/84029535
如果這裡配置了ssh免密登入將不用輸入其他節點的root使用者密碼。