本指南详细介绍了如何在分布式环境中部署Apache Hive 4.0.1,使用MariaDB作为Metastore后端数据库。
- Master节点: 运行Hive Metastore和HiveServer2服务
- Slave节点: slave1, slave2 (工作节点)
- 数据库: MariaDB (存储Hive元数据)
- 存储: HDFS (存储实际数据)
首先下载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将Hive路径添加到系统环境变量中:
cat >> /etc/profile << EOF
export HIVE_HOME=/opt/hive
export PATH=\$PATH:\$HIVE_HOME/bin
EOF
source /etc/profile安装MariaDB数据库服务器作为Hive的Metastore后端:
yum install mariadb mariadb-server -y
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation为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下载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创建详细的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&useSSL=false&useUnicode=true&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将配置好的Hive目录复制到所有Slave节点:
scp -r /opt/hive slave1:/opt/
scp -r /opt/hive slave2:/opt/同步环境变量配置到所有节点:
scp -r /etc/profile slave1:/etc/profile
scp -r /etc/profile slave2:/etc/profile注意: 需要在每个slave节点上执行 source /etc/profile 来生效环境变量。
在HDFS上创建Hive的数据仓库目录(确保HDFS服务已启动):
hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -chmod 777 /user/hive/warehouse创建本地日志存储目录:
mkdir -p $HIVE_HOME/logs重要步骤: 初始化Hive的Metastore数据库结构:
$HIVE_HOME/bin/schematool -dbType mysql -initSchema启动Hive的核心服务:
nohup $HIVE_HOME/bin/hive --service metastore > $HIVE_HOME/logs/metastore.log 2>&1 &nohup $HIVE_HOME/bin/hive --service hiveserver2 > $HIVE_HOME/logs/hiveserver2.log 2>&1 &给服务足够的启动时间:
echo "等待服务启动..."
sleep 60检查服务是否正常运行:
echo "检查服务状态..."
netstat -tlnp | grep -E "(9083|10000)"
jps | grep "RunJar"端口说明:
- 9083: Metastore服务端口
- 10000: HiveServer2服务端口
测试Hive服务是否可以正常连接:
echo "测试Hive连接..."
beeline -u "jdbc:hive2://master:10000" -n root -e "show databases;"可以使用以下命令进行完整的功能测试:
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- 前置条件: 确保Hadoop集群已正常运行
- 网络配置: 确保各节点间网络通信正常
- 防火墙: 开放9083和10000端口
- 权限配置: 确保运行用户有足够的权限访问HDFS和数据库
- 日志监控: 定期检查
$HIVE_HOME/logs/下的日志文件
- 如果服务启动失败,检查日志文件中的错误信息
- 确认MariaDB服务正常运行且权限配置正确
- 验证HDFS服务状态和目录权限
- 检查主机名解析是否正确配置