hive下载安装
Hive 安装全指南:从下载到启动,Derby 测试 → MySQL 生产,照着配就能跑
使用的版本是3.1.2
Hive 的安装分两步:
- 下载解压:五分钟搞定
- 元数据配置:这是重点——默认用 Derby(只能单客户端测试),生产必须换 MySQL
前提条件:Hadoop 要先跑起来
Hive 跑在 Hadoop 上,所以 Hadoop 集群必须先启动。
确认 Hadoop 已启动
start-dfs.sh
start-yarn.sh
检查进程
jps
应该看到:NameNode、DataNode、ResourceManager、NodeManager
如果没有这些进程,先回去把 Hadoop 搭好。
版本要求:
- JDK 8(Hive 3.1.2 对 JDK 11 支持有限,建议 JDK 8)
- Hadoop 3.x(本文以 3.3.0 为例)
下载解压
下载(清华镜像)
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
解压
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /usr/local/myself/
重命名(方便后面配路径)
mv /usr/local/myself/apache-hive-3.1.2-bin /usr/local/myself/hive-3.1.2
配环境变量
编辑 ~/.bash_profile:
export HIVE_HOME=/usr/local/myself/hive-3.1.2
export PATH=$HIVE_HOME/bin:$PATH
生效:
source ~/.bash_profile
验证:
hive --version
能看到版本信息说明配对了
元数据存储:Derby vs MySQL
Hive 的元数据(表结构、分区信息、列类型)存在哪儿?默认是 Derby。
| 存储方式 | Derby(默认) | MySQL(生产推荐) |
|---|---|---|
| 多客户端 | 不支持 | 支持 |
| 数据持久化 | 存本地文件,容易丢 | 独立存储,可靠 |
| 适用场景 | 单机测试 | 生产环境 |
Derby 的问题是:同时只能一个客户端连 Hive。 开两个终端连 Hive,第二个会报错。生产环境必须换 MySQL。
先跑 Derby 验证 Hive 能启动,再切 MySQL。
先用 Derby 跑起来(测试验证)
初始化 Derby 元数据:
cd $HIVE_HOME
bin/schematool -dbType derby -initSchema
看到 schemaTool completed 表示成功。
启动 Hive:
bin/hive
进入 hive> 命令行说明成功了。
验证:
hive> show databases;
hive> create database test_db;
Derby 的缺陷: 开第二个终端再跑 bin/hive,会报错。不是 Hive 的问题,是 Derby 的限制。
换成 MySQL 存储元数据(生产配置)
Step 1:MySQL 里建库
-- 登录 MySQL
mysql -u root -p
-- 建库(字符集用 utf8)
CREATE DATABASE metastore CHARACTER SET utf8 COLLATE utf8_general_ci;
-- 授权(把 root 密码换成你的)
GRANT ALL PRIVILEGES ON metastore.* TO 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
Step 2:下载 MySQL JDBC 驱动
下载驱动(MySQL 5.7 用这个)
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar
放到 Hive 的 lib 目录
mv mysql-connector-java-5.1.49.jar $HIVE_HOME/lib/
注意: MySQL 8.x 要用 mysql-connector-java-8.x.jar,驱动类名也不一样(com.mysql.cj.jdbc.Driver)。
Step 3:配置 hive-site.xml
cd $HIVE_HOME/conf
没有这个文件就新建
vim hive-site.xml
<configuration>
<!-- 1. MySQL 连接 URL(metastore 为数据库名,需提前创建) -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/metastore?useSSL=false&allowPublicKeyRetrieval=true</value>
<!-- 注意:XML 中 & 需转义为 & -->
</property>
<!-- 2. MySQL 驱动类 -->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value> <!-- MySQL 5.x 驱动 -->
<!-- MySQL 8.x 需使用:com.mysql.cj.jdbc.Driver -->
</property>
<!-- 3. MySQL 用户名 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value> <!-- 替换为你的 MySQL 用户名 -->
</property>
<!-- 4. MySQL 密码 -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value> <!-- 替换为你的 MySQL 密码 -->
</property>
<!-- 5. 关闭元数据版本验证(避免版本不一致报错) -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!-- 6. 禁用元数据存储授权(简化配置) -->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
</configuration>
注意 XML 中的 & 要转义: & 写成 &,不然 XML 解析报错。
Step 4:初始化 MySQL 元数据
cd $HIVE_HOME
bin/schematool -dbType mysql -initSchema
看到 schemaTool completed 就成功了。
Step 5:验证
bin/hive
create database test_mysql;
去 MySQL 里确认:
mysql -u root -p
use metastore;
select NAME from DBS; -- 应该能看到 test_mysql
启动成功后的验证
-- 建库
CREATE DATABASE hive_test;
-- 切库
USE hive_test;
-- 建表
CREATE TABLE test(id INT, name STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
-- 看表
SHOW TABLES;
-- 退出
exit;
启动时的常见报错
1. Hive-on-MR is deprecated 警告
启动时看到这个警告:
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions.
意思是 MapReduce 执行引擎在 Hive 2 以后被标记为过时了。不影响使用,只是提示你可以换成 Tez 或 Spark(更快)。
暂时无视,能跑就行。 以后想优化再装 Tez。
2. 元数据初始化失败
Schema initialization FAILED! Metastore state would be inconsistent!
常见原因:
- MySQL 驱动包没放到
$HIVE_HOME/lib/ hive-site.xml里密码配错了- MySQL 里
metastore库没建,或者权限没给 - JDBC URL 里的
&写成了& - MySQL 驱动包版本不匹配(如 MySQL 8.x 使用了 5.x 驱动)
3. 启动时一直卡住
检查 Hadoop 集群是否启动,Hive 需要连 HDFS 和 YARN。