【Hive 运维实战】一键管理 Hive 服务:Metastore 与 HiveServer2 控制脚本开发与实践
一、引言
在大数据开发中,Hive 作为重要的数据仓库工具,其核心服务metastore
(元数据服务)和hiveserver2
(查询服务)的启停管理是日常运维的基础操作。手动执行命令启停服务不仅效率低下,还容易因操作遗漏导致服务状态不一致。本文将介绍一个自主开发的 Hive 服务控制脚本,实现对两大核心服务的一键启停、状态查询及日志管理,大幅提升运维效率。
二、脚本核心功能与架构设计
2.1 核心功能
多模式操作:支持start
(启动)、stop
(停止)、status
(状态查询)三种操作模式
单 / 批量控制:可单独指定服务(metastore
或hiveserver2
)或批量操作所有服务
智能校验:自动检测服务状态,避免重复启停
日志管理:自动创建日志目录,将服务输出重定向到独立日志文件
友好交互:提供详细帮助信息和状态反馈
2.2 架构设计
#!/bin/bash
op=$1 # 操作类型(start/stop/status)
server=$2 # 目标服务(metastore/hiveserver2,可选)# 核心模块:
# 1. 参数校验与帮助信息(help_info函数)
# 2. 进程状态查询(ps命令获取PID)
# 3. 日志目录创建(/var/log/my_hive_log)
# 4. 服务控制函数(启动/停止/状态查询)
# 5. 主逻辑调度(根据参数执行对应操作)
三、脚本代码与关键逻辑详解
3.1 完整脚本代码
#!/bin/bash# Hive服务控制脚本,支持metastore/hiveserver2一键管理
# 使用方式: hive-server-manager.sh [start|stop|status] [metastore|hiveserver2]help_info() {echo "+---------------------------------------------------------------------------------+"echo "| Hive服务管理脚本 - 支持metastore/hiveserver2控制 |"echo "| 用法: $0 {start|stop|status} [metastore|hiveserver2] |"echo "+---------------------------------------------------------------------------------+"echo "| 操作命令: start(启动) | stop(停止) | status(状态) |"echo "| 目标服务: metastore(元数据服务) | hiveserver2(查询服务),默认操作所有服务 |"echo "+---------------------------------------------------------------------------------+"exit -1
}# 参数校验
op=$1
server=$2
[ -z "$op" ] || [ "$op" != "start" -a "$op" != "stop" -a "$op" != "status" ] && help_info# 进程查询
metastore_pid=$(ps aux | grep 'org.apache.hadoop.hive.metastore.HiveMetaStore' | grep -v grep | awk '{print $2}')
hiveserver2_pid=$(ps aux | grep 'hiveserver2' | grep -v grep | awk '{print $2}')# 日志目录管理
log_dir="/var/log/my_hive_log"
[ ! -d "$log_dir" ] && mkdir -p "$log_dir"# 启动函数
start_metastore() {[ -n "$metastore_pid" ] && echo "metastore已运行,PID: $metastore_pid" && returnnohup hive --service metastore >> "$log_dir/metastore.log" 2>&1 &echo "metastore启动成功,日志路径:$log_dir/metastore.log"
}start_hiveserver2() {[ -n "$hiveserver2_pid" ] && echo "hiveserver2已运行,PID: $hiveserver2_pid" && returnnohup hive --service hiveserver2 >> "$log_dir/hiveserver2.log" 2>&1 &echo "hiveserver2启动成功,日志路径:$log_dir/hiveserver2.log"
}# 停止函数
stop_metastore() {[ -n "$metastore_pid" ] && kill -9 "$metastore_pid"echo "metastore服务已停止"
}stop_hiveserver2() {[ -n "$hiveserver2_pid" ] && kill -9 "$hiveserver2_pid"echo "hiveserver2服务已停止"
}# 状态查询函数
status_metastore() {echo "metastore状态:$(if [ -n "$metastore_pid" ]; then echo "运行中,PID: $metastore_pid"; else echo "未运行"; fi)"
}status_hiveserver2() {echo "hiveserver2状态:$(if [ -n "$hiveserver2_pid" ]; then echo "运行中,PID: $hiveserver2_pid"; else echo "未运行"; fi)"
}# 主逻辑调度
if [ -n "$server" ]; thencase "$server" inmetastore) "${op}_metastore" ;;hiveserver2) "${op}_hiveserver2" ;;*) echo "错误:未知服务 $server" && help_info ;;esac
else"${op}_metastore""${op}_hiveserver2"
fi
3.2 关键逻辑解析
3.2.1 参数校验与帮助信息
[ -z "$op" ] || [ "$op" != "start" -a "$op" != "stop" -a "$op" != "status" ] && help_info
严格校验首个参数是否为合法操作(start/stop/status)
非法参数或参数缺失时,调用help_info
函数输出详细使用说明
3.2.2 进程状态查询
metastore_pid=$(ps aux | grep 'org.apache.hadoop.hive.metastore.HiveMetaStore' | grep -v grep | awk '{print $2}')
通过ps
命令结合进程关键字精准匹配服务进程
grep -v grep
过滤掉自身查询进程,确保结果准确
3.2.3 日志管理机制
log_dir="/var/log/my_hive_log"
[ ! -d "$log_dir" ] && mkdir -p "$log_dir"
自动创建日志目录/var/log/my_hive_log
服务输出通过nohup
重定向到独立日志文件,避免终端关闭导致进程终止
3.2.4 服务控制函数
start_metastore() {[ -n "$metastore_pid" ] && echo "已运行" && return # 避免重复启动nohup hive --service metastore >>日志文件 & # 后台运行
}
启动前先检查进程状态,防止重复启动
停止时使用kill -9
强制终止(生产环境建议改用kill
优雅终止)
四、部署与使用指南
4.1 部署步骤
# 1. 保存脚本
wget https://example.com/hive-service-manager.sh # 或手动创建
vi hive-service-manager.sh # 粘贴脚本内容# 2. 移动到系统路径并赋予权限
sudo mv hive-service-manager.sh /usr/local/bin/
sudo chmod +x /usr/local/bin/hive-service-manager.sh
4.2 操作示例
4.2.1 批量操作
# 启动所有服务
hive-service-manager.sh start# 停止所有服务
hive-service-manager.sh stop# 查看所有服务状态
hive-service-manager.sh status
4.2.2 单服务操作
# 单独启动metastore
hive-service-manager.sh start metastore# 单独停止hiveserver2
hive-service-manager.sh stop hiveserver2# 查看hiveserver2状态
hive-service-manager.sh status hiveserver2
4.2.3 输出示例
# 启动成功
metastore启动成功,日志路径:/var/log/my_hive_log/metastore.log
hiveserver2已运行,PID: 12345,已跳过# 状态查询
metastore状态:运行中,PID: 67890
hiveserver2状态:未运行
五、生产环境优化建议
5.1 优雅停止服务
# 修改停止函数,使用正常终止信号
stop_metastore() {[ -n "$metastore_pid" ] && kill "$metastore_pid" # 替换kill -9echo "metastore服务已停止"
}
使用kill
(默认发送 SIGTERM 信号)允许服务完成当前操作再终止
避免kill -9
强制终止可能导致的元数据不一致
5.2 端口健康检查
# 增加端口检测函数(示例)
check_port() {local port=$1nc -z localhost "$port" &>/dev/null[ $? -eq 0 ] && echo "端口$port可用" || echo "端口$port不可用"
}# 在状态查询中调用
status_metastore() {local pid=$metastore_pid[ -n "$pid" ] && check_port 9083 || echo "metastore未运行"
}
metastore 默认端口:9083
hiveserver2 默认端口:10000
通过端口检测增强状态判断的准确性
5.3 日志清理策略
# 添加日志清理脚本(建议每周执行)
find /var/log/my_hive_log -type f -mtime +7 -exec rm {} \;
相关文章:
【Hive 运维实战】一键管理 Hive 服务:Metastore 与 HiveServer2 控制脚本开发与实践
一、引言 在大数据开发中,Hive 作为重要的数据仓库工具,其核心服务metastore(元数据服务)和hiveserver2(查询服务)的启停管理是日常运维的基础操作。手动执行命令启停服务不仅效率低下,还容易因…...

振动力学的三类基本问题
振动问题的分类依赖于分类的出发点,本文从系统论的角度来分析振动问题的分类。如图1,一个振动系统,包括三个方面:输入、系统特性(或称为系统模型)、输出。其中,输入指外界载荷,包括力…...
04.MySQL数据类型详解
MySQL数据类型详解 文章目录 MySQL数据类型数据类型分类数值类型 tinyint类型bit类型float类型decimal类型 字符串类型 char类型varchar类型char和varchar比较 时间日期类型enum和set类型数据类型选择的进阶技巧常见误区与解决方案性能优化与最佳实践 MySQL数据类型 数据类型…...

移动端 UI自动化测试学习之Appium框架(包含adb调试工具介绍)
文章目录 前言adb调试工具adb组成常用命令获取程序的包名和界面名文件传输发送文件到手机从手机中拉取文件 获取app启动时间获取手机日志其他命令 Appium 简介工作原理图 环境搭建安装客户端库(appium lib)安装Appium Server安装JDK(自行下载…...

CS144 - Lecture 2
CS144 - Lecture 1 TCP 这里就简单讲了一下它的基本性质,没啥好说的 UDP 提供不可靠的传输服务,我们的 DNS 服务和 DHCP 都是用的 UDP 协议。 对于 DNS 我们只是单纯地向 DNS 服务器发送域名,然后返回一个 IP,如果还需要建立…...

B站视频下载器 v1.0.4|免登录下载1080P视频
核心亮点 ✅ 无需登录下载1080P高清视频✅ 支持Windows/macOS双平台✅ 纯净无广告完全免费✅ 可单独下载视频/音频/弹幕/字幕/封面 三步极简操作 粘贴B站视频链接选择保存位置点击「开始下载」 特色功能 独立下载选项(视频/音频/弹幕/字幕/封面)登录…...

AIGC学习笔记(8)——AI大模型开发工程师
文章目录 AI大模型开发工程师007 LangChain之Model IO模块1 Model IO核心概念2 Model IO代码实战什么是LCEL?ModelModel的分类LLMsChatModel PromptPrompt templatesExample selectorsOutput parsers AI大模型开发工程师 007 LangChain之Model IO模块 1 Model IO核…...

[蓝桥杯]剪格子
剪格子 题目描述 如下图所示,3 x 3 的格子中填写了一些整数。 我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是 60。 本题的要求就是请你编程判定:对给定的 mnmn 的格子中的整数,是否可以分割为两个部…...

明远智睿SSD2351开发板:语音机器人领域的变革力量
在人工智能快速发展的今天,语音机器人逐渐成为人们生活和工作中的得力助手。明远智睿SSD2351开发板凭借强大性能与丰富功能,为语音机器人的发展注入新动力,成为该领域的变革力量。 SSD2351开发板的四核1.4GHz处理器具备强劲的运算性能&#x…...
Mybtais框架各配置文件主要内容详解(一)
前言: Mybatis由ibatis框架演变而来——2010 年,iBATIS 框架正式更名为 MyBatis,并捐赠给 Apache 软件基金会,开启了开源社区驱动的发展之路。 Mybatis处于MVC三层架构的Model层,是一款优秀的半自动orm框架ÿ…...

Co-IP—验证蛋白互作的不二之选
蛋白互作在细胞生命活动中起着至关重要的作用,并在不同的时空层面上参与多种细胞活动,因此研究蛋白互作对于理解分子调控网络至关重要。而在植物中筛选到潜在的互作蛋白后,大多数情况下,获得表达两种蛋白的稳定转化植株费时又费力…...

数据可视化(第4、5、6次课)
Matplotlib 折线图 import numpy as np import matplotlib.pyplot as plt import matplotlib # 配置中文格式——保证图中出现中文的时候不会乱码 matplotlib.rcParams[font.sans-serif][SimHei] matplotlib.rcParams[axes.unicode_minus]False # 绘图 x np.linspace(0,2*np…...

DAY 18 推断聚类后簇的类型
目录 DAY 18 推断聚类后簇的类型1.推断簇含义的2个思路:先选特征和后选特征2.通过可视化图形借助ai定义簇的含义3.科研逻辑闭环:通过精度判断特征工程价值作业:参考示例代码对心脏病数据集采取类似操作,并且评估特征工程后模型效果有无提升。…...

结合源码分析Redis的内存回收和内存淘汰机制,LRU和LFU是如何进行计算的?
Redis 内存回收 1. 过期 key 处理 Redis 之所以性能强,最主要的原因就是基于内存存储。然而单节点的 Redis 其内存大小不宜过大,会影响持久化或主从同步性能。我们可以通过修改配置文件来设置Redis的最大内存: 当内存使用达到上限时&#…...

ESG体系
文字来自腾讯元宝 ESG是什么? ESG体系是一套综合评估企业在环境(Environmental)、社会(Social)和治理(Governance) 三个维度表现的非财务绩效标准,旨在衡量企业可持续发展能力和长期…...
基于 KubeKey 3.1.9,快速部署 K8s 1.33.0 高可用集群
作者:丁鑫磊,云原生运维工程师,专注于 KubeSphere 与 K8s 的深度应用,致力于自动化方向的探索与实践。热衷于挖掘 KubeSphere 的运维潜力,借助其简化 K8s 操作,提升运维效率,为企业云原生转型推…...

华为深度学习面试手撕题:手写nn.Conv2d()函数
题目 只允许利用numpy包,实现Pytorch二维卷积函数nn.Conv2d() 解答 此代码考察二维卷积的概念,详见: 6.2. 图像卷积 — 动手学深度学习 2.0.0 documentation 6.3. 填充和步幅 — 动手学深度学习 2.0.0 documentation 6.4. 多输入多输出通…...

归一化相关
归一化相关问题 归一化方式Batch NormalizationLayer NormalizationInstance NormalizationGroup NormalizationRMSNorm(Root Mean Square Layer Normalization):RMSNorm 和 LayerNorm区别?归一化方式 Batch Normalization 在每一层的输入进行归一化处理,使其在每个批次内…...
STM32Cubemx-H7-17-麦克纳姆轮驱动
前言 --末尾有总体的.c和.h 本篇文章把麦克纳姆轮的代码封装到.c和.h,使用者只需要根据轮子正转的方向,在.h处修改定义方向引脚,把轮子都统一正向后,后面的轮子驱动函数就可以正常了,然后直接调用函数驱动即可。 设…...
机器学习算法-逻辑回归
今天我们用 「预测考试是否及格」 的例子来讲解逻辑回归,从原理到实现一步步拆解,保证零基础也能懂! 🎯 例子背景 假设你是班主任,要根据学生的「学习时间」预测「是否及格」,手上有以下数据:…...
Office 2024免费下载 安装包
各位办公小能手们,你们知道吗?咱们日常办公经常会用到一个超厉害的软件套件,那就是Office,它全称Microsoft Office,是微软公司开发的。这玩意儿能大大提升个人和团队的办公效率,像文档处理、数据分析、演示…...
Linux云计算训练营笔记day18(Python)
# 猜数字游戏: 程序生产一个 1-100的随机数 # 让用户重复去猜测, 直到猜对为止 # 如果用户输入的数字 大于 随机生成的数字 提示 大了 # 如果用户输入的数字 小于 随机生产的数字 提示 小了 # 否则 猜对了 break # 增加需求 最多猜6次,如果没有猜对,提示 你失…...

Git深入解析功能逻辑与核心业务场景流程
一、Git核心功能逻辑架构 #mermaid-svg-9tj1iCr99u6QenJM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-9tj1iCr99u6QenJM .error-icon{fill:#552222;}#mermaid-svg-9tj1iCr99u6QenJM .error-text{fill:#552222;st…...
Opencv4 c++ 自用笔记 03 滑动条、相机与视频操作
1. 相机与视频操作 1.1 打开视频/相机 OpenCV 中 imread() 只能读取静态图像,若要读取视频文件或摄像头流,需要使用 VideoCapture 类: // 构造函数 cv::VideoCapture::VideoCapture(); cv::VideoCapture…...

LINUX528 重定向
2>&1 我的理解: 2>&1,2stderr错误输出,1stdout输出,stderr一般和stdout是分别输出(管道符只传递stdout,据元宝,stderr默认输出到终端;如果重定向符不进行2显示重定向&…...

研华工控机安装Windows10系统,适用UEFI(GPT)格式安装
主要硬件 主板:AIMB-787 、CPU:i5-6500 U盘启动工具:通过网盘分享的文件:rufus-3.20.zip 链接: https://pan.baidu.com/s/1YlFfd-_EhFHCG4sEHBQ8dQ?pwdQT12 提取码: QT12 Win10 22H2 Pro 纯净版系统:通过网盘分享…...

1、树莓派更换软件下载源
树莓派官方系统raspbian自带的是国外的软件源,在国内使用经常会遇到无法下载软件的问题。 以下是把raspbian系统(buster版本)的下载源改为阿里云软件源的方法。 1、修改sources.list文件 sudo nano /etc/apt/sources.list 将初始化中的代…...

历年中山大学计算机保研上机真题
历年中山大学计算机保研上机真题 2025中山大学计算机保研上机真题 2024中山大学计算机保研上机真题 2023中山大学计算机保研上机真题 在线测评链接:https://pgcode.cn/school 不连续1的子串 题目描述 给定一个数字 n n n,输出长度为 n n n 的 01…...

Python----目标检测(《SSD: Single Shot MultiBox Detector》论文和SSD的原理与网络结构)
一、SSD:单次多框检测器 1.1、基本信息 标题:SSD: Single Shot MultiBox Detector 作者:Wei Liu (UNC Chapel Hill), Dragomir Anguelov (Zoox Inc.), Dumitru Erhan, Christian Szegedy (Google Inc.), Scott Reed (University of Michiga…...

springboot集成websocket给前端推送消息
一般通常情况下,我们都是前端主动朝后端发送请求,那么有没有可能,后端主动给前端推送消息呢?这时候就可以借助websocket来实现。下面给出一个简单的实现样例。 首先创建一个websocketDemo工程,该工程的整体结构如下&a…...