别再折腾Windows了!在CentOS 7上用Docker 5分钟搞定Apache Hive 3.1.2(含MySQL 8.0配置)
·
5分钟容器化部署Apache Hive 3.1.2:Docker Compose全栈解决方案
还在为Hive的复杂安装过程头疼?传统部署需要手动配置JDK、Hadoop、MySQL驱动,光是解决版本兼容问题就能耗掉半天时间。本文将带你用Docker Compose一键部署完整的Hive 3.1.2环境,包含伪分布式Hadoop和MySQL 8.0元数据库,所有组件都已预配置好网络连接和权限设置。
1. 环境准备与Docker配置
在CentOS 7上执行以下命令安装Docker和Docker Compose:
# 安装Docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker && sudo systemctl enable docker
# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
验证安装是否成功:
docker --version && docker-compose --version
提示:如果遇到权限问题,可以将当前用户加入docker组:
sudo usermod -aG docker $USER,然后退出重新登录
2. 编写Docker Compose文件
创建 docker-compose.yml 文件,内容如下:
version: '3'
services:
namenode:
image: bde2020/hadoop-namenode:2.0.0-hadoop3.2.1-java8
container_name: namenode
ports:
- "9870:9870"
- "9000:9000"
volumes:
- hadoop_namenode:/hadoop/dfs/name
environment:
- CLUSTER_NAME=test
env_file:
- ./hadoop.env
datanode:
image: bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8
container_name: datanode
depends_on:
- namenode
volumes:
- hadoop_datanode:/hadoop/dfs/data
env_file:
- ./hadoop.env
hive-server:
image: apache/hive:3.1.2
container_name: hive-server
depends_on:
- namenode
- mysql
ports:
- "10000:10000"
- "10002:10002"
env_file:
- ./hive.env
environment:
- SERVICE_NAME=hiveserver2
volumes:
- ./hive-site.xml:/opt/hive/conf/hive-site.xml
- ./hive-log4j2.properties:/opt/hive/conf/hive-log4j2.properties
mysql:
image: mysql:8.0
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: hive
MYSQL_USER: hive
MYSQL_PASSWORD: hive
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./mysql-init.sql:/docker-entrypoint-initdb.d/mysql-init.sql
volumes:
hadoop_namenode:
hadoop_datanode:
mysql_data:
创建 hadoop.env 环境变量文件:
CORE_CONF_fs_defaultFS=hdfs://namenode:9000
CORE_CONF_hadoop_proxyuser_hue_hosts=*
CORE_CONF_hadoop_proxyuser_hue_groups=*
创建 hive.env 环境变量文件:
HIVE_CUSTOM_CONF_DIR=/opt/hive/conf
SERVICE_NAME=hiveserver2
3. 关键配置文件详解
3.1 hive-site.xml配置
创建 hive-site.xml 文件,这是Hive最关键的配置文件:
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://mysql:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hive-server:9083</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hive-server</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
</configuration>
3.2 MySQL初始化脚本
创建 mysql-init.sql 文件,用于初始化MySQL数据库:
CREATE DATABASE IF NOT EXISTS hive;
CREATE USER 'hive'@'%' IDENTIFIED BY 'hive';
GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'%';
FLUSH PRIVILEGES;
4. 启动与验证服务
4.1 启动所有服务
执行以下命令启动整个栈:
docker-compose up -d
服务启动后,可以通过以下命令查看各容器状态:
docker-compose ps
正常情况应该看到类似输出:
Name Command State Ports
--------------------------------------------------------------------------------------------------
datanode /entrypoint.sh /run.sh Up 8042/tcp, 8088/tcp, 9864/tcp, 9866/tcp
hive-server /opt/hive/bin/start.sh Up 10000/tcp, 10002/tcp, 9083/tcp
mysql docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
namenode /entrypoint.sh /run.sh Up 0.0.0.0:9000->9000/tcp, 9870/tcp
4.2 验证Hive服务
进入Hive容器执行查询:
docker exec -it hive-server /opt/hive/bin/beeline -u jdbc:hive2://localhost:10000
在Beeline命令行中执行测试SQL:
CREATE TABLE test (id INT, name STRING);
INSERT INTO test VALUES (1, 'hello'), (2, 'world');
SELECT * FROM test;
4.3 访问Web界面
- Hadoop NameNode UI: http://服务器IP:9870
- Hive Server2 UI: http://服务器IP:10002
5. 常见问题排查
如果遇到服务启动失败,可以查看各容器的日志:
# 查看Hive日志
docker logs hive-server
# 查看MySQL日志
docker logs mysql
# 查看Hadoop NameNode日志
docker logs namenode
常见问题及解决方案:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| Hive无法连接MySQL | MySQL服务未启动或网络配置错误 | 检查mysql容器是否运行正常,确认hive-site.xml中的连接URL使用容器名mysql |
| Beeline连接超时 | HiveServer2未正常启动 | 检查hive-server容器日志,确认10000端口监听正常 |
| 元数据初始化失败 | MySQL权限不足 | 确认mysql-init.sql已正确执行,hive用户有足够权限 |
注意:首次启动时Hive会初始化元数据库,可能需要2-3分钟时间,请耐心等待
这套方案最大的优势在于所有组件都已容器化,不需要在宿主机安装任何依赖。当不再需要Hive环境时,只需执行 docker-compose down -v 即可彻底清理,不会在系统中留下任何痕迹。对于需要频繁创建和销毁测试环境的开发者来说,这无疑是最优雅的解决方案。
更多推荐




所有评论(0)