Hadoop学习笔记-004-CentOS_6.5_64_批处理命令脚本

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

虚拟机中共五个centos系统,每个系统有两个用户root和hadoop:cdh1,cdh2,cdh3,cdh4,cdh5

集群规划

第一步,切换到hadoop的家目录下,然后在hadoop家目录下创建  tools目录(只在一台机器即可,以cdh1为例)

创建tools目录

#mkdir tools

第二步,在tools目录下创建三个批处理文件:deploy.conf、deploy.sh、runRemoteCmd.sh(因为后续还要用Hadoop为这三个文件赋权限,且只有Hadoop用户会用这些文件,所以这三个文件用Hadoop用户创建)

创建deploy.conf

#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.sh

#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.sh

#!/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 

第三步,给脚本文件添加执行权限

#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

完成!

原文地址:https://www.cnblogs.com/liudi1992/p/6343356.html