欢迎光临
我们一直在努力

【教程】Centos7的Docker环境下Hadoop三种模式的配置

注意事项

  • 按顺序做,不要跳步:教程顺序是 CentOS → SSH/主机名/静态IP → Docker → 单机 → 伪分布式 → 集群 → 基本操作
  • 命令要在对的那台机器上执行:看清是“宿主机”还是“容器”里执行,容器要先 docker exec -it 容器名 bash 进去再敲命令。
  • 步执行完确认结果:java -version、hadoop version、ssh localhost、jps 都有正常输出才继续,报错就停下来解决。
  • 换源一定要换:CentOS 7 默认源已失效,教程里让换源就照着换,否则后面 yum install 全装不上。
  • 报错先看报错内容:command not found 多半是环境变量没生效,Connection refused 多半是 sshd 没启动,别乱试。
  • 有些命令只做一次:hdfs namenode -format 只能格式化一次,重复格式化会导致集群起不来;ssh-keygen 只在 master1 上做。
  • 容器重启后要重启服务:sshd 和 Hadoop 进程不会自动启动,连不上先检查这两样,docker重启时也要启动
  • 路径别用中文和空格
  • 前置配置:CentOS 安装、SSH、主机名、静态 IP

    1. 安装 CentOS

    安装过程中需要注意:

    • 配置用户时,一定要勾选 “Make this user administrator”,否则装完之后 sudo 不可用,很多操作会受限。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    在这里插入图片描述
    在这里插入图片描述


    2. 进入系统后配置 root 密码

    先切到 root:

    sudo -i

    然后设置 root 密码:

    passwd root

    在这里插入图片描述


    3. 配置 SSH 允许 root 登录

    编辑 sshd 配置文件:

    # 先进入root,输入之后要先输入密码(没有回显的,直接输入就行)
    su root
    vim /etc/ssh/sshd_config

    找到这一行:

    #PermitRootLogin yes

    按 i 进入编辑模式,把前面的 # 删掉,改成:

    PermitRootLogin yes

    按 Esc,输入 :wq 回车保存。

    在这里插入图片描述

    重启 sshd 服务:

    systemctl restart sshd


    4. 配置主机名

    老师要求格式为:学号后三位 + 姓名英文大写缩写,例如 224ZKB。

    hostnamectl set-hostname 111XXX

    在这里插入图片描述


    5. 配置静态 IP

    5.1 在 VMware 中确认子网信息

    打开 VMware → 编辑 → 虚拟网络编辑器。

    在这里插入图片描述

    选择 VMnet8,点击 DHCP 设置,查看并记下子网 IP、网关。

    在这里插入图片描述
    在这里插入图片描述

    这里要看DHCP设置里面的子网IP,这里我的子网IP是192.168.196.0,所以我的网关就是192.168.196.2,

    5.2 备份网卡配置

    cd /etc/sysconfig/network-scripts/
    cp ifcfg-ens33 ifcfg-ens33.bak

    5.3 编辑网卡配置文件

    vi ifcfg-ens33

    写入以下内容(UUID 保留原来的不要改):

    TYPE=Ethernet
    BOOTPROTO=static
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens33
    UUID=b469f6be-3aa2-4ab7-8fbd-48be8b007e5d
    DEVICE=ens33
    ONBOOT=yes

    IPADDR=192.168.196.101
    PREFIX=24
    GATEWAY=192.168.196.2
    DNS1=8.8.8.8
    DNS2=114.114.114.114

    几点说明,照着改不要抄错:

    • UUID:这一行必须保留你自己机器上原来的值,不要照抄这里的 b469f6be-…,原样写回。
    • IPADDR:填你自己规划好的静态 IP。示例中用的是 192.168.196.101,你要改成自己网段里未被占用的地址。
    • GATEWAY:填你 VMware 虚拟网络编辑器里 VMnet8 的网关地址。示例中是 192.168.196.2,你的可能是别的,以你实际看到的为准。
    • PREFIX=24:表示子网掩码是 255.255.255.0,一般不用改。
    • DNS1、DNS2:用 8.8.8.8 和 114.114.114.114 就行,也可以换成学校或本地的 DNS。

    保存退出:按 Esc,输入 :wq 回车。

    5.4 重启网络服务

    systemctl restart network


    6. 用 Xshell 连接

    打开 Xshell,新建会话:

    • 主机:填上面 IPADDR 的地址,例如 192.168.196.101
    • 端口:22
    • 用户名:root

    在这里插入图片描述

    连接成功后即可用 root 身份进行后续操作。


    Docker的安装配置以及使用

    说明:执行任务前先看好在那个机器,那个用户下执行,任务执行如果失败一定要修复不能继续下去

    1. 在 CentOS 中安装 Docker

    (1) 设置Docker存储库和相关配置

    ① 执行yum命令安装相关软件包,分别是yum‑utils、gcc、gcc‑c++,操作命令如下。

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

    cat > /etc/yum.repos.d/CentOS-Base.repo << 'EOF'
    [base]
    name=CentOS-$releasever – Base – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/os/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [updates]
    name=CentOS-$releasever – Updates – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/updates/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [extras]
    name=CentOS-$releasever – Extras – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/extras/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [centosplus]
    name=CentOS-$releasever – Plus – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    EOF

    yum clean all
    yum makecache

    下载

    yum install -y yum-utils
    yum install -y gcc
    yum install -y gcc-c++

    ② 执行yum‑config‑manager –add‑repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo命令,将Docker的镜像仓库设置成国内的镜像仓库,便于后续从仓库中拉取镜像,操作命令及结果如下。

    yum-config-manager –add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    ③ 执行yum makecache fast命令更新yum索引,操作命令及结果如下。

    yum makecache fast

    ④ 执行yum install docker‑ce docker‑ce‑cli containerd.io docker‑compose‑plugin命令安装docker‑ce,等待片刻,Docker即可安装成功,操作命令及结果如下。

    yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

    ⑤ 安装成功后,因为Docker的运行需要用到各种端口,为避免防火墙对操作过程产生影响,启动Docker前,先执行systemctl stop firewalld关闭防火墙;再执行systemctl status firewalld查看防火墙状态,显示inactive (dead)代表防火墙已关闭。

    systemctl stop firewalld
    systemctl status firewalld

    ⑥ 执行systemctl disable firewalld命令,禁止防火墙开机自启动。

    systemctl disable firewalld

    ⑦ 执行systemctl start docker启动Docker;执行systemctl status docker查看运行状态,出现active (running)代表Docker正常启动。

    systemctl start docker
    systemctl status docker

    (2) 测试Docker

    docker换源

    cat > /etc/docker/daemon.json <<-'EOF'
    {
    "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me",
    "https://docker.m.daocloud.io",
    "https://docker.1panel.live",
    "https://dockerproxy.com",
    "https://reg-mirror.qiniu.com"
    ]
    }
    EOF

    systemctl daemon-reload
    systemctl restart docker

    ① 执行docker version查看Docker版本。

    docker version

    ② 执行docker run hello‑world运行样例测试,输出Hello from Docker!,代表Docker安装成功。

    docker run hello-world

    2. Docker常用命令

    (1) Docker基础命令

    #启动Docker
    systemctl start docker
    #停止Docker
    systemctl stop docker
    #重启Docker
    systemctl restart docker
    #查看Docker运行状态
    systemctl status docker
    #设置Docker开机自启
    systemctl enable docker
    #查看Docker概要信息
    docker info
    #查看帮助文档
    docker –help

    (2) 镜像相关操作命令

    ① 列出本地镜像

    # docker images [options]
    # -a:列出全部本地镜像;-q:只输出镜像ID
    docker images
    docker images -a
    docker images -q
    docker images -qa

    REPOSITORY:镜像仓库;TAG:镜像版本标签;IMAGE ID:镜像ID;CREATED:镜像创建时间;SIZE:镜像大小。 使用REPOSITORY:TAG指定镜像版本,不指定TAG默认拉取latest最新版。

    ② 查找远程镜像(这个可能会运行失败,但是不会对我们的实验造成影响)

    # docker search [options] 镜像名称
    # –limit N:返回N条镜像,默认25条
    docker search –limit 5 centos

    NAME镜像名;DESCRIPTION描述;STARS点赞数;OFFICIAL是否官方;AUTOMATED是否自动构建。

    ③ 下载镜像

    #docker pull 镜像名称[:TAG]
    #示例:拉取centos7镜像
    docker pull centos:7

    ④ 删除镜像

    #删除单个镜像
    docker rmi -f 镜像名称/镜像ID
    #删除多个镜像,空格隔开
    docker rmi -f centos:latest ubuntu:latest
    #删除全部本地镜像
    docker rmi -f $(docker images -qa)

    (3) 启动和停止容器

    #启动容器
    docker start 容器ID/容器名称
    #停止容器
    docker stop 容器ID/容器名称

    docker start test
    docker stop test

    (4) 进入、退出容器

    方式1(推荐,退出不停止容器)

    docker exec -i -t 容器ID/容器名称 /bin/bash
    exit

    方式2(exit退出会停止容器)

    docker attach 容器ID/容器名称

    退出快捷键:Ctrl+P+Q,不输入exit直接退出,容器保持运行。

    (5) 查看、删除容器

    #查看正在运行容器
    docker ps
    #查看所有容器(含已经停止)
    docker ps -a

    #删除已经停止容器
    docker rm 容器ID/容器名称
    #强制删除,容器正在运行也可以删除
    docker rm -f 容器ID/容器名称

    docker rm test02
    docker rm -f test


    docker注意事项:

    务必注意:每次重启虚拟机都要敲启动docker服务和docker容器!!!!

    # 开机的时候手动启动docker服务
    systemctl start docker
    # 启动docker容器
    docker start 你的容器名/容器ID
    #进入docker容器
    docker exec -it 容器名 /bin/bash

    #容器ID通过以下命令查看,第一列就是容器ID
    docker ps -a

    如果不想这么麻烦也可以直接开启docker服务的开机自启动,但是docker自启动了docker还是要手动启动

    # 设置docker开机自动启动
    systemctl enable docker


    Hadoop三种模式搭建命令与配置

    来源:Hadoop平台搭建与应用(第2版)微课版,基于Docker CentOS7,Hadoop‑2.7.7,JDK‑1.8.0_121

    一、基础环境准备(Docker、JDK、Hadoop、SSH)

    1. Docker启动、拉取镜像、创建容器

    # 启动docker
    systemctl start docker
    # 查看docker状态
    systemctl status docker

    # 拉取centos7镜像
    docker pull centos:7

    单机模式容器创建

    docker run -dit -h hadoop –name hadoop –privileged=true centos:7 init

    2. 复制JDK、Hadoop到容器,解压重命名

    # 宿主机复制tar包进容器
    docker cp /opt/jdk-8u121-linux-x64.tar.gz hadoop:/opt/
    docker cp /opt/hadoop-2.7.7.tar.gz hadoop:/opt/

    # 进入容器
    docker exec -it hadoop bash
    cd /opt

    # 解压JDK
    tar -zxvf jdk-8u121-linux-x64.tar.gz -C /usr/lib
    cd /usr/lib
    mv jdk1.8.0_121 jdk1.8.0

    3. 配置用户环境变量 ~/.bashrc

    vi ~/.bashrc

    文件末尾添加:

    export JAVA_HOME=/usr/lib/jdk1.8.0
    PATH=$PATH:$JAVA_HOME/bin

    生效并验证:

    source ~/.bashrc
    java -version

    4. Hadoop解压、配置HADOOP_HOME环境变量

    cd /opt
    tar -zxvf hadoop-2.7.7.tar.gz -C /usr/local
    cd /usr/local
    mv hadoop-2.7.7 hadoop

    vi ~/.bashrc

    追加:

    export HADOOP_HOME=/usr/local/hadoop
    PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    source ~/.bashrc

    5. 修改 hadoop‑env.sh

    cd /usr/local/hadoop/etc/hadoop
    vi hadoop-env.sh

    添加:

    export JAVA_HOME=/usr/lib/jdk1.8.0

    6.换源(清华源)

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

    cat > /etc/yum.repos.d/CentOS-Base.repo << 'EOF'
    [base]
    name=CentOS-$releasever – Base – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/os/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [updates]
    name=CentOS-$releasever – Updates – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/updates/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [extras]
    name=CentOS-$releasever – Extras – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/extras/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [centosplus]
    name=CentOS-$releasever – Plus – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    EOF

    yum clean all
    yum makecache

    7. SSH免密登录配置

    # 设置root密码
    passwd

    # 安装ssh相关包
    yum install -y which openssh openssh-server openssh-clients net-tools

    # 开启ssh服务
    systemctl start sshd

    # 生成密钥(回车三次)
    ssh-keygen -t rsa
    # 公钥写入认证文件
    cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

    # 验证免密
    ssh localhost

    二、单机模式验证(WordCount)

    # 启动hadoop
    start-all.sh
    # 查看进程
    jps

    # hdfs创建目录
    hdfs dfs -mkdir -p /user/root/input

    # 新建测试文件
    vi /usr/local/hadoop/wordcount.txt
    # 内容:
    # hello hadoop
    # hello java
    # hello world

    # 本地上传至hdfs
    hadoop dfs -copyFromLocal /usr/local/hadoop/wordcount.txt input

    # 运行wordcount示例jar
    hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount input output

    # 查看输出结果
    cat output/part-r-00000

    三、伪分布式模式安装配置

    1. 创建带端口映射的docker容器

    退出刚才的容器

    exit

    注意:第二的容器创建的时候一定要把第一个hadoop容器关掉

    docker stop hadoop

    创建容器第二个容器master容器

    docker run -dit -h master –name master -p 50070:50070 –privileged=true centos:7 init

    后续JDK、Hadoop、SSH配置步骤同单机模式。

    2. 复制JDK、Hadoop到容器,解压重命名

    # 宿主机复制tar包进容器
    docker cp /opt/jdk-8u121-linux-x64.tar.gz master:/opt/
    docker cp /opt/hadoop-2.7.7.tar.gz master:/opt/

    # 进入容器
    docker exec -it master bash
    cd /opt

    # 解压JDK
    tar -zxvf jdk-8u121-linux-x64.tar.gz -C /usr/lib
    cd /usr/lib
    mv jdk1.8.0_121 jdk1.8.0

    3. 配置用户环境变量 ~/.bashrc

    vi ~/.bashrc

    文件末尾添加:

    export JAVA_HOME=/usr/lib/jdk1.8.0
    PATH=$PATH:$JAVA_HOME/bin

    生效并验证:

    source ~/.bashrc
    java -version

    4. Hadoop解压、配置HADOOP_HOME环境变量

    cd /opt
    tar -zxvf hadoop-2.7.7.tar.gz -C /usr/local
    cd /usr/local
    mv hadoop-2.7.7 hadoop

    vi ~/.bashrc

    追加:

    export HADOOP_HOME=/usr/local/hadoop
    PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    source ~/.bashrc

    5.修改 hadoop‑env.sh

    cd /usr/local/hadoop/etc/hadoop
    vi hadoop-env.sh

    添加:

    export JAVA_HOME=/usr/lib/jdk1.8.0

    6. SSH免密登录配置

    # 设置root密码
    passwd

    # 换源
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

    cat > /etc/yum.repos.d/CentOS-Base.repo << 'EOF'
    [base]
    name=CentOS-$releasever – Base – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/os/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [updates]
    name=CentOS-$releasever – Updates – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/updates/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [extras]
    name=CentOS-$releasever – Extras – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/extras/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [centosplus]
    name=CentOS-$releasever – Plus – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    EOF

    yum clean all
    yum makecache

    # 安装ssh相关包
    yum install -y which openssh openssh-server openssh-clients net-tools

    # 开启ssh服务
    systemctl start sshd

    # 生成密钥(回车三次)
    ssh-keygen -t rsa

    # 公钥写入认证文件
    cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

    # 验证免密(输入yes)
    ssh localhost

    7. 配置core‑site.xml

    cd /usr/local/hadoop/etc/hadoop
    vi core-site.xml

    <configuration>
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop/data/tmp</value>
    </property>
    </configuration>

    8. 配置hdfs‑site.xml

    vi hdfs-site.xml

    <configuration>
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>/usr/local/hadoop/data/tmp/name</value>
    </property>
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>/usr/local/hadoop/data/tmp/data</value>
    </property>
    </configuration>

    ⚠️ 需要手动创建这几个目录:/usr/local/hadoop/data/tmp、name、data

    mkdir -p /usr/local/hadoop/data/tmp/name /usr/local/hadoop/data/tmp/data

    9. 配置mapred‑site.xml

    # mapred-site.xml 默认不存在,需要从模板复制
    cp mapred-site.xml.template mapred-site.xml
    vi mapred-site.xml

    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    </configuration>

    10. 配置yarn‑site.xml

    vi yarn-site.xml

    <configuration>
    <!– Site specific YARN configuration properties –>
    <property>
    <name>yarn.nodemanager.aux_services</name>
    <value>mapreduce_shuffle</value>
    </property>
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>localhost</value>
    </property>
    </configuration>

    11. 格式化HDFS、启动集群、验证

    # 格式化namenode
    hdfs namenode -format

    # 启动集群(输入yes)
    start-all.sh

    # 查看进程
    jps

    浏览器访问:http://docker宿主机IP:50070


    四、集群模式(一主二从 master1、slave1、slave2)

    退出刚才的容器

    exit

    关闭刚才的master容器

    docker stop master

    4.1 创建 Docker 自定义网桥

    docker network create –subnet=172.18.0.0/24 –gateway=172.18.0.1 hadoop

    4.2 创建 3 台容器

    # master1
    docker run -dit -h master1 –name master1 –network=hadoop –ip=172.18.0.2 –privileged=true -p 50070:50070 -p 8088:8088 centos:7 init

    # slave1
    docker run -dit -h slave1 –name slave1 –network=hadoop –ip=172.18.0.3 –privileged=true -p 8089:8088 centos:7 init

    # slave2
    docker run -dit -h slave2 –name slave2 –network=hadoop –ip=172.18.0.4 –privileged=true -p 8090:8088 centos:7 init

    # 查看网桥信息
    docker network inspect hadoop

    4.3 master1 环境准备

    4.3.1 复制 JDK、Hadoop 到 master1

    # 复制 JDK、Hadoop 到 master1
    docker cp /opt/jdk-8u121-linux-x64.tar.gz master1:/opt/
    docker cp /opt/hadoop-2.7.7.tar.gz master1:/opt/

    4.3.2 进入 master1,解压 JDK 和 Hadoop

    # 进入 master1 容器
    docker exec -it master1 bash

    # 切换到 /opt 目录,准备解压
    cd /opt

    解压 JDK

    # 解压 JDK 到 /usr/lib
    tar -zxvf jdk-8u121-linux-x64.tar.gz -C /usr/lib

    # 进入 /usr/lib,把解压后的目录重命名为 jdk1.8.0
    cd /usr/lib
    mv jdk1.8.0_121 jdk1.8.0

    解压 Hadoop

    # 回到 /opt
    cd /opt

    # 解压 Hadoop 到 /usr/local
    tar -zxvf hadoop-2.7.7.tar.gz -C /usr/local

    # 进入 /usr/local,把解压后的目录重命名为 hadoop
    cd /usr/local
    mv hadoop-2.7.7 hadoop

    4.3.3 配置环境变量 ~/.bashrc

    # 编辑当前用户的环境变量文件
    vi ~/.bashrc

    在文件末尾追加:

    export JAVA_HOME=/usr/lib/jdk1.8.0
    export HADOOP_HOME=/usr/local/hadoop
    PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    生效并验证:

    # 让环境变量立即生效
    source ~/.bashrc

    # 验证 Java 是否配置成功
    java -version

    # 验证 Hadoop 是否配置成功
    hadoop version

    4.3.4 修改 hadoop-env.sh

    # 切换到 Hadoop 配置目录
    cd /usr/local/hadoop/etc/hadoop

    # 编辑 hadoop-env.sh
    vi hadoop-env.sh

    添加:

    # 指定 JDK 路径,供 Hadoop 各组件使用,这个里面已经有一句记得把原本的那句删掉
    export JAVA_HOME=/usr/lib/jdk1.8.0

    ![[Pasted image 20260917011040.png|318]]

    3台容器全部要:设置root密码、安装yum软件包、启动sshd;master1做ssh免密,ssh‑copy‑id把公钥分发到master1、slave1、slave2。

    4.4 slave1 节点操作

    只做环境准备,不做密钥分发。

    # 进入slave1
    docker exec -it slave1 bash

    4.4.1 设置 root 密码

    passwd

    4.4.2 换源(清华源)

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

    cat > /etc/yum.repos.d/CentOS-Base.repo << 'EOF'
    [base]
    name=CentOS-$releasever – Base – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/os/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [updates]
    name=CentOS-$releasever – Updates – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/updates/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [extras]
    name=CentOS-$releasever – Extras – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/extras/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [centosplus]
    name=CentOS-$releasever – Plus – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    EOF

    yum clean all
    yum makecache

    4.4.3 安装相关包

    yum install -y which openssh openssh-server openssh-clients net-tools

    4.4.4 启动 sshd

    systemctl start sshd

    不需要在 slave1 上 ssh-keygen,也不需要在 slave1 上 ssh-copy-id。公钥由 master1 统一分发过来。


    4.5 slave2 节点操作

    与 slave1 完全相同,只做环境准备。

    # 进入slave2
    docker exec -it slave2 bash

    4.5.1 设置 root 密码

    passwd

    4.5.2 换源(清华源)

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

    cat > /etc/yum.repos.d/CentOS-Base.repo << 'EOF'
    [base]
    name=CentOS-$releasever – Base – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/os/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [updates]
    name=CentOS-$releasever – Updates – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/updates/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [extras]
    name=CentOS-$releasever – Extras – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/extras/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [centosplus]
    name=CentOS-$releasever – Plus – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    EOF

    yum clean all
    yum makecache

    4.5.3 安装 ssh 相关包

    yum install -y which openssh openssh-server openssh-clients net-tools

    4.5.4 启动 sshd

    systemctl start sshd

    同样,不需要 ssh-keygen,不需要 ssh-copy-id。


    4.6 master1 节点操作

    4.6.0 进入 master1

    docker exec -it master1 bash

    4.6.1 设置 root 密码

    passwd

    4.6.2 换源(清华源)

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

    cat > /etc/yum.repos.d/CentOS-Base.repo << 'EOF'
    [base]
    name=CentOS-$releasever – Base – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/os/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [updates]
    name=CentOS-$releasever – Updates – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/updates/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [extras]
    name=CentOS-$releasever – Extras – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/extras/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [centosplus]
    name=CentOS-$releasever – Plus – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    EOF

    yum clean all
    yum makecache

    4.6.3 安装相关包

    yum install -y which openssh openssh-server openssh-clients net-tools

    4.6.4 启动 sshd

    systemctl start sshd

    4.6.5 生成密钥对

    # 一路回车(三次)
    ssh-keygen -t rsa
    cd ~/.ssh

    4.6.6 免密分发(master1 上执行这三条)

    ssh-copy-id master1
    ssh-copy-id slave1
    ssh-copy-id slave2

    执行 ssh-copy-id slave1、ssh-copy-id slave2 时,第一次会提示 yes/no,输入 yes,然后输入对应主机的 root 密码。

    4.6.7 验证免密

    ssh master1
    exit

    ssh slave1
    exit

    ssh slave2
    exit

    能直接进入不输密码,即成功。


    4.7 集群模式配置文件(master1 节点)

    进入 master1

    docker exec -it master1 bash

    切换到 hadoop 配置目录

    cd /usr/local/hadoop/etc/hadoop

    4.7.1 修改 slaves(workers)

    vi slaves

    删除 localhost,写入:

    slave1
    slave2

    在这里插入图片描述

    4.7.2 core‑site.xml

    vi core-site.xml

    <configuration>
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master1:9000</value>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop/data/tmp</value>
    <description>Abase for other temporary directories.</description>
    </property>
    </configuration>

    4.7.3 hdfs‑site.xml

    vi hdfs-site.xml

    <configuration>
    <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>master1:50090</value>
    </property>
    <property>
    <name>dfs.replication</name>
    <value>3</value>
    </property>
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>/usr/local/hadoop/data/tmp/name</value>
    </property>
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>/usr/local/hadoop/data/tmp/data</value>
    </property>
    </configuration>

    4.7.4 mapred‑site.xml

    cp mapred-site.xml.template mapred-site.xml
    vi mapred-site.xml

    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    <property>
    <name>mapreduce.jobhistory.address</name>
    <value>master1:10020</value>
    </property>
    <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>master1:19888</value>
    </property>
    </configuration>

    4.7.5 yarn‑site.xml

    vi yarn-site.xml

    <configuration>
    <!– Site specific YARN configuration properties –>
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master1</value>
    </property>
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    </configuration>

    4.8 将 master1 的 JDK、Hadoop、环境变量分发到 slave1、slave2

    # 分发bashrc
    scp -r ~/.bashrc slave1:~/.bashrc
    scp -r ~/.bashrc slave2:~/.bashrc

    # 分发hadoop
    scp -r /usr/local/hadoop/ slave1:/usr/local
    scp -r /usr/local/hadoop/ slave2:/usr/local

    # 分发jdk
    scp -r /usr/lib/jdk1.8.0 slave1:/usr/lib
    scp -r /usr/lib/jdk1.8.0 slave2:/usr/lib

    # 在slave1、slave2分别执行(注意:这里不是在master1里面执行的,是分别在slave1和slave2里面运行)
    source ~/.bashrc

    4.9 集群启动与验证

    # master1格式化namenode(在master1里面执行)
    hdfs namenode -format

    # 启动全部集群
    start-all.sh

    # 各节点执行jps查看进程
    jps

    Web 访问:

    • HDFS 页面:http://宿主机IP:50070
    • YARN 页面:http://宿主机IP:8088
      比如我是(因为我前面配置静态IP的时候设置的是这个IP):
    • HDFS 页面:http://192.168.196.101:50070
    • YARN 页面:http://192.168.196.101:8088
      在这里插入图片描述
      在这里插入图片描述

    5.Hadoop 基本操作

    ① 创建目录

    # 在 HDFS 根目录下创建 input 目录
    hdfs dfs -mkdir /input

    # 查看 HDFS 根目录,确认创建成功
    hdfs dfs -ls /

    如果是多级目录,可以加 -p:

    hdfs dfs -mkdir -p /input/data


    ② 上传文件

    先在本地创建一个测试文件:

    # 在本地 /root 下创建 test.txt
    cat > /root/test.txt << 'EOF'
    hello hadoop
    hello java
    hello world
    EOF

    上传到 HDFS:

    # 把本地 /root/test.txt 上传到 HDFS 的 /input 目录
    hdfs dfs -put /root/test.txt /input

    查看是否上传成功:

    hdfs dfs -ls /input


    ③ 下载文件

    # 把 HDFS 上的 /input/test.txt 下载到本地 /root 下
    hdfs dfs -get /input/test.txt /root/


    ④ 查看文件内容

    # 查看 HDFS 上 /input/test.txt 的内容
    hdfs dfs -cat /input/test.txt


    备注:
    如果原本换的yum源(阿里源)下载太慢(正常一分钟不到),可以使用一下的清华源:

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

    cat > /etc/yum.repos.d/CentOS-Base.repo << 'EOF'
    [base]
    name=CentOS-$releasever – Base – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/os/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [updates]
    name=CentOS-$releasever – Updates – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/updates/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [extras]
    name=CentOS-$releasever – Extras – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/extras/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    [centosplus]
    name=CentOS-$releasever – Plus – mirrors.tuna.tsinghua.edu.cn
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/centos/RPM-GPG-KEY-CentOS-7
    EOF

    yum clean all
    yum makecache

    阿里源:

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

    cat > /etc/yum.repos.d/CentOS-Base.repo << 'EOF'
    [base]
    name=CentOS-$releasever – Base – mirrors.aliyun.com
    baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

    [updates]
    name=CentOS-$releasever – Updates – mirrors.aliyun.com
    baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

    [extras]
    name=CentOS-$releasever – Extras – mirrors.aliyun.com
    baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/extras/$basearch/
    gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

    [centosplus]
    name=CentOS-$releasever – Plus – mirrors.aliyun.com
    baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/centosplus/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
    EOF

    yum clean all
    yum makecache

    赞(0)
    未经允许不得转载:171主机测评 » 【教程】Centos7的Docker环境下Hadoop三种模式的配置
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址