当前位置: 首页 > news >正文

Docker 部署分布式 Hadoop(超详细实战版)

Docker 部署分布式 Hadoop(超详细实战版)

  • 一:背景
  • 二:部署
    • 1)创建基础镜像
    • 2)创建 Hadoop
    • 3)启动 Hadoop
    • 4)保存镜像
  • 总结
  • 适合人群:大数据初学者、运维工程师、想在本地快速搭建 Hadoop 集群的同学
  • 技术环境:CentOS 7 + Docker + Hadoop 2.7.2
  • 架构模式:1 Master + 2 Slave 分布式集群

一:背景

在传统方式下部署 Hadoop:

  • 需要准备多台虚拟机

  • 手动配置网络、主机名、SSH 免密

  • 重复安装 JDK、Hadoop

  • 环境不可复用

而使用 Docker 的优势:

✅ 环境隔离
✅ 一台机器模拟多节点
✅ 可快速销毁重建
✅ 镜像可复用
✅ 非常适合学习与实验

在真实生产中,例如在基于 Apache Hadoop 的数据平台环境中,也常结合容器化与编排技术使用。


二:部署

1)创建基础镜像

  1. 查看系统版本

    [root@hadoop108 ~]# uname -r3.10.0-862.el7.x86_64
  2. 安装 Docker

    [root@hadoop108 ~]# yum install -y docker
  3. 启动 Docker

    [root@hadoop108 ~]# systemctl start docker
  4. 设置 Docker 开机自启

    [root@hadoop108 ~]# systemctl enable docker
  5. 查看 Docker 状态

    [root@hadoop108 ~]# systemctl status docker
  6. 配置 Docker 镜像加速器

    [root@hadoop108 ~]# vim /etc/docker/daemon.json
    { "registry-mirrors": ["https://3iy7bctt.mirror.aliyuncs.com"] }
    [root@hadoop108 ~]# systemctl daemon-reload[root@hadoop108 ~]# systemctl restart docker[root@hadoop108 ~]# docker info
  7. 搜索并拉取 CentOS 镜像

    [root@hadoop108 ~]# docker search centos[root@hadoop108 ~]# docker pull centos:7
  8. 查看镜像列表

    [root@hadoop108 ~]# docker images
  9. 运行 CentOS 容器(带特权模式,用于启动 systemd 服务)

    [root@hadoop108 ~]# docker run --privileged=true --name centos7 -h hadoop -itd centos:7 /usr/sbin/init
  10. 查看运行中的容器

    [root@hadoop108 ~]# docker ps
  11. 进入容器

    [root@hadoop108 ~]# docker exec -it centos7 /bin/bash
  12. 在容器内安装必要工具

    [root@hadoop ~]# yum install -y vim net-tools openssh-server openssh-clients rsync
  13. 配置 SSH 服务并启动

    [root@hadoop ~]# vim /etc/ssh/sshd_configPort22PermitRootLoginyes
    [root@hadoop ~]# systemctl start sshd.service[root@hadoop ~]# systemctl enable sshd.service[root@hadoop ~]# systemctl status sshd.service
  14. 创建软件目录

    [root@hadoop ~]# mkdir -p /opt/module /opt/software
  15. 退出容器并提交为新的镜像

    [root@hadoop ~]# exit[root@hadoop108 ~]# docker commit 容器ID centos:hadoop[root@hadoop108 ~]# docker images

2)创建 Hadoop

  1. 基于新镜像启动 Master 和 Slave 容器

    [root@hadoop108 ~]# docker run --privileged=true --name master -h master -p 50070:50070 -itd centos:hadoop /usr/sbin/init[root@hadoop108 ~]# docker run --privileged=true --name slave01 -h slave01 -p 8088:8088 -itd centos:hadoop /usr/sbin/init[root@hadoop108 ~]# docker run --privileged=true --name slave02 -h slave02 -itd centos:hadoop /usr/sbin/init
  2. 进入容器配置 hosts 文件(在每个容器中执行)

    [root@master ~]# vim /etc/hosts172.17.0.3 master172.17.0.4 slave01172.17.0.5 slave02
  3. 设置 root 密码

    [root@master ~]# passwd root[root@slave01 ~]# passwd root[root@slave02 ~]# passwd root
  4. 配置 SSH 免密登录

    [root@master ~]# ssh-keygen -t rsa[root@master ~]# ssh-copy-id master[root@master ~]# ssh-copy-id slave01[root@master ~]# ssh-copy-id slavse02
  5. 从宿主机拷贝 Hadoop 和 JDK 安装包到容器

    [root@hadoop108 ~]# docker cp jdk-8u144-linux-x64.tar.gz master:/opt/software[root@hadoop108 ~]# docker cp hadoop-2.7.2.tar.gz master:/opt/software
  6. 安装 JDK

    [root@master ~]# tar -xzvf /opt/software/jdk-8u144-linux-x64.tar.gz -C /opt/module/
    [root@master ~]# vim /etc/profile# JAVA_HOMEexportJAVA_HOME=/opt/module/jdk1.8.0_144exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexportPATH=$PATH:$JAVA_HOME/bin
    [root@master ~]# source /etc/profile[root@master ~]# java -version
  7. 安装 Hadoop

    [root@master ~]# tar -xzvf /opt/software/hadoop-2.7.2.tar.gz -C /opt/module/
    [root@master ~]# vim /etc/profile# HADOOP_HOMEexportHADOOP_HOME=/opt/module/hadoop-2.7.2exportPATH=$PATH:$HADOOP_HOME/binexportPATH=$PATH:$HADOOP_HOME/sbin
    [root@master ~]# source /etc/profile[root@master ~]# hadoop version
  8. 配置 Hadoop 配置文件

    [root@master ~]# cd /opt/module/hadoop-2.7.2/etc/hadoop
    • 配置core-site.xml

      <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property> </configuration>
    • 配置hadoop-env.sh

      export JAVA_HOME=/opt/module/jdk1.8.0_144
    • 配置hdfs-site.xml

      <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>slave02:50090</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property>
    • 配置slaves文件

      master slave01 slave02
    • 配置yarn-env.sh

      export JAVA_HOME=/opt/module/jdk1.8.0_144
    • 配置yarn-site.xml

      <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>slave01</value> </property>
    • 配置mapred-site.xml

      [root@master hadoop]# mv mapred-site.xml.template mapred-site.xml
      <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
    • 配置mapred-env.sh

      export JAVA_HOME=/opt/module/jdk1.8.0_144
  9. 分发配置文件到 slave 节点

    [root@master ~]# scp -r /opt/module/jdk1.8.0_144/ root@slave01:/opt/module/[root@master ~]# scp -r /opt/module/jdk1.8.0_144/ root@slave02:/opt/module/[root@master ~]# scp -r /opt/module/hadoop-2.7.2/ root@slave01:/opt/module/[root@master ~]# scp -r /opt/module/hadoop-2.7.2/ root@slave02:/opt/modusle/
  10. 在 slave 节点配置环境变量(在 slave01 和 slave02 中执行)

    [root@slave01 ~]# vim /etc/profile# JAVA_HOMEexportJAVA_HOME=/opt/module/jdk1.8.0_144exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexportPATH=$PATH:$JAVA_HOME/bin# HADOOP_HOMEexportHADOOP_HOME=/opt/module/hadoop-2.7.2exportPATH=$PATH:$HADOOP_HOME/binexportPATH=$PATH:$HADOOP_HOME/sbin
    [root@slave01 ~]# source /etc/profile

3)启动 Hadoop

  1. 格式化 HDFS 并启动 Hadoop

    • 在 master 节点执行:

      [root@master ~]# hdfs namenode -format[root@master ~]# start-dfs.sh
    • 在 slave01 节点执行:

      [root@slave01 ~]# start-yarn.sh
  2. 浏览器访问

    • HDFS:http://宿主机IP:50070
    • YARN:http://宿主机IP:8088

4)保存镜像

  1. 停止 Hadoop 集群

    [root@slave01 ~]# stop-yarn.sh[root@master ~]# stop-dfs.sh
  2. 将容器提交为镜像

    [root@hadoop108 ~]# docker commit master centos:master[root@hadoop108 ~]# docker commit slave01 centos:slave01[root@hadoop108 ~]# docker commit slave02 centos:slave02

总结

本文完整演示了:

  • 制作 Hadoop 基础镜像

  • 构建三节点集群

  • 配置 SSH 免密

  • 配置 HDFS + YARN

  • 启动并验证 Web UI

  • 保存为可复用镜像

核心思想:

用 Docker 模拟分布式环境
用容器复刻真实大数据架构

对于正在做大数据方向学习或毕业设计的同学,这种方式可以极大降低实验成本。

http://www.jsqmd.com/news/382493/

相关文章:

  • 流浪动物救助网站信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 完整教程:免费使用AI绘画模型Nano Banana Pro,太有意思了!
  • 深入解析:WPF控件模板
  • 基于Python的招聘就业系统[python]-计算机毕业设计源码+LW文档
  • 华润万家购物卡回收(方法、流程、折扣) - 京顺回收
  • 企业级交通管理在线服务系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • 基于Python的织物布匹缺陷检测系统[python]-计算机毕业设计源码+LW文档
  • SpringBoot+Vue 中山社区医疗综合服务平台平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • Java Web +游戏交易系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • QQ屏蔽他人聊天气泡装扮
  • 校园组团平台信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 基于SpringBoot+Vue的Spring Boot库存管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • Java SpringBoot+Vue3+MyBatis 火锅店管理系统系统源码|前后端分离+MySQL数据库
  • 【毕业设计】SpringBoot+Vue+MySQL 高校专业实习管理系统平台源码+数据库+论文+部署文档
  • SpringBoot+Vue Spring Boot库存管理系统管理平台源码【适合毕设/课设/学习】Java+MySQL
  • SpringBoot+Vue 流浪动物救助网站管理平台源码【适合毕设/课设/学习】Java+MySQL
  • [ai]claude官方skills(现代前端,git 工作树,ios,浏览器自动化,软件架构,迭代学习,定制简历生成器)完整教程:从入门到实战部署
  • Java Web 交通管理在线服务系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • 备考执业医师公共卫生,阿虎医考的卷子押得准 - 医考机构品牌测评专家
  • 执业医师考前冲刺卷性价比分析:阿虎医考科学助力 - 医考机构品牌测评专家
  • 临床执业医师老师推荐,这份指南请收好 - 医考机构品牌测评专家
  • 供应链网络设计与运输优化:模型构建、算法原理与企业应用
  • 用不着下18层地狱-----现在就送你进入回调地狱
  • 完整教程:ComfyUI省钱攻略:按需付费玩AI绘画,比买显卡省90%
  • 不是我们学不会英语,是英语本身太 “低级” 了
  • 面向对象编程__学习随笔
  • 老金开源Agent Teams编排Skill:一句话自动组队,手动挡时代结束了
  • 银川正规搬家公司怎么选?宁夏尖兵搬家一站式安心搬迁指南 - 宁夏壹山网络
  • 用大白话讲解人工智能(4) Softmax回归:AI如何给选项“打分排序“
  • 用大白话讲解人工智能(3) 线性回归:用“画直线“预测未来的魔法