Hadoop學習筆記-004-CentOS_6.5_64_批處理命令腳本

參考:http://blog.csdn.net/u010270403/article/details/51444677java

虛擬機中共五個centos系統,每一個系統有兩個用戶root和hadoop:cdh1,cdh2,cdh3,cdh4,cdh5node

集羣規劃shell

 

第一步,切換到hadoop的家目錄下,而後在hadoop家目錄下建立  tools目錄(只在一臺機器便可,以cdh1爲例)centos

建立tools目錄bash

#mkdir tools

 

 

第二步,在tools目錄下建立三個批處理文件:deploy.conf、deploy.sh、runRemoteCmd.sh(由於後續還要用Hadoop爲這三個文件賦權限,且只有Hadoop用戶會用這些文件,因此這三個文件用Hadoop用戶建立)app

建立deploy.confssh

#vi deploy.conf

 

cdh1,all,namenode,journalnode,resourcemanager,
cdh2,all,namenode,journalnode,slave,resourcemanager,
cdh3,all,zookeeper,slave,journalnode,datanode,nodemanager,
cdh4,all,zookeeper,slave,journalnode,datanode,nodemanager,
cdh5,all,zookeeper,slave,journalnode,datanode,nodemanager,

建立deploy.shoop

#vi deploy.sh

 

#!/bin/bash  
#set -x  
  
#判斷參數是否小於3個,由於運行deploy.sh須要有源文件(或源目錄)和目標文件(或目標目錄),  
#以及在MachineTag(哪些主機)上執行,這個標記就是上面deploy.conf中的標記 ,如 zookeeper、all等  
#使用實例如:咱們把app目錄下的全部文件複製到遠程標記爲zookeeper的主機上的/home/hadoop/app目錄下  
# ./deploy.sh  /home/hadoop/app /home/hadoop/app zookeeper  
#執行完上述命令後,shell腳本文件就自動把CDHNode1下的app目錄中的文件複製到三個zookeeper節點的app目錄下  
if [ $# -lt 3 ]    
then   
  echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag"  
  echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag confFile"  
  exit   
fi  
#源文件或源目錄  
src=$1  
#目標文件或目標目錄  
dest=$2
#標記  
tag=$3  
  
#判斷是否使用deploy.conf配置文件,或者本身指定配置文件  
  
if [ 'a'$4'a' == 'aa' ]  
then  
  confFile=/home/hadoop/tools/deploy.conf  
else   
  confFile=$4  
fi  
  
#判斷配置文件是不是普通文本文件  
if [ -f $confFile ]  
then  
#判斷原件是普通文件仍是目錄  
 if [ -f $src ]  
  then  
#若是是普通文件就把解析出標記對應的主機名的ip  
 for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`   
    do  
       scp $src $server":"${dest}  #使用循環把文件複製到目標ip上的相應目錄下  
       echo "循環"$src $server":"${dest}
    done   
  elif [ -d $src ]  
  then  
    for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`   
    do  
       scp -r $src $server":"${dest}  
       echo "循環"$src $server":"${dest}
    done   
  else  
      echo "Error: No source file exist"  
  fi  
  
else  
  echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"  
fi

建立runRemoteCmd.sh#vi runRemoteCmd.shspa

#!/bin/bash  
#set -x  
#判斷參數個數  
#實例如:顯示全部節點的java進程,中間用引號的就是命令,這個命令將在因此節點上執行  
#./runRemoteCmd.sh  "jps" all  
if [ $# -lt 2 ]  
then   
  echo "Usage: ./runRemoteCmd.sh Command MachineTag"  
  echo "Usage: ./runRemoteCmd.sh Command MachineTag confFile"  
  exit   
fi  
  
cmd=$1  
tag=$2  
if [ 'a'$3'a' == 'aa' ]  
then  
   
  confFile=/home/hadoop/tools/deploy.conf  
else   
  confFile=$3  
fi  
  
if [ -f $confFile ]  
then  
    for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'`   
    do  
       echo "*******************$server***************************"  
       ssh $server "source /etc/profile; $cmd"    
# 注意在使用的時候要根據本身設置的環境變量的配置位置,給定相應的source源 ,  
# 如 我把環境變量設/home/hadoop/.bash_profile文件下,就須要上面這條命令改成  
# ssh $server "source /home/hadoop/.bash_profile;$cmd"  
#上面的例子:這條命令就是在遠程標記爲tag的主機下執行這個命令jps。  
 done   
else  
  echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"  
fi 

第三步,給腳本文件添加執行權限.net

#chmod u+x deploy.sh

#chmod u+x runRemoteCmd.sh

 

 

第五步,在cdh1節點上,經過runRemoteCmd.sh腳本,一鍵建立全部節點的軟件安裝目錄/home/hadoop/app    

# ./runRemoteCmd.sh "mkdir /home/hadoop/app" all

 

查看cdh1和cdh2家目錄

cdh1

 

cdh2

 

在cdh1上進入~/tools,執行runRemoteCmd.sh腳本,並查看Hadoop家目錄

cdh1

 

cdh2

 

 

完成!

相關文章
相關標籤/搜索