hive下载安装

Hive 安装全指南:从下载到启动,Derby 测试 → MySQL 生产,照着配就能跑

使用的版本是3.1.2

Hive 的安装分两步:

  1. 下载解压:五分钟搞定
  2. 元数据配置:这是重点——默认用 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
<?xml version="1.0"?>  
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
<configuration>  
  <!-- 1. MySQL 连接 URL(metastore 为数据库名,需提前创建) -->  
  <property>  
    <name>javax.jdo.option.ConnectionURL</name>  
    <value>jdbc:mysql://localhost:3306/metastore?useSSL=false&amp;allowPublicKeyRetrieval=true</value>  
    <!-- 注意:XML 中 & 需转义为 &amp; -->  
  </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
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。