HADOOP生态圈Linux一键启动脚本(包含Hadoop,Hive,zeppelin,zookeeper,hbase!)

文章目录

一.前言

平日工作中,启动Hadoop生态圈的一堆程序是个大工程,此时linux脚本一键启动就显得格外重要。

废话不多说,直接手把手一步步实现。

二.运行结果演示

为了证明一下脚本确实可用,先演示运行结果

1.放在自己设置的文件夹中,运行
HADOOP生态圈Linux一键启动脚本(包含Hadoop,Hive,zeppelin,zookeeper,hbase!)
2.出现选项,一般选5,因为是按顺序启动的,选5会启动所有
HADOOP生态圈Linux一键启动脚本(包含Hadoop,Hive,zeppelin,zookeeper,hbase!)
3.运行结果成功,(zookeeper不见了,重启显示已启动,隐身了?)
HADOOP生态圈Linux一键启动脚本(包含Hadoop,Hive,zeppelin,zookeeper,hbase!)

三.设置配置文件

1.设置配置文件 start.cnf,文件中的‘->’, ‘_’, ‘;’, '#'都是专门设置的分割符,方便脚本实用。

hadoop->NameNode_SecondaryNameNode_DataNode_ResourceManager_NodeManager;start-dfs.sh_start-yarn.sh
hive->HiveMetaStore_HiveServer2;nohup$hive#--service#metastore>hive.log#2>&1#&_nohup#hive#--service#hiveserver2>hive.log#2>&1#&
zeppelin->ZeppelinServer;zeppelin-daemon.sh#start
zookeeper->QuorumPeerMain;zkServer.sh#start
hbase->HMaster_HRegionServer;start-hbase.sh

四.一键启动脚本

#!/bin/bash
source /etc/profile

# 一键启动配置文件
CNF_FILE='start.cnf'

#验证配置文件(必须存在且为文件)
if[ ! -e $CNF_FILE -o -d $CNF_FILE ]
then
	echo $CNF_FILE" unavailable or directory,script will exit"
	exit 0
fi
# 将配置文件内容读入变量并转为列表
CNF_LINES=(`cat start.cnf`)

# 循环按行输出配置信息,将第一项作为内容提示供用户选择
count=0
for item in ${CNF_LINES[@]}
do
	((count+))
	arr=(${item/->/ })
	echo $count"、 "${arr[0]}
done	
	
# 用户选择启动服务编号(向前启动所有服务)
read -p 'please input your choice:' choice

# 验证用户输入(必须为小于等于配置文件行数的整数)
if [[ $choice =~ ^[0-9]+$ ]]
then
	if [ $choice -gt $count -o $choice -lt 1 ]
	then 
		echo "choice must be between 1 and $count,script will exit"
		exit 0
	fi 
else
	echo 'choice must be a num, script will exit'
	exit 0
fi	

#自定义函数检查指定参数的服务是否完好,若有残留杀死进程
function killOnLeft(){
	SIGN=$1
	SIGN=$2
	SERS=(${SERS//_/ })
	PIDS=()
	count=0
	for item in ${SERS[@]}
	do
		#jps配合管道检查指定服务项是否存在
		RST=`jps-ml|grep -w $item`
		if [[ $RST ]]
		then
			RST=($RST)
			PIDS[$count]=${RST[0]}
			((count++))
		fi
	done
	if [ $count -lt ${#SERS[@]} ]
	then 
		# 若存在不完整的残留kill进程	
		if [ $count -gt 0 ]
		then 
			for pid in ${PIDS[@]}
			do
				RST=`kill -9 $pid`
			done
			echo "$SIGN has service and killed"
		else
			echo "$SIGN has no service left"
		fi
		echo 'no'
	else
		echo "$SIGN is running"
		echo "ok"
	fi
}

#自定义函数调用参数命令集启动相应服务
function startSers(){
	SIGN=$1
	SERS=$2
	SERS=${SERS//_/ }
	for cmd in $SERS
	do
		RST=`eval ${cmd//#/ }`
	done
	echo $SING" has been started"
}	

# 循环执行用户选择的配置文件中的命令行
count=0
while (( $count<$choice ))
do
	LINE=${CNF_LINES[$count]}
	LINE=(${LINE//->/ })
	SIGN=${LINE[0]}
	LINE=${LINE[1]}
	LINE=(${LINE//;/ })
	SERS=${LINE[0]}
	CMDS=${LINE[1]}
	RST=`killOnLeft $SIGN $SERS`
	echo $RST
	if [[ $RST =~ no$ ]]
	then
		RST=`startSers $SIGN $CMDS`
		echo $RST
	fi
	((count++))
done								
上一篇:redis-BitMaps(位图)【redis】


下一篇:python笔记44-HTTP对外接口sign签名