大数据集群搭建以及使用过程中几个实用的shell脚本
文章目录
- 前言
- 一、分发脚本
- 二、查看所有节点jps脚本
- 三、zookeeper启停脚本
- 四、hive中的hiveserver2和metastore启停脚本
前言
下面的所有脚本要想全局使用,需要将其放到 /usr/local/sbin
或者 /usr/local/bin
或者 /usr/sbin
或者 /usr/bin
下面,这样才能全局使用以下脚本
一、分发脚本
创建 xsync.sh 文件,并添加如下内容:
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
then
echo No Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in node02 node03
do
echo ==================== $host ====================
#3. 递归遍历所有目录
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取全路径
pdir=$(cd -P $(dirname $file); pwd)
echo pdir=$pdir
#6. 获取当前文件的名称
fname=$(basename $file)
echo fname=$fname
#7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
ssh $host "source /etc/profile;mkdir -p $pdir"
#8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下
rsync -av $pdir/$fname $USER@$host:$pdir
else
echo $file Does Not Exists!
fi
done
done
使用方法:
xsync.sh 后面跟上需要分发的文件
二、查看所有节点jps脚本
创建jpsall文件,添加如下内容:
#!/bin/bash
USAGE="使用方法:jpsall'"
NODES=("node01" "node02" "node03")
# 循环遍历三台节点,并获取jps进程,打印出来
for NODE in ${NODES[*]};do
echo "--------$NODE--------"
ssh $NODE "/opt/installs/jdk/bin/jps"
done
echo "--------jpsall脚本执行完成!--------"
使用方法:
在存放该脚本的节点上输入jpsall即可查看所有节点的jps进程
三、zookeeper启停脚本
创建 zk.sh 文件,并添加如下内容:
#!/bin/bash
# 获取参数
COMMAND=$1
if [ ! $COMMAND ]; then
echo "please input your option in [start | stop | status]"
exit -1
fi
if [ $COMMAND != "start" -a $COMMAND != "stop" -a $COMMAND != "status" ]; then
echo "please input your option in [start | stop | status]"
exit -1
fi
# 所有的服务器
HOSTS=( node01 node02 node03 )
for HOST in ${HOSTS[*]}
do
ssh -T $HOST << TERMINATOR
echo "---------- $HOST ----------"
zkServer.sh $COMMAND 2> /dev/null | grep -ivh SSL
exit
TERMINATOR
done
使用方法:
zk.sh start # 开启zookeeper集群
zk.sh stop # 关闭zookeeper集群
四、hive中的hiveserver2和metastore启停脚本
创建 hive-server-manager.sh 文件,并添加如下内容:
#!/bin/bash
help_info() {
echo "+---------------------------------------------------------------------------------+"
echo "| 本脚本可以一键控制 Hive 的 metastore 和 hiveserver2 服务 |"
echo "| 使用方式: hive-server-manager.sh [start|stop|status] [metastore|hiveserver2] |"
echo "+---------------------------------------------------------------------------------+"
echo "| 第一个参数用来指定操作命令,可以选择 开始(start)、停止(stop)、状态查看(status) |"
echo "| 第二个参数用来指定操作的服务,可以选择 metastore、hiveserver2,默认为全部 |"
echo "+---------------------------------------------------------------------------------+"
echo "| - start : 一键开启metastore和hiveserver2服务,也可以指定服务开启 |"
echo "| - stop : 一键停止metastore和hiveserver2服务,也可以指定服务停止 |"
echo "| - status : 一键查看metastore和hiveserver2服务,也可以指定服务查看 |"
echo "+---------------------------------------------------------------------------------+"
exit -1
}
# 获取操作命令
op=$1
# 获取操作的服务
server=$2
# 检查参数是否正确
if [ ! $op ]; then
help_info
elif [ $op != "start" -a $op != "stop" -a $op != "status" ]; then
help_info
fi
# 检查进程状态
metastore_pid=`ps aux | grep org.apache.hadoop.hive.metastore.HiveMetaStore | grep -v grep | awk '{print $2}'`
hiveserver2_pid=`ps aux | grep proc_hiveserver2 | grep -v grep | awk '{print $2}'`
# 检查日志文件夹的存在情况,如果不存在则创建这个文件夹
log_dir=/var/log/my_hive_log
if [ ! -e $log_dir ]; then
mkdir -p $log_dir
fi
# 开启服务
start_metastore() {
# 检查是否开启,如果未开启,则开启 metastore 服务
if [ $metastore_pid ]; then
echo "metastore 服务已经开启,进程号: $metastore_pid,已跳过"
else
nohup hive --service metastore >> $log_dir/metastore.log 2>&1 &
echo "metastore 服务已经开启,日志输出在 $log_dir/metastore.log"
fi
}
start_hiveserver2() {
# 检查是否开启,如果未开启,则开启 hiveserver2 服务
if [ $hiveserver2_pid ]; then
echo "hiveserver2 服务已经开启,进程号: $hiveserver2_pid,已跳过"
else
nohup hive --service hiveserver2 >> $log_dir/hiveserver2.log 2>&1 &
echo "hiveserver2 服务已经开启,日志输出在 $log_dir/hiveserver2.log"
fi
}
# 停止服务
stop_metastore() {
if [ $metastore_pid ]; then
kill -9 $metastore_pid
fi
echo "metastore 服务已停止"
}
stop_hiveserver2() {
if [ $hiveserver2_pid ]; then
kill -9 $hiveserver2_pid
fi
echo "hiveserver2 服务已停止"
}
# 查询服务
status_metastore() {
if [ $metastore_pid ]; then
echo "metastore 服务已开启,进程号: $metastore_pid"
else
echo "metastore 服务未开启"
fi
}
status_hiveserver2() {
if [ $hiveserver2_pid ]; then
echo "hiveserver2 服务已开启,进程号: $hiveserver2_pid"
else
echo "hiveserver2 服务未开启"
fi
}
# 控制操作
if [ ! $server ]; then
${op}_metastore
${op}_hiveserver2
elif [ $server == "metastore" ]; then
${op}_metastore
elif [ $server == "hiveserver2" ]; then
${op}_hiveserver2
else
echo "服务选择错误"
help_info
fi
使用方式: hive-server-manager.sh [start|stop|status] [metastore|hiveserver2]
- start : 一键开启metastore和hiveserver2服务,也可以指定服务开启
- stop : 一键停止metastore和hiveserver2服务,也可以指定服务停止
- status : 一键查看metastore和hiveserver2服务,也可以指定服务查看