大数据集群需要的shell脚本
在大数据开发平台上,我们经常需要在各个机器上启动各种服务,非常麻烦和繁琐且浪费时间
在这里总结了几个经常用到的shell脚本,方便学习和开发
这里需要用到的脚本因为都是操作多台服务器,所以需要用到ssh,如多我们不配置ssh 免密登录,每次调用都会需要我们登录密码,所以运用这些脚本之前应该先配置好集群间的ssh免密登录,如果没有ssh服务的要先去安装ssh服务
学习用的脚本,不是很严谨,望交流心得
ssh免密登录
ssh-keygen
操作之后一直回车直到结束,然后分发公钥给需要用到的服务器
ssh-copy-id ip
第一次需要输入密码生成秘钥和公钥
.ssh文件夹下(~/.ssh)的文件功能解释
known_hosts | 记录ssh访问过计算机的公钥(public key) |
---|---|
id_rsa | 生成的私钥 |
id_rsa.pub | 生成的公钥 |
authorized_keys | 存放授权过的无密登录服务器公钥 |
一 群发脚本
这是一个经常需要用到的频繁的功能,因为大数据分布式开发,需要多台服务器都要安装各种服务来支持开发,这就免不了在所有机器上都要耗费一定时间去做这些操作,并且当机器集群较多时,将是一个枯燥且烦躁的工作
群发脚本是基于rsync命令
rsync -av file user@ip:pdir
-a 表示递归分发
-v 表示显示详细信息
file 需要分发的文件
user 需要分发的用户(如果与当前登录用户是同一个可以省略)
ip 需要分发给的服务器地址
pdir 文件所在的父目录
分发shell脚本
#!/bin/bash
if [ $# -lt 1 ]
then
echo "参数不能少于一个"
exit
fi
for host in ip1 ip2 ip3 ...
do
echo "==================$host=================="
for file in $@
do
if [ -e $file ]
then
pdir=$(cd -P $(dirname $file);pwd)
fname=$(basename $file)
ssh $host mkdir -p $pdir
rsync -av $pdir/$fname $host:$pdir
else
echo "$file 文件不存在"
fi
done
done
二 查看多台服务器的正在运行的进程
for host in ip1 ip2 ip3...
do
echo "=============$host================"
ssh $host jps
done
三 群起hadoop集群
一般我们把hdfs和yarn配置在不同的服务器上,因为都很消耗机器的性能,可是这样需要切换机器的操作,用脚本命令来群起和群关
case $1 in
"start")
ssh ip1 start-dfs.sh
ssh ip2 start-yarn.sh
ssh ip3 mapred --daemon start historyserver #启动历史服务器
;;
"stop")
ssh ip1 stop-dfs.sh
ssh ip2 stop-yarnsh
ssh ip3 mapred --daemon stop historyserver
;;
esac