hadoop集群中常用shell脚本收集

前言

感谢我关注的朋友,我亦无他,收集整理的大部分脚本。

基础版

群发脚本XSync(xsync)

#!/bin/bash
#1 获取参数,如果不够直接退出
pcount=$#
if ((pcount==0)); then
echo 没有输入需要传递的文件或文件夹!!;
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 hadoop102 hadoop103  hadoop104
do
    echo ------------------- $host --------------
    rsync -e 'ssh -p 22' -av $pdir/$fname $user@$host:$pdir
done

群控命令脚本XCall(xcall)

#!/bin/bash
#接收命令
params=$@
#验证参数
if(($#==0))
then
        echo 请传入要执行的命令!
        exit;
fi

 echo "要执行的命令是:$params"

for((i=102 ;i<=104 ;i=$i+1 ));
do


 echo ==========hadoop$i $params==========
 ssh hadoop$i "source /etc/profile;$params"

done

群起journalNode

#!/bin/bash
for i in hadoop102 hadoop103 hadoop104
do
        echo "================           $i             ================"
    #根据自己的zkServer.sh所在位置适当修改
        ssh $i 'source /etc/profile && /opt/module/hadoop-2.7.2/sbin/hadoop-daemon.sh start journalnode'
done

群关journalNode

#!/bin/bash
for i in hadoop102 hadoop103 hadoop104
do
        echo "================           $i             ================"
    #根据自己的zkServer.sh所在位置适当修改
        ssh $i 'source /etc/profile && /opt/module/hadoop-2.7.2/sbin/hadoop-daemon.sh stop journalnode'
done

群起ZK(zkstart)

#!/bin/bash
for i in hadoop102 hadoop103 hadoop104
do
        echo "================           $i             ================"
    #根据自己的zkServer.sh所在位置适当修改
        ssh $i 'source /etc/profile && /opt/module/zookeeper-3.4.10/bin/zkServer.sh start'
done

群关zk(zkstop)

#!/bin/bash
for i in hadoop102 hadoop103 hadoop104
do
        echo "================           $i             ================"
    #根据自己的zkServer.sh所在位置适当修改
        ssh $i 'source /etc/profile && /opt/module/zookeeper-3.4.10/bin/zkServer.sh stop'
done

群起zk及hadoop相关进程(zhstart)

#!/bin/bash
echo "================     开始启动所有节点服务            ==========="
echo "================     正在启动Zookeeper               ==========="
for i in hadoop102 hadoop103 hadoop104
do
        ssh $i 'source /etc/profile && /opt/module/zookeeper-3.4.10/bin/zkServer.sh start'
done
echo "================     正在启动HDFS                    ==========="
#根据自身情况修改用户名
ssh zhengkw@hadoop102 '/opt/module/hadoop-2.7.2/sbin/start-dfs.sh'
echo "================     正在启动YARN                    ==========="
ssh zhengkw@hadoop103 '/opt/module/hadoop-2.7.2/sbin/start-yarn.sh'
echo "================     正在开启JobHistoryServer        ==========="
ssh zhengkw@hadoop103 '/opt/module/hadoop-2.7.2/sbin/mr-jobhistory-daemon.sh start historyserver'

群关zk及hadoop相关进程(zhstop)

#!/bin/bash
echo "================     开始关闭所有节点服务            ==========="
echo "================     正在关闭Zookeeper               ==========="
for i in hadoop102 hadoop103 hadoop104
do
        ssh $i 'source /etc/profile && /opt/module/zookeeper-3.4.10/bin/zkServer.sh stop'
done
echo "================     正在关闭HDFS                    ==========="
ssh zhengkw@hadoop102 '/opt/module/hadoop-2.7.2/sbin/stop-dfs.sh'
echo "================     正在关闭YARN                    ==========="
ssh zhengkw@hadoop103 '/opt/module/hadoop-2.7.2/sbin/stop-yarn.sh'
echo "================     正在关闭JobHistoryServer        ==========="
ssh zhengkw@hadoop103 '/opt/module/hadoop-2.7.2/sbin/mr-jobhistory-daemon.sh stop historyserver'

群起kafka脚本kstart

#!/bin/bash
for i in hadoop102 hadoop103 hadoop104
do
        echo "================           $i             ================"
    #根据自己的kafka所在位置适当修改
        ssh $i 'source /etc/profile && /opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties'
done

群关kafka脚本kstop

#!/bin/bash
for i in hadoop102 hadoop103 hadoop104
do
        echo "================           $i             ================"
    #根据自己的kafka所在位置适当修改
        ssh $i 'source /etc/profile && /opt/module/kafka/bin/kafka-server-stop.sh'
done

特别注意

官方的kafka服务关闭脚本存在失效的可能,这里放一个链接来解决!

点我解决!!!

注意

  • 所有脚本创建好后配置好ssh免密服务,可参照点我!here!!里面的ssh免密配置。
  • 给予脚本执行权限!
  • 根据自己的配置修改用户名或者是主机名!!!!
  • 适当分发脚本到/home/用户名/bin/下
  • 如果想root用户也可以执行脚本,可以将脚本移动到
    /usr/local/bin下!

进阶版!

xsync

#!/bin/bash
#脚本必须跟一个文件的相对路径或绝对路径
if(($#!=1))
then
        echo 请输入要分发单个文件的路径!
        exit;
fi

#获取分发文件的物理绝对路径
dirpath=$(cd -P `dirname $1` ; pwd)
filename=`basename $1`

echo "要分发的绝对路径是:$dirpath/$filename"

#获取当前用户的名称
username=`whoami`

#分发
for((i=102;i<=104;i++))
do
        echo "--------------------hadoop$i--------------------"
        rsync -rvlt $dirpath/$filename $username@hadoop$i:$dirpath
done

xcall

#!/bin/bash
#校验是否传入了命令
if(($#==0))
then
        echo 请输入要执行的命令!
        exit;
fi


echo "要执行的命令是:$@"


#使用ssh登录到目标机器执行命令
for((i=102;i<=104;i++))
do
        echo "--------------------hadoop$i--------------------"
        ssh hadoop$i $@
done

时间同步脚本 dt.sh

#!/bin/bash
#dt.sh 日期,可以让集群中所有机器的时间同步到此日期
#如果用户没有传入要同步的日期,同步日期到当前的最新时间
if(($#==0))
then
        xcall sudo ntpdate -u ntp1.aliyun.com
        exit;
fi

#dt.sh 日期,可以让集群中所有机器的时间同步到此日期
for((i=102;i<=104;i++))
do
        echo "--------------同步hadoop$i--------------"
        ssh hadoop$i "sudo date -s '$@'"
done

kafka启停脚本 kafka.sh

#!/bin/bash
#kafka集群的一键启动脚本,只接收单个start或stop参数
if(($#!=1))
then
        echo 请输入单个start或stop参数!
        exit
fi

##kafka alive count

function countKafkaBrokers(){
	count=0
 for((i=1;i<=3;i++))                                                                                                             
      do
	     result=`ssh hadoop10$i "source /etc/profile;jps | grep Kafka | wc -l"`
	     count=$[$result +$count]
     done
     return $count
}

#对传入的单个参数进行校验,且执行相应的启动和停止命令

if [ $1 = start ]
	then
       xcall kafka-server-start.sh -daemon '$KAFKA_HOME/config/server.properties'
elif [ $1 = stop ]
    then xcall kafka-server-stop.sh
      sleep 2s
    while [ 1 ]
  do
      countKafkaBrokers
	  if(($?==0))
          then
             break
  fi
     sleep 2s
  done
       xcall jps
else
     echo 请输入单个start或stop参数!
 fi 

zk.sh

#!/bin/bash
#脚本只接受start或stop或status三个参数中任意一个
#参数数量校验
if(($#!=1))
then
	echo 脚本只接受start或stop或status三个参数中任意一个
	exit;
fi

#对参数的内容进行校验,通过后,执行启动或停止或查看状态的命令
if [ $1 = start ] || [ $1 = stop ] || [ $1 = status ]
then
	xcall /opt/module/zookeeper-3.4.10/bin/zkServer.sh $1
else
	echo 脚本只接受start或stop或status三个参数中任意一个
fi

journalnode 启停

#!/bin/bash
case $1 in
start)
for i in hadoop102 hadoop103 hadoop101
    do
        echo "================           $i             ================"
            #根据自己的zkServer.sh所在位置适当修改
                    ssh $i 'source /etc/profile && /home/zhengkw/model/hadoop-3.2.0/sbin/hadoop-daemon.sh start journalnode'
    done
        ;;
stop)
for i in hadoop102 hadoop103 hadoop101
    do
        echo "================           $i             ================"
    #根据自己的zkServer.sh所在位置适当修改
        ssh $i 'source /etc/profile && /home/zhengkw/model/hadoop-3.2.0/sbin/hadoop-daemon.sh stop journalnode'
    done
        ;;
*)
   echo "脚本的正确使用方式: "
   echo "   start 启动 "
   echo "   stop  停止 "
        ;;
esac

hd-yar.sh

#!/bin/bash
#提供对hadoop集群的一键启动和停止,只接受start或stop参数中的一个
#判断参数的个数
if(($#!=1))
then
	echo 请输入start或stop参数中的任意一个
	exit;
fi

#校验参数内容
if [ $1 = start ] || [ $1 = stop ]
then
	$1-dfs.sh
	#根据RM配置启动
	ssh hadoop103 $1-yarn.sh
	#高可用单启RM
	ssh hadoop104 yarn-daemon.sh start resourcemanager
	#根据历史所在配置启动历史服务
	ssh hadoop103 mr-jobhistory-daemon.sh $1 historyserver
	xcall jps
else
	 echo 请输入start或stop参数中的任意一个
fi

个人用一键启动

#!/bin/bash
if(($#!=1))
then
	echo 请输入start或stop中的任意一个参数
	exit;
fi

function countKafkaBrokers(){
	count=0
	for((i=102;i<=104;i++))
	do
		result=`ssh hadoop$i "jps | grep Kafka | wc -l"`
		count=$[$result +$count]
	done
	return $count
}

function countHiveRunJar(){
   count=0
   jps | grep RunJar| awk -F ' ' '{print $1 }'|tail -n 1|xargs kill -9
   echo `jps | grep RunJar`
   count=`jps | grep RunJar| wc -l`
   return $count
}


if [ $1 = start ]
then
	 zhstart
	kstart
	while [ 1 ]
	do  
		countKafkaBrokers
		if(($?==3)) 
			then
				break
			fi
	sleep 2s
	done
	f2.sh start
	f1.sh start
	nohup hive --service metastore &
        nohup hiveserver2 &
	sleep 2s	
	xcall jps
	elif [ $1 = stop ]
	then
	f1.sh stop
	f2.sh stop
        sleep 2s
	kstop
	while [ 1 ] 
        do  
                countKafkaBrokers
                if(($?==0)) 
                        then
                                break
                        fi
        sleep 2s
        done
	zhstop
 echo  ------------关闭hive------------ 
       while [ 1 ]
do
          countHiveRunJar
           if(($?==0))
           then 
            break     
 fi 
sleep 2s
done

	xcall jps
else
	echo 请输入start或stop中的任意一个参数
fi	
   

个人用2

#!/bin/bash
project_home=/zhengkw/gmall-logger
#kafka节点启动数量
function countKafkaBrokers(){
	count=0
	for((i=102;i<=104;i++))
	do
		result=`ssh hadoop$i "jps | grep Kafka | wc -l"`
		count=$[$result +$count]
	done
	return $count
}
# 起一个nginx, 三个log服务器  log.sh start/stop/
case $1 in
start)
    zkstart
	kstart
	while [ 1 ]
	do
		countKafkaBrokers
		if(($?==3))
			then
				break
			fi
	sleep 2s
	done
   echo "======在 hadoop102 启动 nginx======"
   sudo /usr/local/webserver/nginx/sbin/nginx
   for host in hadoop102 hadoop103 hadoop104 ; do
       echo "=====$host 启动日志服务器===== "
       ssh $host "source /etc/profile ; nohup java -jar $project_home/gmall-logger-0.0.1-SNAPSHOT.jar 1>$project_home/log.log 2>$project_home/error.log &"
   done

   ;;

stop)
    echo "======在 hadoop102 停止 nginx======"
    sudo /usr/local/webserver/nginx/sbin/nginx -s stop
    for host in hadoop102 hadoop103 hadoop104 ; do
       echo "=====$host 停止日志服务器===== "
       ssh $host "source /etc/profile ; ps -ef | awk '/gmall-logger/ && !/awk/{print \$2}'| xargs kill -9"
   done
   kstop
	while [ 1 ]
        do
                countKafkaBrokers
                if(($?==0))
                        then
                                break
                        fi
        sleep 2s
        done
	zkstop
;;

*)
    echo "脚本的正确使用方式: "
    echo "   start 启动nginx和日志服务器 "
    echo "   stop  停止nginx和日志服务器 "
;;
esac


#  jps | grep gmall | awk '{print $1}' | xargs kill -9

# ps -ef | grep gmall-logger | grep -v grep | awk '{print $2}' | xargs kill -9

# ps -ef | awk '/gmall-logger/ && !/awk/{print $2}'

#1. java -jar ....jar   jar包内已经打包的主类

#2. 如果打的jar包中没有主类
#   java -cp gmall-logger-0.0.1-SNAPSHOT.jar org.springframework.boot.loader.JarLauncher

#3. 如果打的jar包中没有主类
 #  java -jar gmall-logger-0.0.1-SNAPSHOT.jar org.springframework.boot.loader.JarLauncher



特别栏目!

Loginshell和NoLoginShell区别!!

总结

由于kafka很脆弱,但是关起来又很麻烦,经常还没有正常关完,我就把zk给关了,为了解决这个问题,就把kafka关闭的时候统计他的节点,当节点大于0时就等待!

核心

function countKafkaBrokers(){
	count=0
	for((i=102;i<=104;i++))
	do
		result=`ssh hadoop$i "jps | grep Kafka | wc -l"`
		count=$[$result +$count]
	done
	return $count
}
#当执行停止后就开始进入死循环判断节点个数是否大于0 如果判断结果==0则跳出循环!
  kstop
	while [ 1 ]
        do
                countKafkaBrokers
                if(($?==0))
                        then
                                break
                        fi
        sleep 2s
        done
	zkstop
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值