1. 程式人生 > >centos7搭建hadoop叢集之xcall指令碼

centos7搭建hadoop叢集之xcall指令碼

在一些特定場景下,需要所有節點同時執行相同的命令,比如主機hadoop1執行ls命令,其他節點主機也同時執行ls命令,實現這種效果快捷方式一般有兩種:
  • 1.使用工具,同一傳送執行命令,如SecureCRT,同時連線所有節點,在視窗下面可以直接輸入需要同時執行的命令。
  • 在這裡插入圖片描述
    在這裡插入圖片描述
    優點:如果命令後面帶有路徑,如ls /opt/demo,可以直接寫成ls demo/(前提是其他節點也有此目錄),寫成相對路徑,SecureCRT會正確的讓該命令在其他節點得到解析執行。
    缺點:如果節點數目過多,啟動的連線視窗是否過多?
  • 2.使用xcall指令碼分發命令
    優點:不侷限與節點數目,只要配置了ssh免密登入,一個命令即可(最好配置了hosts對映,指令碼連線以主機名,比ip方便)
    缺點
    :執行,命令後面如果帶有路徑引數,只能寫絕對路徑,不能寫相對路徑。如ls /opt/demo,不能寫成ls demo/(前提是其他節點也有此目錄)

用法:

  • 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使用者密碼。