news 2026/10/27 16:04:28

Hive Metastore 使用 MySQL 8(CJ 驱动)完整配置实战(含完整 Shell 脚本)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hive Metastore 使用 MySQL 8(CJ 驱动)完整配置实战(含完整 Shell 脚本)

本文通过一份可直接运行的 Shell 脚本,完成 Hive Metastore 在 MySQL 8 上的创建、配置、驱动替换和 schema 初始化,适合生产与集群环境。


一、环境说明

1️⃣ 软件版本

组件版本
Hive3.x
MySQL8.x
JDBC 驱动mysql-connector-java 8.x
JDK1.8+

2️⃣ 目录规划

Hive 安装目录: /opt/hive Hive lib 目录: /opt/hive/lib Hive 配置目录: /opt/hive/conf

3️⃣ MySQL 前置检查

systemctl status mysqld

未启动则:

systemctl start mysqld systemctlenablemysqld

二、完整 Hive Metastore 初始化 Shell 脚本(原样保留)

✅ 特点

  • 使用MySQL 8 官方 CJ 驱动
  • 自动删除旧 5.x 驱动
  • 自动创建 metastore 数据库
  • 自动创建 hive 用户并授权
  • 自动初始化 schema
  • 避免 XML 转义、时区、认证问题

📌完整 Shell 脚本(你的原始版本)

#!/bin/bash# 配置 Hive Metastore 并初始化(使用 com.mysql.cj.jdbc.Driver)set-e# =================== 配置区域 ===================HIVE_HOME="/opt/hive"MYSQL_ROOT_PASSWORD="YFSTpiGxS2%j"MYSQL_NODE="node1"MYSQL_JDBC_VERSION="8.0.12"# MySQL JDBC 驱动版本# Hive Metastore 用户配置HIVE_DB="metastore"HIVE_USER="hive"HIVE_PASSWORD="Hive123!"# 必须符合 MySQL 密码策略RESET_METASTORE=false# true -> 删除已有 Metastore 并重新初始化FORCE_XML_UPDATE=false# true -> 强制更新 hive-site.xml(即使文件存在)FIX_XML_ONLY=false# true -> 只修复 XML 转义,不初始化 schema# ===============================================echo"=== Hive Metastore 配置(CJ 驱动) ==="# 创建临时 MySQL 配置文件,隐藏密码TMP_MY_CNF="/tmp/mysql_hive.cnf"cat>"$TMP_MY_CNF"<<EOF [client] user=root password=$MYSQL_ROOT_PASSWORDEOF# 确保 MySQL 已启动echo">>> 启动 MySQL..."systemctl start mysqld&&echo"✅ MySQL 启动完成"# 删除旧 MySQL 驱动echo">>> 删除旧 MySQL JDBC 驱动(5.x)..."rm-f"$HIVE_HOME/lib/mysql-connector-java-5.1.*.jar"&&echo"✅ 已删除旧驱动"# 下载 MySQL 8.x 驱动(CJ 驱动)JDBC_JAR_NAME="mysql-connector-java-${MYSQL_JDBC_VERSION}.jar"if[!-f"$HIVE_HOME/lib/$JDBC_JAR_NAME"];thenecho">>> 下载 MySQL Connector/J$MYSQL_JDBC_VERSION..."wget-q"https://repo1.maven.org/maven2/mysql/mysql-connector-java/${MYSQL_JDBC_VERSION}/$JDBC_JAR_NAME"-P /tmpcp"/tmp/$JDBC_JAR_NAME""$HIVE_HOME/lib/"echo"✅ MySQL 8.x 驱动下载并放入 Hive lib"elseecho"✅ MySQL 8.x 驱动已存在,跳过下载"fi# 如果选择重置 Metastore,则先删除数据库if["$RESET_METASTORE"=true];thenecho">>> 重置 Hive Metastore 数据库..."mysql --defaults-extra-file="$TMP_MY_CNF"-e"DROP DATABASE IF EXISTS$HIVE_DB;"&&\echo"✅ Hive Metastore 数据库已删除"fi# 创建数据库echo">>> 创建 Hive Metastore 数据库..."mysql --defaults-extra-file="$TMP_MY_CNF"-e"CREATE DATABASE IF NOT EXISTS$HIVE_DB;"&&\echo"✅ Hive Metastore 数据库创建完成或已存在"# 创建/更新用户USER_EXIST=$(mysql --defaults-extra-file="$TMP_MY_CNF"-e"SELECT User FROM mysql.user WHERE User='$HIVE_USER';"|grep"$HIVE_USER"||true)if[-z"$USER_EXIST"];thenmysql --defaults-extra-file="$TMP_MY_CNF"-e"CREATE USER '$HIVE_USER'@'%' IDENTIFIED BY '$HIVE_PASSWORD';"mysql --defaults-extra-file="$TMP_MY_CNF"-e"GRANT ALL PRIVILEGES ON$HIVE_DB.* TO '$HIVE_USER'@'%';"mysql --defaults-extra-file="$TMP_MY_CNF"-e"FLUSH PRIVILEGES;"echo"✅ Hive 用户$HIVE_USER创建完成"else# 更新密码以防 Hive 用户密码不一致mysql --defaults-extra-file="$TMP_MY_CNF"-e"ALTER USER '$HIVE_USER'@'%' IDENTIFIED BY '$HIVE_PASSWORD';"echo"✅ Hive 用户$HIVE_USER已存在,密码已更新"fi# 配置 hive-site.xmlHIVE_SITE_FILE="$HIVE_HOME/conf/hive-site.xml"cat>"$HIVE_SITE_FILE"<<EOF <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://$MYSQL_NODE:3306/$HIVE_DB?createDatabaseIfNotExist=true&amp;useSSL=false&amp;serverTimezone=UTC</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.cj.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>$HIVE_USER</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>$HIVE_PASSWORD</value> </property> </configuration> EOF# 初始化 Hive Metastore(跳过如果只修复 XML)if["$FIX_XML_ONLY"=false];thenif["$RESET_METASTORE"=true];thenecho">>> 重置并初始化 Hive Metastore 元数据库表..."$HIVE_HOME/bin/schematool -dbType mysql -initSchemaecho"✅ Hive Metastore 元数据库已重置并初始化完成"else$HIVE_HOME/bin/schematool -dbType mysql -info&>/dev/null||{echo">>> 初始化 Hive Metastore 元数据库表..."$HIVE_HOME/bin/schematool -dbType mysql -initSchemaecho"✅ Hive Metastore 元数据库初始化完成"}fielseecho">>> 跳过 schema 初始化(FIX_XML_ONLY 模式)"fi# 删除临时 MySQL 配置文件rm-f"$TMP_MY_CNF"echo"=== Hive Metastore 配置并初始化完成(CJ 驱动) ==="

三、脚本使用方式

1️⃣ 赋予执行权限

chmod+x init-hive-metastore.sh

2️⃣ 执行初始化

./init-hive-metastore.sh

3️⃣ 重置 Metastore(慎用)

RESET_METASTORE=true ./init-hive-metastore.sh

四、验证是否成功

1️⃣ 进入 Hive

hive
showdatabases;

2️⃣ 检查 MySQL 表

mysql -u hive -p metastore -e"show tables;"

能看到DBS、TBLS、VERSION等表即成功。


五、常见问题汇总(必看)

❌ 1. 驱动冲突

ClassNotFoundException: com.mysql.jdbc.Driver

✔ 已在脚本中自动删除 5.x 驱动


❌ 2. MySQL 8 认证失败

Public Key Retrieval is not allowed

✔ 使用com.mysql.cj.jdbc.Driver


❌ 3. XML 解析错误

✔ 已正确使用&amp;转义


六、总结

  • ✔完整 Shell 自动化部署
  • ✔ 适配 Hive 3.x + MySQL 8
  • ✔ 生产环境可直接复用
  • ✔ 一次执行,彻底避坑
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 9:11:23

MALG模块优化和修复的bug梳理(二)

Bug #1: 内存泄漏修复 文件: mlag/src/mlag_pkt.c /***************************************************************************** * 函数名 : mlagUpdateDadNexthop * 负责人 : * 创建日期:20180731 * 函数功能:更新DAD下一跳信息 * 输入参数:无 * 输出参数:无 …

作者头像 李华
网站建设 2026/10/27 9:11:04

3.10 DaemonSet和Job控制器:节点守护进程与批处理任务完整实战

3.10 DaemonSet和Job控制器:节点守护进程与批处理任务完整实战 引言 DaemonSet和Job是Kubernetes中用于特殊场景的控制器。DaemonSet确保每个节点运行一个Pod副本,常用于日志收集、监控等场景。Job用于运行一次性任务或批处理任务。本文将详细介绍这两个控制器的使用方法。…

作者头像 李华
网站建设 2026/10/27 8:50:44

开源可二开的二手车小程序源码系统 带完整的搭建部署教程

温馨提示&#xff1a;文末有资源获取方式 在数字化营销时代&#xff0c;许多二手车商家选择使用标准化SaaS平台&#xff0c;却常常受限于功能固化、数据无法自主、定制成本高昂等问题。真正的商业竞争力&#xff0c;往往源于拥有一个能够随业务成长而灵活进化、数据完全自主的专…

作者头像 李华
网站建设 2026/10/27 8:50:44

工时统计报表怎么做才有用?对比2026年7款工具的报表与分析能力

本文将深入对比2026年7款项目工时管理工具&#xff1a;PingCode、Worktile、Jira、Wrike、Replicon、Harvest、Clockify。 一、项目工时管理工具怎么选&#xff1a;把“填工时”变成“管项目” 很多团队把工时管理理解成“加一张填报表”。但真正能产生价值的工时管理&#xff…

作者头像 李华
网站建设 2026/10/27 8:50:45

软件开发项目管理系统大盘点:9款工具对比,哪个最适合你的团队?

本文将深入对比9款面向软件开发项目的项目管理系统&#xff1a;PingCode、Jira Software、Azure DevOps、GitLab、GitHub、YouTrack、Rally、TAPD、CODING DevOps。一、为什么通用项目管理工具不够用很多团队在早期会用通用项目管理工具来管研发&#xff1a;建几个看板列、把任…

作者头像 李华