Skip to content

Instantly share code, notes, and snippets.

@kangvcar
Last active June 4, 2025 03:17
Show Gist options
  • Select an option

  • Save kangvcar/e1e1993b2de9904f75230bb057ac3214 to your computer and use it in GitHub Desktop.

Select an option

Save kangvcar/e1e1993b2de9904f75230bb057ac3214 to your computer and use it in GitHub Desktop.

Hive 4.0.1 部署指南

本指南详细介绍了如何在分布式环境中部署Apache Hive 4.0.1,使用MariaDB作为Metastore后端数据库。

系统架构

  • Master节点: 运行Hive Metastore和HiveServer2服务
  • Slave节点: slave1, slave2 (工作节点)
  • 数据库: MariaDB (存储Hive元数据)
  • 存储: HDFS (存储实际数据)

部署步骤

1. 下载和安装Hive

首先下载Hive 4.0.1并解压到指定目录:

cd /opt/software/
wget https://dlcdn.apache.org/hive/hive-4.0.1/apache-hive-4.0.1-bin.tar.gz
tar -zxvf apache-hive-4.0.1-bin.tar.gz -C /opt/
mv /opt/apache-hive-4.0.1-bin /opt/hive

2. 配置Hive环境变量

将Hive路径添加到系统环境变量中:

cat >> /etc/profile << EOF
export HIVE_HOME=/opt/hive
export PATH=\$PATH:\$HIVE_HOME/bin
EOF
source /etc/profile

3. 安装和配置MariaDB

安装MariaDB数据库服务器作为Hive的Metastore后端:

yum install mariadb mariadb-server -y
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation

4. 创建Hive数据库和用户权限

为Hive创建专用数据库并设置访问权限:

mysql -uroot -p << EOF
CREATE DATABASE IF NOT EXISTS hive;
GRANT ALL PRIVILEGES ON hive.* TO 'root'@'%' IDENTIFIED BY 'toor';
GRANT ALL PRIVILEGES ON hive.* TO 'root'@'localhost' IDENTIFIED BY 'toor';
FLUSH PRIVILEGES;
EXIT
EOF

5. 下载MariaDB驱动

下载MariaDB的JDBC驱动程序:

wget -P /opt/hive/lib https://dlm.mariadb.com/4234102/Connectors/java/connector-java-3.5.3/mariadb-java-client-3.5.3.jar

6. 创建Hive配置文件

创建详细的Hive配置文件 hive-site.xml

cat > /opt/hive/conf/hive-site.xml << 'EOF'
<configuration>
    <!-- Metastore仓库配置 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
        <description>Hive默认仓库位置,用于存储托管表数据</description>
    </property>

    <!-- MariaDB数据库连接配置 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mariadb://master:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf8</value>
        <description>连接到Hive Metastore数据库的JDBC URL,使用MariaDB作为后端数据库</description>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>org.mariadb.jdbc.Driver</value>
        <description>连接Hive Metastore数据库的JDBC驱动类名(MariaDB Connector/J 3.5.3)</description>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
        <description>连接Hive Metastore数据库的用户名</description>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>toor</value>
        <description>连接Hive Metastore数据库的密码</description>
    </property>

    <!-- Schema管理配置 -->
    <property>
        <name>datanucleus.schema.autoCreateAll</name>
        <value>true</value>
        <description>当设置为true时,DataNucleus将自动创建不存在的表和列</description>
    </property>

    <property>
        <name>datanucleus.autoCreateSchema</name>
        <value>true</value>
        <description>自动创建数据库schema</description>
    </property>

    <property>
        <name>datanucleus.fixedDatastore</name>
        <value>false</value>
        <description>允许修改数据存储结构</description>
    </property>

    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
        <description>禁用schema验证,允许自动更新Metastore schema而无需手动干预</description>
    </property>

    <!-- Metastore服务配置 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://master:9083</value>
        <description>Metastore Thrift服务地址,用于远程连接</description>
    </property>

    <property>
        <name>hive.metastore.client.connect.retry.delay</name>
        <value>5</value>
        <description>客户端连接Metastore失败后重试的延迟时间(秒)</description>
    </property>

    <property>
        <name>hive.metastore.client.socket.timeout</name>
        <value>1800</value>
        <description>客户端socket超时时间(秒)</description>
    </property>

    <!-- HiveServer2配置 -->
    <property>
        <name>hive.server2.enable.doAs</name>
        <value>true</value>
        <description>启用HiveServer2以提交查询的用户身份执行查询,而不是HiveServer2服务用户</description>
    </property>

    <property>
        <name>hive.server2.authentication</name>
        <value>NONE</value>
        <description>指定HiveServer2连接的认证模式</description>
    </property>

    <property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
        <description>HiveServer2 Thrift服务端口</description>
    </property>

    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>0.0.0.0</value>
        <description>HiveServer2绑定所有网络接口</description>
    </property>

    <property>
        <name>hive.server2.transport.mode</name>
        <value>binary</value>
        <description>HiveServer2传输模式</description>
    </property>
</configuration>
EOF

7. 分发Hive到Slave节点

将配置好的Hive目录复制到所有Slave节点:

scp -r /opt/hive slave1:/opt/
scp -r /opt/hive slave2:/opt/

8. 在Slave节点配置环境变量

同步环境变量配置到所有节点:

scp -r /etc/profile slave1:/etc/profile
scp -r /etc/profile slave2:/etc/profile

注意: 需要在每个slave节点上执行 source /etc/profile 来生效环境变量。

9. 创建HDFS仓库目录

在HDFS上创建Hive的数据仓库目录(确保HDFS服务已启动):

hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -chmod 777 /user/hive/warehouse

10. 创建日志目录

创建本地日志存储目录:

mkdir -p $HIVE_HOME/logs

11. 初始化Metastore Schema

重要步骤: 初始化Hive的Metastore数据库结构:

$HIVE_HOME/bin/schematool -dbType mysql -initSchema

12. 启动Hive服务

启动Hive的核心服务:

启动Metastore服务

nohup $HIVE_HOME/bin/hive --service metastore > $HIVE_HOME/logs/metastore.log 2>&1 &

启动HiveServer2服务

nohup $HIVE_HOME/bin/hive --service hiveserver2 > $HIVE_HOME/logs/hiveserver2.log 2>&1 &

13. 等待服务启动

给服务足够的启动时间:

echo "等待服务启动..."
sleep 60

14. 验证服务状态

检查服务是否正常运行:

echo "检查服务状态..."
netstat -tlnp | grep -E "(9083|10000)"
jps | grep "RunJar"

端口说明:

  • 9083: Metastore服务端口
  • 10000: HiveServer2服务端口

15. 测试连接

测试Hive服务是否可以正常连接:

echo "测试Hive连接..."
beeline -u "jdbc:hive2://master:10000" -n root -e "show databases;"

交互式测试

可以使用以下命令进行完整的功能测试:

连接到Hive

beeline -u "jdbc:hive2://master:10000" -n root

测试命令序列

在beeline中执行以下测试命令:

-- 查看数据库
show databases;

-- 创建测试数据库
create database test_db;

-- 使用测试数据库
use test_db;

-- 创建测试表
create table test_table(id int, name string);

-- 查看表
show tables;

-- 插入测试数据
insert into test_table values (1, 'test');

-- 查询数据
select * from test_table;

-- 退出
!quit

注意事项

  1. 前置条件: 确保Hadoop集群已正常运行
  2. 网络配置: 确保各节点间网络通信正常
  3. 防火墙: 开放9083和10000端口
  4. 权限配置: 确保运行用户有足够的权限访问HDFS和数据库
  5. 日志监控: 定期检查 $HIVE_HOME/logs/ 下的日志文件

故障排除

  • 如果服务启动失败,检查日志文件中的错误信息
  • 确认MariaDB服务正常运行且权限配置正确
  • 验证HDFS服务状态和目录权限
  • 检查主机名解析是否正确配置
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment