以下是记录一些操作Linux及hadoop集群等的一些群体操作脚本,比如有启动 / 关闭hadoop集群脚本,启动 / 关闭zookeeper集群脚本,查看每台服务器上的java进程脚本,集群分发脚本等。
将脚本编写完毕后需要配置到环境变量中,才可以在任何目录下进行使用!
操作详细讲解:
1.集群配置分发脚本:
2) rsync
rsync远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
(1)查看rsync使用说明
man rsync | more
(2)基本语法
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
命令 命令参数 要拷贝的文件路径/名称 目的用户@主机:目的路径
(3)选项说明
选项
功能
-r
递归
-v
显示复制过程
-l
拷贝符号连接
(4)案例实操
把本机/opt/software目录同步到hadoop102服务器的root用户下的/opt/目录
[memories@hadoop101 opt]$ rsync -rvl /opt/software/* hadoop102:/opt/software/
3)脚本需求分析:循环复制文件到所有节点的相同目录下。
(1)原始拷贝:
rsync -rvl /opt/module root@hadoop103:/opt/
(2)期望脚本:
xsync要同步的文件名称
(3)在/home/memories/bin这个目录下存放的脚本,memories用户可以在系统任何地方直接执行。
4)脚本实现:
(1)在/home/memories目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:
[memories@hadoop102 ~]$ mkdir bin
[memories@hadoop102 ~]$ cd bin/
[memories@hadoop102 bin]$ touch xsync
[memories@hadoop102 bin]$ vi xsync
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=102; host<104; host++)); do
echo --------------------- hadoop$host ----------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
(2)修改脚本 xsync 具有执行权限
[memories@hadoop102 bin]$ chmod 777 xsync
(3)调用脚本形式:xsync 文件名称
[memories@hadoop102 bin]$ xsync /home/memories/bin
2.Zookeeper集群自动启动停止脚本
前提条件:
1、下面以主机hadoop1、hadoop2、hadoop3作为zookeeper集群。
2、以上机器之间已经配置好了ssh免密码登录。
startzk-all.sh 启动脚本内容如下:
#!/bin/bash
echo “Starting zk cluster ......”
for i in {1..3}
do
ssh hadoop$i "source /etc/profile;/opt/zookeeper-3.4.5/bin/zkServer.sh start"
done
stopzk-all.sh 停止脚本内容如下:
#!/bin/bash
echo “Stoping zk cluster ......”
for i in {1..3}
do
ssh hadoop$i "source /etc/profile;/opt/zookeeper-3.4.5/bin/zkServer.sh stop"
done
3.一起查看集群中的jps进程
#!/bin/bash
for i in cMaster cSlave0 cSlave1
do
echo "================ $i ================"
ssh $i '/opt/module/jdk1.8.0_144/bin/jps'
done
操作集群脚本:
1.群启zookeeper
<!--修改版-->
#!/bin/bash
echo “Starting zk cluster ......”
for host in {cMaster cSlave0 cSlave1}
do
echo "============================== $host starting zookeeper.....=============================="
ssh $host "source /etc/profile;/opt/module/zookeeper-3.4.5/bin/zkServer.sh start"
done
2.群关zookeeper
<!--修改版-->
#!/bin/bash
echo “Stoping zk cluster ......”
for host in {cMaster cSlave0 cSlave1}
do
echo "============================== $host stoping zookeeper.....=============================="
ssh $host "source /etc/profile;/opt/module/zookeeper-3.4.5/bin/zkServer.sh stop"
done
<!--***************************************************************************************************-->
3.自定义集群配置文件分发脚本:
(1)在/home/memories目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:
[memories@hadoop102 ~]$ mkdir bin
[memories@hadoop102 ~]$ cd bin/
[memories@hadoop102 bin]$ touch xsync
[memories@hadoop102 bin]$ vi xsync
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for host in cMaster cSlave0 cSlave1
do
echo --------------------- xsync to $host ...... ----------------
rsync -rvl $pdir/$fname $user@$host:$pdir
done
(2)修改脚本 xsync 具有执行权限
[memories@hadoop102 bin]$ chmod 777 xsync
(3)调用脚本形式:xsync 文件名称
[memories@hadoop102 bin]$ xsync /home/memories/bin
<!--***************************************************查看集群中所有机器上的JPS进程********************************************************-->
4.一起查看集群中的jps进程
#!/bin/bash
for i in cMaster cSlave0 cSlave1
do
echo "================ $i JPS 进程 ================"
<!--该路径为jdk的路径-->
ssh $i '/usr/local/jdk1.8.0_144/bin/jps'
done
<!--************************************************群启及关闭Hadoop脚本(在不同机器上启动HDFS和Yarn)***********************************************************-->
5.群启Hadoop相关服务脚本:
#!/bin/bash
echo "================ 开始启动Hadoop所有节点服务 ==========="
echo "================ 正在启动HDFS ==========="
ssh root@cSlave0 '/usr/local/hadoop/hadoop-2.9.1/sbin/start-dfs.sh'
echo "================ 正在启动YARN ==========="
ssh root@cMaster '/usr/local/hadoop/hadoop-2.9.1/sbin/start-yarn.sh'
echo "================ 正在开启JobHistoryServer ==========="
ssh root@cSlave0 '/usr/local/hadoop/hadoop-2.9.1/sbin/mr-jobhistory-daemon.sh start historyserver'
6.群关Hadoop相关服务脚本:
#!/bin/bash
echo "================ 开始关闭所有节点服务 ==========="
echo "================ 正在关闭HDFS ==========="
ssh root@cSlave0 '/usr/local/hadoop/hadoop-2.9.1/sbin/stop-dfs.sh'
echo "================ 正在关闭YARN ==========="
ssh root@cMaster '/usr/local/hadoop/hadoop-2.9.1/sbin/stop-yarn.sh'
echo "================ 正在关闭JobHistoryServer ==========="
ssh root@cSlave0 '/usr/local/hadoop/hadoop-2.9.1/sbin/mr-jobhistory-daemon.sh stop historyserver'
<!--************************************************群启及关闭zk脚本(在不同机器上启动zk)***********************************************************-->
7.startzk-all.sh 启动脚本内容如下:
#!/bin/bash
echo “Starting zk cluster ......”
for i in cMaster cSlave0 cSlave1
do
echo "*******************************正在启动 $i 的zookeeper*******************************"
ssh hadoop$i "source /etc/profile;/opt/module/zookeeper-3.4.10/bin/zkServer.sh start"
done
8.stopzk-all.sh 停止脚本内容如下:
#!/bin/bash
echo “Stoping zk cluster ......”
for i in cMaster cSlave0 cSlave1
do
echo "*******************************正在关闭 $i 的zookeeper*******************************"
ssh hadoop$i "source /etc/profile;/opt/module/zookeeper-3.4.10/bin/zkServer.sh stop"
done