HBase+Hadoop单机版Docker compose部署指南
本文介绍HBase+Hadoop单机版Docker部署指南,包含环境准备和详细部署步骤。系统要求Docker 20.10+、4GB内存和20GB磁盘空间。使用Hadoop 3.4.2、HBase 2.5.13和Java 8版本。部署步骤包括创建项目目录、编写docker-compose.yml文件,配置HDFS名称节点、数据节点、YARN资源管理器、节点管理器和HBase单机版服务,并设置网络连接
HBase+Hadoop单机版Docker部署指南
环境准备
系统要求
-
Docker 20.10 及以上版本
-
Docker Compose 2.0 及以上版本
-
至少 4GB 内存(推荐 8GB 以上)
-
至少 20GB 可用磁盘空间
版本选择
-
Hadoop: 3.4.2 (最新稳定版)
-
HBase: 2.5.13 (最新稳定版)
-
Java: 8 (兼容 HBase 和 Hadoop)
部署步骤
1. 创建项目目录
mkdir hbase-hadoop-docker
cd hbase-hadoop-docker
2. 创建 docker-compose.yml 文件
# Hadoop + HBase 分布式集群 Docker Compose 配置
# 兼容 Windows Docker Desktop / Linux 系统,一键启动 HDFS + YARN + HBase
version: '3.8'
services:
# ==================== HDFS 名称节点 (核心管理节点) ====================
namenode:
# 使用官方 Hadoop 3.4.2 镜像
image: apache/hadoop:3.4.2
# 容器名称
container_name: hadoop-namenode
# 容器主机名(集群内部通信使用)
hostname: namenode
# 使用 root 用户运行,解决跨平台权限问题
user: root
# 启动命令:首次启动自动格式化 NameNode,后续启动直接运行,无需重复格式化
command: ["/bin/sh", "-c", "if [ ! -d /tmp/hadoop-root/dfs/name/current ]; then hdfs namenode -format -nonInteractive; fi; hdfs namenode"]
# 端口映射
ports:
- "9870:9870" # HDFS Web UI 管理端口
- "9000:9000" # HDFS RPC 通信端口
# 环境变量:自动生成 Hadoop 配置文件
environment:
- CORE-SITE.XML_fs.defaultFS=hdfs://namenode:9000 # 默认文件系统地址
- HDFS-SITE.XML_dfs.replication=1 # 数据副本数量(单机集群设为1)
# 数据持久化挂载(本地目录:容器内目录)
volumes:
- ./hadoop_namenode:/tmp/hadoop-root/dfs/name # NameNode 元数据存储
- ./logs/hadoop/namenode:/opt/hadoop/logs # 日志文件挂载
# 加入自定义集群网络
networks:
- hadoop-net
# 健康检查:确保服务正常启动
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9870"]
interval: 10s # 检查间隔
retries: 5 # 重试次数
start_period: 40s # 启动后延迟检查时间
# 重启策略:异常退出自动重启
restart: unless-stopped
# ==================== HDFS 数据节点 (数据存储节点) ====================
datanode:
image: apache/hadoop:3.4.2
container_name: hadoop-datanode
user: root
# 启动命令:创建数据目录 + 授权权限(兼容Windows挂载)+ 启动 DataNode
command: ["/bin/sh", "-c", "mkdir -p /tmp/hadoop-root/dfs/data && chown -R root:root /tmp/hadoop-root && hdfs datanode"]
ports:
- "9864:9864" # DataNode Web UI 端口
environment:
- CORE-SITE.XML_fs.defaultFS=hdfs://namenode:9000 # 连接 NameNode
- HDFS-SITE.XML_dfs.datanode.data.dir=file:///tmp/hadoop-root/dfs/data # 数据存储目录
volumes:
- ./hadoop_datanode:/tmp/hadoop-root/dfs/data # DataNode 数据存储
- ./logs/hadoop/datanode:/opt/hadoop/logs # 日志文件挂载
networks:
- hadoop-net
# 依赖关系:等待 NameNode 健康启动后再启动
depends_on:
namenode:
condition: service_healthy
restart: unless-stopped
# 健康检查
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9864"]
interval: 10s
timeout: 5s
retries: 3
start_period: 30s
# ==================== YARN 资源管理器 (集群资源调度) ====================
resourcemanager:
image: apache/hadoop:3.4.2
container_name: hadoop-resourcemanager
hostname: resourcemanager
user: root
# 启动 YARN 资源管理器
command: ["yarn", "resourcemanager"]
ports:
- "8088:8088" # YARN Web UI 管理端口
environment:
- CORE-SITE.XML_fs.defaultFS=hdfs://namenode:9000 # 关联 HDFS
- YARN-SITE.XML_yarn.resourcemanager.hostname=resourcemanager # 资源管理器地址
volumes:
- ./logs/hadoop/resourcemanager:/opt/hadoop/logs # 日志挂载
networks:
- hadoop-net
# 等待 NameNode 启动完成
depends_on:
namenode: { condition: service_healthy }
restart: unless-stopped
# ==================== YARN 节点管理器 (执行计算任务) ====================
nodemanager:
image: apache/hadoop:3.4.2
container_name: hadoop-nodemanager
user: root
# 启动 YARN 节点管理器
command: ["yarn", "nodemanager"]
environment:
- CORE-SITE.XML_fs.defaultFS=hdfs://namenode:9000 # 关联 HDFS
- YARN-SITE.XML_yarn.resourcemanager.hostname=resourcemanager # 连接资源管理器
volumes:
- ./logs/hadoop/nodemanager:/opt/hadoop/logs # 日志挂载
networks:
- hadoop-net
# 等待资源管理器启动
depends_on:
resourcemanager: { condition: service_started }
restart: unless-stopped
# ==================== HBase 单机版 (分布式数据库) ====================
hbase:
image: harisekhon/hbase:2.1
container_name: hbase-standalone
hostname: hbase
ports:
- "2181:2181" # Zookeeper 通信端口(HBase 依赖)
- "16010:16010" # HBase Master Web UI 端口
# 环境变量:指定 HBase 数据存储在 HDFS 上
environment:
- HBASE_ROOTDIR=hdfs://namenode:9000/hbase
# 数据持久化
volumes:
- ./hbase_data:/hbase-data # HBase 数据存储
- ./zookeeper_data:/zookeeper-data # Zookeeper 数据存储
- ./logs/hbase:/hbase/logs
networks:
- hadoop-net
# 强依赖:等待 HDFS 主从节点全部健康启动
depends_on:
namenode: { condition: service_healthy }
datanode: { condition: service_healthy }
restart: unless-stopped
# ==================== 自定义集群网络 ====================
networks:
hadoop-net:
# 桥接模式:容器间互联互通,与外部隔离
driver: bridge
3. 启动服务
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
4. 等待服务启动
服务启动需要一些时间,特别是第一次启动时需要下载镜像和初始化数据。可以通过以下命令查看日志:
# 查看Hadoop NameNode日志
docker-compose logs -f namenode
# 查看HBase日志
docker-compose logs -f hbase
验证部署
1. 访问 Web 界面
-
HDFS Web UI: http://localhost:9870
-
YARN Web UI: http://localhost:8088
-
HBase Master Web UI: http://localhost:16010
2. 验证 Hadoop
# 进入NameNode容器
docker exec -it hadoop-namenode bash
# 查看HDFS状态
hdfs dfsadmin -report
# 创建测试目录
hdfs dfs -mkdir /test
# 列出目录
hdfs dfs -ls /
3. 验证 HBase
# 进入HBase容器
docker exec -it hbase-standalone bash
# 启动HBase Shell
hbase shell
# 查看HBase状态
status
# 查看HBase版本
version
# 创建测试表
create 'test_table', 'cf1'
# 插入数据
put 'test_table', 'row1', 'cf1:col1', 'value1'
# 查询数据
get 'test_table', 'row1'
# 扫描表
scan 'test_table'
# 退出HBase Shell
exit
常用操作
停止服务
# 停止所有服务
docker-compose down
# 停止并删除数据卷(谨慎使用)
docker-compose down -v
重启服务
# 重启所有服务
docker-compose restart
# 重启特定服务
docker-compose restart hbase
查看日志
# 查看所有服务日志
docker-compose logs
# 查看特定服务日志
docker-compose logs hbase
# 实时查看日志
docker-compose logs -f namenode
故障排除
常见问题
-
HBase 无法连接到 HDFS
-
检查 Hadoop 服务是否正常运行
-
确保 hbase_rootdir 配置正确
-
检查网络连通性
-
-
HBase 启动失败
-
检查 Zookeeper 端口是否被占用
-
确保内存足够
-
查看 HBase 日志获取详细错误信息
-
-
Web 界面无法访问
-
检查端口映射是否正确
-
确保防火墙允许相应端口
-
检查服务是否正常启动
-
性能优化
-
内存配置
-
根据实际情况调整 JVM 内存参数
-
确保给 Docker 分配足够的内存
-
-
存储优化
-
使用 SSD 存储以提高性能
-
定期清理不需要的数据
-
-
网络优化
-
使用主机网络模式提高性能
-
确保网络带宽足够
-
安全考虑
生产环境注意事项
-
不要使用 root 用户运行
-
在生产环境中创建专门的用户
-
配置适当的权限
-
-
启用身份验证
-
配置 Kerberos 身份验证
-
启用 SSL/TLS 加密
-
-
备份策略
-
定期备份 HBase 数据
-
配置 HDFS 快照
-
升级指南
升级 HBase
-
停止 HBase 服务
-
备份数据
-
更新 docker-compose.yml 中的 HBase 版本
-
启动新的 HBase 服务
-
验证数据完整性
升级 Hadoop
-
停止所有服务
-
备份 HDFS 数据
-
更新 docker-compose.yml 中的 Hadoop 版本
-
启动新的 Hadoop 服务
-
格式化 NameNode(如果需要)
-
恢复数据
总结
通过 Docker Compose 可以快速部署 HBase+Hadoop 单机版环境,非常适合开发和测试使用。本指南使用了最新的稳定版本,并配置了 HBase 使用内置的 Zookeeper,简化了部署过程。
建议在生产环境中使用分布式部署,并配置适当的监控和备份策略。
更多推荐
所有评论(0)