news 2026/5/5 16:26:41

别再折腾虚拟机了!用Docker Compose 5分钟搞定Hadoop 3.1.3伪分布式集群

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再折腾虚拟机了!用Docker Compose 5分钟搞定Hadoop 3.1.3伪分布式集群

别再折腾虚拟机了!用Docker Compose 5分钟搞定Hadoop 3.1.3伪分布式集群

记得第一次接触Hadoop时,花了两天时间在虚拟机上反复折腾网络配置、SSH免密登录和环境变量。直到某天发现同事用Docker Compose三下五除二就搭好了集群,才意识到自己走了多少弯路。今天我们就用容器化方案,彻底告别繁琐的虚拟机配置。

1. 为什么选择Docker部署Hadoop?

传统虚拟机部署需要:

  • 手动配置3台以上虚拟机
  • 每台机器单独安装JDK、Hadoop
  • 反复调试网络和SSH连接
  • 消耗大量系统资源

而Docker方案优势明显:

  • 资源占用少:单机即可模拟集群
  • 环境隔离:不影响宿主机配置
  • 快速重置:秒级重建整个集群
  • 配置即代码:docker-compose.yml可版本控制

实测对比:传统方案需要2小时完成的部署,Docker方案只需5分钟

2. 环境准备与Docker配置

2.1 基础环境要求

  • 任何支持Docker的Linux/macOS/Windows系统
  • Docker Engine ≥ 20.10.14
  • Docker Compose ≥ 2.5.1
  • 建议分配4GB以上内存
# 验证Docker环境 docker --version docker-compose --version

2.2 准备自定义镜像

新建Dockerfile构建包含Hadoop的基础镜像:

FROM ubuntu:20.04 # 安装基础工具 RUN apt-get update && \ apt-get install -y openssh-server openjdk-8-jdk vim # 配置SSH RUN mkdir /var/run/sshd RUN echo 'root:root' | chpasswd RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config # 下载Hadoop ENV HADOOP_VERSION 3.1.3 RUN wget https://archive.apache.org/dist/hadoop/common/hadoop-$HADOOP_VERSION/hadoop-$HADOOP_VERSION.tar.gz && \ tar -xzf hadoop-$HADOOP_VERSION.tar.gz -C /opt/ && \ mv /opt/hadoop-$HADOOP_VERSION /opt/hadoop && \ rm hadoop-$HADOOP_VERSION.tar.gz # 设置环境变量 ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 ENV HADOOP_HOME=/opt/hadoop ENV PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin EXPOSE 22 9870 8088 CMD ["/usr/sbin/sshd", "-D"]

构建镜像:

docker build -t hadoop-base .

3. 编写docker-compose.yml

创建完整的集群编排文件:

version: '3' services: namenode: image: hadoop-base hostname: namenode ports: - "9870:9870" # HDFS Web UI - "9000:9000" # HDFS服务端口 volumes: - ./data/namenode:/opt/hadoop/data/dfs/name environment: - CLUSTER_NAME=hadoop-cluster command: > bash -c " $HADOOP_HOME/bin/hdfs namenode -format $$CLUSTER_NAME && $HADOOP_HOME/sbin/hadoop-daemon.sh start namenode && tail -f /dev/null" datanode1: image: hadoop-base hostname: datanode1 depends_on: - namenode volumes: - ./data/datanode1:/opt/hadoop/data/dfs/data command: > bash -c " echo 'namenode' >> $HADOOP_HOME/etc/hadoop/workers && $HADOOP_HOME/sbin/hadoop-daemon.sh start datanode && tail -f /dev/null" resourcemanager: image: hadoop-base hostname: resourcemanager ports: - "8088:8088" # YARN Web UI depends_on: - namenode command: > bash -c " $HADOOP_HOME/sbin/yarn-daemon.sh start resourcemanager && tail -f /dev/null" nodemanager1: image: hadoop-base hostname: nodemanager1 depends_on: - resourcemanager command: > bash -c " $HADOOP_HOME/sbin/yarn-daemon.sh start nodemanager && tail -f /dev/null" networks: default: driver: bridge ipam: config: - subnet: 172.20.0.0/16

关键配置说明:

组件功能暴露端口
namenodeHDFS主节点9870
datanode1HDFS数据节点-
resourcemanagerYARN资源调度器8088
nodemanager1YARN计算节点-

4. 启动与验证集群

4.1 一键启动服务

docker-compose up -d

4.2 检查容器状态

docker-compose ps

正常应显示4个容器的状态为"Up"

4.3 访问Web界面

  • HDFS管理界面:http://localhost:9870
  • YARN管理界面:http://localhost:8088

4.4 执行测试任务

进入容器提交MapReduce作业:

docker exec -it namenode bash # 创建测试目录 hdfs dfs -mkdir /input hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /input # 运行wordcount示例 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output # 查看结果 hdfs dfs -cat /output/*

5. 高级配置技巧

5.1 数据持久化方案

通过volumes实现数据持久化:

volumes: - ./data/namenode:/opt/hadoop/data/dfs/name - ./data/datanode1:/opt/hadoop/data/dfs/data

目录结构建议:

. ├── docker-compose.yml ├── Dockerfile └── data ├── namenode # NameNode元数据 └── datanode1 # DataNode块数据

5.2 资源限制配置

为容器分配固定资源:

services: namenode: deploy: resources: limits: cpus: '1' memory: 2G

5.3 多节点扩展

要增加DataNode,只需在compose文件中添加:

datanode2: image: hadoop-base hostname: datanode2 depends_on: - namenode volumes: - ./data/datanode2:/opt/hadoop/data/dfs/data command: > bash -c " echo 'namenode' >> $HADOOP_HOME/etc/hadoop/workers && $HADOOP_HOME/sbin/hadoop-daemon.sh start datanode && tail -f /dev/null"

6. 常见问题排查

Q1:Web界面无法访问

  • 检查端口是否冲突
  • 查看容器日志:docker-compose logs namenode

Q2:DataNode未注册

  • 检查workers文件配置
  • 验证网络连通性:docker exec datanode1 ping namenode

Q3:资源不足错误

# 调整YARN配置 vim $HADOOP_HOME/etc/hadoop/yarn-site.xml # 增加以下参数 <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>2048</value> </property>

最近在帮团队搭建测试环境时,这个方案成功让新人快速上手Hadoop。有个小技巧:把docker-compose.yml推送到Git仓库,团队成员只需git clonedocker-compose up就能获得完全一致的开发环境。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 16:21:47

Anno 1800 Mod Loader终极指南:5步掌握专业游戏模组管理

Anno 1800 Mod Loader终极指南&#xff1a;5步掌握专业游戏模组管理 【免费下载链接】anno1800-mod-loader The one and only mod loader for Anno 1800, supports loading of unpacked RDA files, XML merging and Python mods. 项目地址: https://gitcode.com/gh_mirrors/a…

作者头像 李华
网站建设 2026/5/5 16:20:02

保姆级教程:用STM32CubeMX HAL库驱动SG90舵机(附完整代码和接线图)

STM32CubeMX实战&#xff1a;HAL库驱动SG90舵机全流程解析 第一次接触STM32的PWM控制时&#xff0c;我被SG90舵机那精准的角度转动迷住了——原来只需要几行代码&#xff0c;就能让这个小巧的装置按照指令灵活摆动。本文将带你从零开始&#xff0c;用STM32CubeMX和HAL库搭建完整…

作者头像 李华