hadoop集群ssh打通之后,再进行一些统一的脚本执行等等操作时,可以通过脚本的方式进行,例如:全集群查看进程,统一分发配置文件等等。通过ssh+linux脚本,在namenode上就可以完成对整个集群的管理,这种方法也大大节省了集群的管理效率。
这一部分我们先介绍统一命令执行的相关操作:
- 脚本内容
if [ $# -lt 2 ]
then
echo "Usage: ./runRemoteCmd.sh Command MachineTag"
echo "Usage: ./runRemoteCmd.sh Command MachineTag confFile"
exit
fi
这里首先判断传输参数,脚本需要2个参数进行传递,1:需要执行的命令2:脚本执行机器tag。这个tag在下面介绍配置文件时进行描述。
cmd=$1
tag=$2
if [ 'a'$3'a' == 'aa' ]
then
confFile=/usr/local/soft/shell/deploy.conf
else
confFile=$3
fi
以上代码是对参数的描述,必要的参数即上面说到的1、2,参数3是可配置项,可根据自己本身命令的需求,重新定义配置文件。
if [ -f $confFile ]
then
for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $2}'`
do
echo "*******************$server***************************"
ssh $server "source /etc/profile; $cmd"
done
else
echo "Error: Please assign config file or run runRemoteCmd.sh command with deploy.conf in same directory"
fi
以上是本次分享代码的核心部分了,通过遍历标记tag的服务器,统一通过ssh的方法进入,并且执行相关命令。注意:执行命令之前,去要source你的环境变量,也就是source /etc/profile部分要按照你自己的环境修改。
- 配置文件
上面说到需要通过配置文件进行配置,对集群内的服务器进行tag操作,下面我们对配置文件进行描述:
namenode,all,nn,
datanode1,all,dn,
datanode2,all,dn,
datanode3,all,dn,
上述配置文件当中,dn、all就是对应服务器的标签,在实际管理过程中,标签的数量肯定会更多,通过逗号分隔的方式,向后添加服务器标签就可以了。
运行举例,假如我们的脚本名为run.sh,我们要查看整个集群的hadoop进程情况
run.sh "jps" all
“`
最后,个人建议,将脚本加入的path当中。