hive 自动检测、自动重启、记录检测日志、自动清理日志

最终效果

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

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

定时检查脚本

vi $HIVE_HOME/hiveservice.sh

#!/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" ] && [ -n "$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" ] && [ -n "$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

定时调度

crontab -e
输入如下内容,注意修改环境变量,cron无法正常读取系统环境变量

#设置 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

crontab -l
检查crontab运行任务
tail -f /var/log/cron (centos)
cat /var/log/syslog (乌班图)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/958250.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

光学遥感显著性目标检测2023-2024论文学习

GRSL 2023: Attention-Aware Three-Branch Network for Salient Object Detection in Remote Sensing Images 基于encoder-decoder框架,提出了一系列缝合模块,GCA,FDUC,MSDC,RA。 GRSL 2023:OR…

接口 V2 完善:基于责任链模式、Canal 监听 Binlog 实现数据库、缓存的库存最终一致性

🎯 本文介绍了一种使用Canal监听MySQL Binlog实现数据库与缓存最终一致性的方案。文章首先讲解了如何修改Canal配置以适应订单表和时间段表的变化,然后详细描述了通过责任链模式优化消息处理逻辑的方法,确保能够灵活应对不同数据表的更新需求…

graylog~认识一下-日志管理平台

1、介绍 Graylog 是一个开源的日志管理和分析平台,旨在帮助企业集中收集、存储、搜索和分析来自各种来源的日志数据。它提供了强大的实时日志处理能力,适用于大规模分布式系统和复杂的生产环境。 主要功能 集中化日志管理: 收集来自不同来源…

Android程序中使用FFmpeg库

目录 前言 一、环境 二、创建APP 三. 添加FFmpeg库文件到app中 1. 复制ffmpeg头文件和so库到app中 2. 修改CMakeLists.txt文件内容. 3. 修改ffmpeglib.cpp 文件内容 4. 修改NativeLib.kt 文件添加方法和加载库 5. 调用 四. 增加解析视频文件信息功能 总结 前言 前面…

AI 编程工具—Cursor进阶使用 Rules for AI

AI 编程工具—Cursor进阶使用 Rules for AI 这里配置是给所有的会话和内嵌模式的,你可以理解为是一个全局的配置 下面的代码是之前Cursor 给我们生成的,下面我们开始配置Rules ,来让Cursor生成的代码更加符合我们的编程习惯 def quick_sort(arr):"""使用快…

【系统环境丢失恢复】如何恢复和重建 Ubuntu 中的 .bashrc 文件

r如果你遇到这种情况,说明系统环境的.bashrc 文件丢失恢复: 要恢复 ~/.bashrc 文件,可以按照以下几种方式操作: 恢复默认的 ~/.bashrc 文件 如果 ~/.bashrc 文件被删除或修改,你可以恢复到默认的版本。可以参考以下…

PyTorch使用教程(8)-一文了解torchvision

一、什么是torchvision torchvision提供了丰富的功能,主要包括数据集、模型、转换工具和实用方法四大模块。数据集模块内置了多种广泛使用的图像和视频数据集,如ImageNet、CIFAR-10、MNIST等,方便开发者进行训练和评估。模型模块封装了大量经…

实战演示:利用ChatGPT高效撰写论文

在当今学术界,撰写论文是一项必不可少的技能。然而,许多研究人员和学生在写作过程中常常感到困惑和压力。幸运的是,人工智能的快速发展为我们提供了新的工具,其中ChatGPT便是一个优秀的选择。本文将通过易创AI创作平台&#xff0c…

群晖部署-Calibreweb

最近家里搞了台群晖,准备部署个Calibreweb看看电子书,看了好多部署的教程老是不太成功,要么报错要么有问题的,很难搞。下面将部署流程分享一下,给大家参考,少走点弯路 镜像的选择 我们使用johngong/calibr…

WordPress果果对象存储插件

将网站上的图片等静态资源文件上传至七牛云对象存储,可以减轻服务器文件存储压力,提升静态文件访问速度,从而加速网站访问速度。 支持:阿里云对象存储、华为云对象存储、百度云对象存储、腾讯云对象存储、七牛云对象存储。 下载…

电路研究9.1.1——合宙 Air780EP 模组外围线路

本来要继续研究AT指令来着,结果发现后面还有之前用到的电路设计资料,所以就贴过来了。 5.3.2 工作模式: 注意:  当模块进入休眠模式或深度休眠模式后, VDD_EXT 电源会掉电,相应电压域的 GPIO 以及串口…

LabVIEW 太阳能光伏发电系统智能监控

本文介绍了基于 LabVIEW 的太阳能光伏发电监控系统的设计与实现,着重探讨了其硬件配置、软件架构以及系统的实现方法。该系统能够有效提高太阳能光伏发电的监控效率和精确性,实现了远程监控和数据管理的智能化。 ​ 项目背景 在当前能源紧张与环境污染…

风光并网对电网电能质量影响的matlab/simulink仿真建模

这个课题早在一几年的时候比较热门,之前作电科院配电网的一个项目中也有所涉及,我把其中一部分经典仿真模型思路分享给大家,电能质量影响这部分,我在模型中主要体现的就是不同容量的光伏、风电接入,对并网点的电压影响…

大模型应用编排工具Dify之常用编排组件

1.前言 dify的核心能力有:支持接入常见的 LLM、工作流编排、知识库和聊天助手等,架构图如下: 本文将结合实际项目落地经验,针对工作流编排中的常用编排组件进行介绍,以及如何在后端调用工作流编排。 2.落地案例 某 …

Ubuntu16.04 安装OpenCV4.5.4 避坑

Ubuntu16.04 安装C版OpenCV4.5.4 Ubuntu16.04 VSCode下cmakeclanglldb调试c 文章目录 Ubuntu16.04 安装C版OpenCV4.5.41. 下载Opencv压缩包2. 安装Opencv-4.5.43. 配置OpenCV的编译环境4.测试是否安装成功 1. 下载Opencv压缩包 下载Opencv压缩包,选择source版本。…

pytest执行报错:found no collectors

今天在尝试使用pytest运行用例的时候出现报错:found no collectors;从两个方向进行排查,一是看文件名和函数名是不是符合规范,命名要是"test_*"格式;二是是否存在修改文件名的情况,如果修改过文件…

嵌入式知识点总结 C/C++ 专题提升(七)-位操作

针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.位操作基础 2.如何求解整型数的二进制表示中1的个数 ? 3.如何求解二进制中0的个数 4.交换两个变量的值,不使用第三个变量。即a3,b5,交换之后a5,b3: 5.给定一个…

两台局域网电脑通过飞秋传输大文件失败的解决方案

问题描述: 局域网两台电脑之间传输大文件(超过20G),不想太复杂,就各装个飞秋。但是通过直接发送文件发现总是失败,一会就中断了。 解决方法: 主界面上有一个文件共享的按钮,通过文…

Picsart美易照片编辑器和视频编辑器

使用Picsart美易照片编辑器和视频编辑器,将您的创意变为现实。制作专业水准的拼贴画、设计并添加贴纸、快速移除和更换背景,体验流行编辑,比如 黄金时刻、镜中自拍、复古噪点滤镜或千禧滤镜。Picsart美易是一款一体式编辑器,拥有众…

AR智慧点巡检系统探究和技术方案设计

一、项目背景 随着工业生产规模的不断扩大和设备复杂度的提升,传统的人工点巡检方式效率低下、易出错,难以满足现代化企业对设备运行可靠性和安全性的要求。AR(增强现实)技术的发展为点巡检工作带来了新的解决方案,通…