前言
本文是大数据三大组件安装系列的第二篇,将详细介绍如何在已搭建好 Hadoop 伪分布式的基础上,安装和配置Hive 3.1.2。Hive 是构建在 Hadoop 之上的数据仓库工具,它提供类 SQL 的查询语言(HiveQL),使得开发者可以用熟悉的 SQL 语法来分析存储在 HDFS 中的大规模数据。
📦本系列所需安装包:百度网盘下载(提取码:me15)
📌前置条件:请确保已完成 Hadoop 伪分布式安装,并且 HDFS 可以正常启动。
环境与版本信息
| 组件 | 版本 | 说明 |
|---|---|---|
| Hive | 3.1.2 | 数据仓库 |
| MySQL | 5.7+ | Hive 元数据存储后端 |
| MySQL Connector | 5.1.40 | JDBC 驱动 |
| Hadoop | 3.1.3 | 已安装(上一篇) |
| JDK | 1.8 | 已安装(上一篇) |
一、安装 Hive
1.1 解压并配置目录
将 Hive 安装包解压到/usr/local目录,并重命名、设置权限:
# 解压到 /usr/local sudo tar -zxvf ./apache-hive-3.1.2-bin.tar.gz -C /usr/local # 重命名为 hive cd /usr/local/ sudo mv apache-hive-3.1.2-bin hive # 修改文件权限(替换为你的用户名) sudo chown -R hadoop:hadoop hive1.2 准备配置文件
进入 Hive 的配置目录,将模板文件重命名为正式配置文件:
cd /usr/local/hive/conf mv hive-default.xml.template hive-default.xml二、配置 Hive
编辑hive-default.xml文件,将其内容替换为以下配置。配置按功能模块分组,每个属性都附有中文说明:
vim /usr/local/hive/conf/hive-default.xml完整配置内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- ==================== JDBC 连接配置 ==================== --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&userSSL=false</value> <description>JDBC 连接字符串,用于连接 MySQL 元数据库</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>JDBC 驱动类名</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> <description>连接元数据库的用户名</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> <description>连接元数据库的密码</description> </property> <!-- ==================== 元数据仓库配置 ==================== --> <property> <name>hive.metastore.warehouse.dir</name> <value>/usr/local/hadoop/tmp/dfs/data</value> <description>Hive 数据仓库在 HDFS 上的默认存储路径</description> </property> <property> <name>hive.metastore.schema.verification</name> <value>false</value> <description>关闭元数据 Schema 版本验证(开发环境建议关闭)</description> </property> <property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> <description>关闭元数据事件通知的身份验证</description> </property> <property> <name>hive.metastore.uris</name> <value>thrift://localhost:9083</value> <description>Metastore 服务地址(Thrift 协议)</description> </property> <property> <name>metastore.catalog.default</name> <value>hive</value> <description>默认的 Catalog 名称</description> </property> <property> <name>datanucleus.schema.autoCreateAll</name> <value>true</value> <description>自动创建元数据表结构</description> </property> <!-- ==================== CLI 显示配置 ==================== --> <property> <name>hive.cli.print.header</name> <value>true</value> <description>查询结果显示列名表头</description> </property> <property> <name>hive.cli.print.current.db</name> <value>true</value> <description>命令行提示符中显示当前数据库名</description> </property> <!-- ==================== 执行引擎配置 ==================== --> <property> <name>hive.execution.engine</name> <value>mr</value> <description>执行引擎,默认 MapReduce(后续可切换为 Spark)</description> </property> <property> <name>hive.spark.client.connect.timeout</name> <value>300000ms</value> <description>Spark 客户端连接超时时间</description> </property> <property> <name>hive.spark.client.server.connect.timeout</name> <value>300000ms</value> <description>Spark 服务端连接超时时间</description> </property> <!-- ==================== HiveServer2 远程连接配置 ==================== --> <property> <name>hive.server2.thrift.port</name> <value>10000</value> <description>HiveServer2 Thrift 服务端口</description> </property> <property> <name>hive.server2.thrift.http.port</name> <value>10001</value> <description>HiveServer2 HTTP 传输端口</description> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>0.0.0.0</value> <description>绑定地址设为 0.0.0.0 以允许远程连接</description> </property> <property> <name>hive.server2.thrift.client.user</name> <value>hadoop</value> <description>Thrift 客户端默认用户名</description> </property> <property> <name>hive.server2.thrift.client.password</name> <value>123456</value> <description>Thrift 客户端默认密码</description> </property> <!-- ==================== 事务与高级特性 ==================== --> <property> <name>hive.support.concurrency</name> <value>true</value> <description>启用并发支持</description> </property> <property> <name>hive.enforce.bucketing</name> <value>true</value> <description>强制执行分桶操作</description> </property> <property> <name>hive.exec.dynamic.partition.mode</name> <value>nonstrict</value> <description>动态分区模式设为非严格(允许全动态分区)</description> </property> <property> <name>hive.txn.manager</name> <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value> <description>事务管理器(支持 ACID 操作)</description> </property> <property> <name>hive.compactor.initiator.on</name> <value>true</value> <description>启用压缩器(配合 ACID 事务使用)</description> </property> <property> <name>hive.compactor.worker.threads</name> <value>1</value> <description>压缩器工作线程数</description> </property> <property> <name>hive.metastore.disallow.incompatible.col.type.changes</name> <value>false</value> <description>允许不兼容的列类型变更</description> </property> </configuration>三、安装 MySQL 并配置元数据库
3.1 安装 MySQL
Hive 默认使用 Derby 作为元数据库,但 Derby 不支持多会话访问。生产和开发环境推荐使用 MySQL 替代:
# 更新软件源 sudo apt-get update # 安装 MySQL Server sudo apt-get install mysql-server3.2 部署 MySQL JDBC 驱动
Hive 通过 JDBC 连接 MySQL,需要将驱动 jar 包放入 Hive 的lib目录:
# 解压驱动包 tar -zxvf mysql-connector-java-5.1.40.tar.gz # 将 jar 文件复制到 Hive 的 lib 目录 cp mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /usr/local/hive/lib/3.3 创建 Hive 元数据库并授权
登录 MySQL,创建 Hive 专用的数据库和用户:
# 登录 MySQL mysql -u root -p在 MySQL 命令行中依次执行:
-- 创建 hive 元数据库 CREATE DATABASE hive; -- 创建 hive 用户并授权(密码与 hive-default.xml 中配置的一致) GRANT ALL ON *.* TO hive@localhost IDENTIFIED BY 'hive'; -- 刷新权限 FLUSH PRIVILEGES;四、初始化与启动
4.1 初始化元数据 Schema
⚠️重要:首次启动 Hive 前,必须先初始化元数据库的表结构,否则会报
MissingTableException错误。
cd /usr/local/hive ./bin/schematool -dbType mysql -initSchema4.2 启动 Hadoop HDFS
Hive 依赖 HDFS 存储数据,启动 Hive 前需确保 HDFS 已运行:
cd /usr/local/hadoop ./sbin/start-dfs.sh4.3 启动 Hive CLI
cd /usr/local/hive ./bin/hive如果成功进入hive>命令提示符,说明 Hive 安装成功。
4.4 启动 HiveServer2(远程连接)
如果需要通过 JDBC 工具(如 DataGrip、DBeaver)远程连接 Hive,还需要启动 Metastore 服务和 HiveServer2:
# 启动 Metastore 服务(后台运行) nohup hive --service metastore & # 启动 HiveServer2(后台运行) nohup hive --service hiveserver2 &验证 HiveServer2 是否启动成功:
# 检查 10000 端口是否在监听 netstat -ntulp | grep 10000通过 Beeline 客户端测试连接(用户名和密码可留空直接回车):
beeline !connect jdbc:hive2://localhost:10000五、常见错误与解决方案
| 错误信息 | 原因 | 解决方法 |
|---|---|---|
NoSuchMethodError: com.google.common.base.Preconditions.checkArgument | Hive 和 Hadoop 依赖的guava.jar版本不一致 | 分别查看hadoop/share/hadoop/common/lib/和hive/lib/下的 guava 版本,删除低版本,保留高版本并复制到两处 |
MissingTableException: Required table missing: "VERSION" | 元数据库未初始化 | 执行./bin/schematool -dbType mysql -initSchema |
总结
本文在 Hadoop 伪分布式的基础上,完成了 Hive 3.1.2 的安装与配置,核心步骤如下:
- 安装 Hive:解压 + 重命名 + 设置权限
- 配置 Hive:编辑
hive-default.xml,配置 JDBC 连接、元数据仓库、HiveServer2 等 - 安装 MySQL:作为元数据存储后端,创建数据库并授权
- 初始化与启动:初始化 Schema → 启动 HDFS → 启动 Hive
- 远程连接:启动 Metastore + HiveServer2,通过 Beeline 或 JDBC 工具连接
📌上一篇:大数据三大组件安装之 Hadoop 伪分布式
📌下一篇:大数据三大组件安装之 Spark 伪分布式
如果在搭建过程中遇到问题,欢迎在评论区留言交流!