【Hive 运维实战】一键管理 Hive 服务:Metastore 与 HiveServer2 控制脚本开发与实践

一、引言

在大数据开发中,Hive 作为重要的数据仓库工具,其核心服务metastore(元数据服务)和hiveserver2(查询服务)的启停管理是日常运维的基础操作。手动执行命令启停服务不仅效率低下,还容易因操作遗漏导致服务状态不一致。本文将介绍一个自主开发的 Hive 服务控制脚本,实现对两大核心服务的一键启停、状态查询及日志管理,大幅提升运维效率。

二、脚本核心功能与架构设计

2.1 核心功能

多模式操作:支持start(启动)、stop(停止)、status(状态查询)三种操作模式

单 / 批量控制:可单独指定服务(metastorehiveserver2)或批量操作所有服务

智能校验:自动检测服务状态,避免重复启停

日志管理:自动创建日志目录,将服务输出重定向到独立日志文件

友好交互:提供详细帮助信息和状态反馈

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 {} \;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简历制作要精而不简

不得不说,不管是春招,还是秋招,我们在求职时,第一步便是制作一份简历。不得不承认,好的简历,就像一块敲门砖,能让面试官眼前一亮,让应聘成功的概率增添一分。 对于一个初次求职者来…

深入Java8-日期时间API:TemporalQuery、TemporalQueries类

JDK版本&#xff1a;11 TemporalQuery FunctionalInterface public interface TemporalQuery<R> {R queryFrom(TemporalAccessor temporal); } emporalQuery是Java 8中用于时间查询的一个函数式接口&#xff0c;它允许用户对日期和时间进行查询。TemporalQuery接口中定…

Spring Boot + MyBatis 实现的简单用户管理项目的完整目录结构示例

&#x1f4c1; 示例项目结构&#xff08;基于 Maven&#xff09; user-management/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/usermanagement/ │ │ │ ├── controller/ │ │ │ │ └── UserC…

嵌入式RTC工作原理及应用场景

20ppm 是衡量 RTC&#xff08;实时时钟&#xff09;精度的关键指标&#xff0c;表示 每百万秒&#xff08;约11.57天&#xff09;的最大时间误差范围。以下是通俗易懂的解释&#xff1a; 1. ppm 的含义 ppm Parts Per Million&#xff08;百万分之一&#xff09; 1 ppm 1/1,…

[Godot][游戏开发] 如何在 Godot 中配置 Android 环境(适配新版 Android Studio)

在使用 Godot 进行 Android 项目的开发与导出时&#xff0c;配置 Android 环境是一项必要步骤。随着 Android Studio 的更新&#xff08;特别是自 Arctic Fox 版本起&#xff09;&#xff0c;安装方式发生了变化&#xff0c;默认不再引导用户手动配置 SDK/JDK/NDK&#xff0c;而…

量子语言模型——where to go

1️⃣ 在大语言模型&#xff08;LLM&#xff09;高度发达的今天&#xff0c;还研究这些小模型&#xff08;如n-gram、RNN、量子语言模型&#xff09;是否有意义&#xff1f; ✅ 有意义&#xff0c;但意义已经转变了——不再是用于「直接生产 SOTA 应用」&#xff0c;而是&…

机电的焊接技术

焊接技术:高温或高压条件下,使用焊接材料(焊条或焊丝)将两块或两块以上的母材(待焊接的工件)连接 成一个整体的操作方法&#xff61; 2.3.1 焊接设备和焊接材料的分类及选用 1.焊接设备&#xff08;对应焊接方法&#xff09; 2.焊接材料&#xff08;焊条、焊丝、焊剂、焊接气…

深入解析Vue.js:构建现代Web应用的高效之道

一、Vue.js 的核心设计理念 Vue.js 以渐进式框架为定位,强调轻量灵活与易上手性,允许开发者根据项目需求逐步引入核心功能或扩展模块。其核心设计遵循以下原则: 响应式数据绑定:通过数据劫持(Object.defineProperty/Proxy)和发布 - 订阅模式,实现视图与数据的自动同步,…

信贷特征分析可视化函数(外置指标面板完整版)

XY的基础处理 target_column[SeriousDlqin2yrs] feature_columns[RevolvingUtilizationOfUnsecuredLines, age,NumberOfTime30-59DaysPastDueNotWorse, DebtRatio, MonthlyIncome,NumberOfOpenCreditLinesAndLoans, NumberOfTimes90DaysLate,NumberRealEstateLoansOrLines, Nu…

ESP32-idf学习(三)esp32C3连接iot

一、前言 上一篇用蓝牙作为通信方式&#xff0c;虽然勉强完成了控制&#xff0c;但结果显然不是那么符合我们的预期&#xff0c;既然用蓝牙还需要研究一段时间&#xff0c;那我们就先整一些现成的&#xff0c;不需要研究的&#xff01;iot云平台&#xff01;这里当然也是通过w…

Axure RP11安装、激活、汉化

一:注册码 Axure RP11.0.0.4122在2025-5-29日亲测有效: 49bb9513c40444b9bcc3ce49a7a022f9

高光谱成像相机:基于高光谱成像技术的玉米种子纯度检测研究

种子纯度是衡量种子质量的核心指标之一&#xff0c;直接影响农作物产量与品质。传统检测方法&#xff08;如形态学观察、生化分析&#xff09;存在耗时长、破坏样本、依赖人工等缺陷。近年来&#xff0c;高光谱成像技术因其融合光谱与图像信息的优势&#xff0c;成为无损检测领…

Excel 中的TEXTJOIN用法(基础版),将Excel 多个单元格内容按条件合并到一个单元格

1.新建一张数据透视表 选择你需要的维度所在的列 2.点击确定生成&#xff0c;勾选右边的维度 3.选中单元格&#xff0c;通过 ShiftF3 查看函数参数 第一个参数&#xff1a;分隔符&#xff0c;用来分隔合并的文本&#xff0c;不需要分隔用"" 第二个参数&#xff1a;…

2025.05.28【Choropleth】群体进化学专用图:区域数据可视化

Load geospatial data Start by loading your geospatial data in R, and build a basic plot. Data from the package The cartography comes with a set of geospatial data included. Learn how to use it to build a choropleth map. 文章目录 Load geospatial dataData …

QT-Creator安装教程(windows)

目录 1,下载 1.1 镜像源下载 1.2 运行下载的exe文件 1.2.1 QT5 版本安装 1.2.2 QT6 版本安装 1.2.3 如何在安装完成之后,继续添加扩展包 1,下载 1.1 镜像源下载 地址:Index of /qtproject/

Deepin 23.10安装Docker

个人博客地址&#xff1a;Deepin 23.10安装Docker | 一张假钞的真实世界 Deepin 是基于 Debian 的国产 Linux 发行版&#xff0c;安装 Docker Desktop 可能会遇到兼容性问题&#xff0c;因为 Docker Desktop 官方主要支持 Ubuntu/Debian/Red Hat/Fedora/Arch 等主流发行版&…

ARXML解析与可视化工具

随着汽车电子行业的快速发展,AUTOSAR标准在车辆软件架构中发挥着越来越重要的作用。然而,传统的ARXML文件处理工具往往存在高昂的许可费用、封闭的数据格式和复杂的使用门槛等问题。本文介绍一种基于TXT格式输出的ARXML解析方案,为开发团队提供了一个高效的替代解决方案。 …

2026-2030工业发展解读系列:PLM/PDM系统解析报告(预览版)

1 PLM系统的核心价值与功能定位 PLM是一种贯穿产品全生命周期的战略性数字化工具&#xff0c;覆盖从概念设计、研发、生产到退市的全流程管理。 PLM系统功能模块包含数据管理、流程协同、项目管控等核心&#xff0c;支持从三维设计到生产制造的全链条数字化协同。 1.1数据管…

Go语言中的rune和byte类型详解

1. rune类型 1.1. 基本概念 1. rune是Go语言的内建类型&#xff0c;它是int32的别名&#xff0c;即32位有符号整数&#xff1b; 2. 用于表示一个Unicode码点&#xff0c;全拼Unicode code point&#xff1b; 3. 可以表示任何UTF-8编码的字符&#xff1b; 1.2. 特点 1. 每…

【中国・珠海】2025 物联网与边缘计算国际研讨会(IoTEC2025)盛大来袭!

2025 物联网与边缘计算国际研讨会&#xff08;IoTEC2025&#xff09;盛大来袭&#xff01; 科技浪潮奔涌向前&#xff0c;物联网与边缘计算已成为驱动各行业变革的核心力量。在此背景下&#xff0c;2025 物联网与边缘计算国际研讨会&#xff08;IoTEC2025&#xff09;即将震撼…