0
点赞
收藏
分享

微信扫一扫

【线性代数】列主元法求矩阵的逆

转角一扇门 01-24 18:00 阅读 4

最终效果

  • 定时检测hive运行状态,进程不存在或者进程存在但是不监听端口的hiveserver2,自动重新拉起
  • 每次检测脚本执行的日志都会保存在log目录下.check文件,每一个月一个文件
  • 每月15日,删除2月前的检测日志
  • 开启hive自带日志输出后,日志不会删除,且较大,因此一并将过期的hive自带日志清空

https://blog.csdn.net/Brother_ning/article/details/127993943
从这个作者复制的,但是他的代码好像有点问题,修改后然后加以优化

定时检查脚本

#!/bin/bash

HIVE_LOG_DIR=$HIVE_HOME/log
CURRENT_TIME=$(date +"%Y-%m-%d %H:%M:%S")
# 日志清理,如果与hive默认日志命名风格一样,也会自动清理hive的日志
DT=$(date)
DT_2M=$(date -d "2 month ago")
CHECK_LOG=$HIVE_LOG_DIR/hive.log.$(date "+%Y-%m").check
CHECK_LOG_REG=$HIVE_LOG_DIR/hive.log.$(date -d "2 month ago" +"%Y-%m")-*
METASTORE_PORT=9083
HIVESERVER2_PORT=10000
# 最大连接数,超过这个数,则重启hive
MAX_WORKS=1800
if [ ! -d $HIVE_LOG_DIR ]
then
mkdir -p $HIVE_LOG_DIR
fi

check_process(){
WORKS=$(netstat -anltp|grep $HIVESERVER2_PORT|wc -l)
if [ "$WORKS" -gt $MAX_WORKS ]; then
echo "$CURRENT_TIME:链接数异常,重启hive" | tee -a $CHECK_LOG
hive_stop
sleep 5
fi
pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')
ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1)
if [ -n "$pid" ] &$ppid" ] $pid" = "$ppid" ]; then
echo $pid
return 0 # 进程正在运行
else
return 1 # 进程未运行
fi
}


hive_stop()
{
metapid=$(check_process HiveMetastore $METASTORE_PORT)
if [ -n "$metapid" ]; then
echo "$CURRENT_TIME:关闭Metastore进程" | tee -a $CHECK_LOG & kill -9 $metapid
fi
server2pid=$(check_process HiveServer2 $HIVESERVER2_PORT)
if [ -n "$server2pid" ]; then
echo "$CURRENT_TIME:关闭server2进程" | tee -a $CHECK_LOG & kill -9 $server2pid
fi
}

# wait方法不能随意使用,必须在启动执行后才能执行。
wait_start()
{
local max_retries=100 # 设置最大重试次数 100次,重启时间200秒,如果200秒内没有启动成功,则认为启动失败。
local retries=0 # 初始化重试计数器

metapid=$(check_process HiveMetastore $METASTORE_PORT)
server2pid=$(check_process HiveServer2 $HIVESERVER2_PORT)

while { [ -z "$metapid" ] || [ -z "$server2pid" ]; } && [ $retries -lt $max_retries ]; do
sleep 2
echo "$(date +"%Y-%m-%d %H:%M:%S"):启动中($retries)。。。" | tee -a $CHECK_LOG
metapid=$(check_process HiveMetastore $METASTORE_PORT)
server2pid=$(check_process HiveServer2 $HIVESERVER2_PORT)
retries=$((retries + 1))
done

# 检查是否达到最大重试次数
if [ $retries -ge $max_retries ]; then
echo "$CURRENT_TIME:达到最大重试次数,启动失败" | tee -a $CHECK_LOG
exit 1 # 退出脚本,表示启动失败
else
echo "$CURRENT_TIME:HIVE状态正常" | tee -a $CHECK_LOG
fi
}

kill_valid()
{
PIDS=$(jps -m | grep $1 | awk '{print$1}')
# 遍历所有PID并使用kill -9命令杀掉它们,防止hive挂掉,但是进程不退出
for PID in $PIDS; do
kill -9 $PID
echo "$CURRENT_TIME:kill无效的$1进程 $PID" | tee -a $CHECK_LOG
sleep 3
done
}

hive_start()
{
metapid=$(check_process HiveMetastore $METASTORE_PORT)
if [ -z "$metapid" ]; then
kill_valid HiveMetaStore
echo "$CURRENT_TIME:Metastore启动中" | tee -a $CHECK_LOG
nohup hive --service metastore 2>$HIVE_LOG_DIR/metastore.log 1>/dev/null &
fi
server2pid=$(check_process HiveServer2 $HIVESERVER2_PORT)
if [ -z "$server2pid" ]; then
kill_valid HiveServer2
echo "$CURRENT_TIME:HiveServer2启动中" | tee -a $CHECK_LOG
nohup hive --service hiveserver2 2>$HIVE_LOG_DIR/hiveServer2.log 1>/dev/null &
fi
}

status()
{
metapid=$(check_process HiveMetastore $METASTORE_PORT)
server2pid=$(check_process HiveServer2 $HIVESERVER2_PORT)

if [ -n "$metapid" ] &$server2pid" ]; then
echo "
$CURRENT_TIME:HIVE状态正常" | tee -a $CHECK_LOG
else
if [ -z "
$metapid" ]; then
echo "
$CURRENT_TIME:Metastore未运行" | tee -a $CHECK_LOG
fi
if [ -z "
$server2pid" ]; then
echo "
$CURRENT_TIME:HiveServer2未运行" | tee -a $CHECK_LOG
fi
fi
}

clean()
{
echo "
$CURRENT_TIME:清空日志 rm -rf $CHECK_LOG_REG" | tee -a $CHECK_LOG
rm -rf $CHECK_LOG_REG
}


case $1 in
"
start")
hive_start
wait_start
;;
"
stop")
hive_stop
status
;;
"
restart")
hive_stop
sleep 3
hive_start
wait_start
;;
"
status")
status
;;
"
clean")
clean
;;
*)
echo Invalid Args!
echo 'Usage: '$(basename $0)' start|stop|restart|status|clean'
;;
esac

定时调度

#设置 HIVE_HOME 环境变量
HIVE_HOME=/data/soft/hive-3.1.2
# 每隔10分钟执行一次状态检测,有问题自动重启
*/10 * * * * sh $HIVE_HOME/hiveservice.sh start
# 每周天在0点01分执行一次 restart 任务
1 0 * * 0 sh $HIVE_HOME/hiveservice.sh restart >> $HIVE_HOME/log/cron.restart.log
# 每月15号清空2月前的hive日志
0 0 15 * * sh $HIVE_HOME/hiveservice.sh clean
举报

相关推荐

0 条评论