mac docker部署hadoop集群

1. 安装docker

  • 确保电脑已经安装docker

  • docker安装过程可自行查找资料,mac下docker可以使用brew命令安装

  • 安装之后,查看docker版本,确认安装成功

    docker -v
    

2. 下载jdk

  • 最好下载jdk-8,jdk的版本过高可能hadoop2.x不支持
  • jdk-8的下载地址:Java Downloads | Oracle

3.下载hadoop

  • 我下载的是hadoop3.3.4版本,下tar.gz压缩包
  • hadoop下载地址:Index of /dist/hadoop/common (apache.org)

4. 拉取镜像 centos

  • 通过此命令拉取最新的centos8的镜像

    docker pull centos 
    
  • 启动centos容器

    docker run -itd --name hadoop01 -p 2201:22 -p 8088:8088 -p 9000:9000 -p 50070:50070 --privileged=true centos:latest /sbin/init
    

    注意:

    • -p:表示端口映射,这很重要,可以方便本机在外部访问web网页 需要设置容器和本机的相关端口映射
    • -i:表示运行的容器
    • -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
    • -d: 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
    • –name :为创建的容器命名。
    • –privileged:为true时赋予容器内root用户真正的root权限,否则root为普通用户,默认为flase
    • /sbin/init: 使容器启动后可以使用systemctl方法
  • 容器启动之后会有唯一的容器id,通过如下命令查看正在运行的容器

    docker ps
    
image-20230928003510102
  • 通过如下命令进入容器,containerID也可以填容器的名称

    docker exec -it containerID /bin/bash
    
  • 进入容器后非常重要的一点!!更换yum源,卡在这里很久

    因为大部分的教程只更换了 CentOS-Linux-BaseOS.repo和CentOS-Linux-AppStream.repo

    但是在使用yum命令安装vim的时候,报错的是:CentOS-Linux-Extras.repo

    因此,需要换源的是三个地方

    按照如下修改这三个文件的内容:

    cd /etc/yum.repos.d
    vi CentOS-Linux-BaseOS.repo
    #修改内容为:
    [baseos]
    name=CentOS Linux $releasever - BaseOS
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
    #baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
    baseurl=https://vault.centos.org/centos/$releasever/BaseOS/$basearch/os/
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
    
    vi CentOS-Linux-AppStream.repo
    #修改内容为
    [appstream]
    name=CentOS Linux $releasever - AppStream
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
    #baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
    baseurl=https://vault.centos.org/centos/$releasever/AppStream/$basearch/os/
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
    
    vi CentOS-Linux-Extras.repo
    #修改内容为:
    [extras]
    name=CentOS Linux $releasever - Extras
    #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
    #baseurl=http://mirror.centos.org/$contentdir/$releasever/extras/$basearch/os/
    baseurl=https://mirrors.aliyun.com/centos/8-stream/extras/$basearch/os/
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
    
  • 然后使用yum 命令下载vim,后面可以缺少什么利用yum下载什么了

    yum install -y vim
    

5. 安装Java环境

  • 首先mac开启两个终端,一个是centos入容器终端,另一个是本机终端

    image-20230928004348571

  • centos终端:创建dowload文件夹

    mkdir /home/download
    
  • 本机终端,移动到jdk存放目录,将jdk的包上传至dowload文件夹,hadoop安装包也相同上传

    cd vmware-hosts/hadoop/
    docker cp jdk-8u381-linux-aarch64.tar.gz hadoop01:/home/download/
    docker cp hadoop-3.3.4.tar.gz hadoop01:/home/download/
    
  • centos终端:进入download目录下将jdk文件解压至/usr/local/目录下

    cd /home/download/
    tar -zxvf jdk-8u381-linux-aarch64.tar.gz -C /usr/local/
    
  • 进入jdk解压目录,将文件名修改为jdk(方便设置环境变量及简洁):

    cd /usr/local/
    mv mv jdk1.8.0_311/ jdk
    
  • 修改bashrc环境变量

    vim /etc/bashrc
    #在末尾添加以下内容
    #jdk environment
    export JAVA_HOME=/usr/local/jdk
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
    #source 使环境变量生效
    source /etc/bashrc
    

6. 创建集群需要的容器

  • 将hadoop01导出到镜像,并利用该镜像创建两个相同容器

    #导出镜像
    docker commit hadoop01 mycentos
    #查看镜像列表
    docker images
    #创建相同容器
    docker run -itd --name hadoop02 -p 2202:22 -p 50090:50090 --privileged=true mycentos /sbin/init
    docker run -itd --name hadoop03 -p 2203:22 --privileged=true mycentos /sbin/init
    
    • 注意:创建的容器进入之后root之后@的是容器id,在容器内使用

      hostname hadoop01
      

      可以对其主机名进行修改,ctrl+p+q之后即可生效

7.安装hadoop

7.1 三台服务器统一网段

安装hadoop需要保持服务器之间内网连通,而我们创建的三个容器:hadoop01、hadoop02、hadoop03;默认是放在bridge的网段的,默认是联通的,但是为了和其他不相关的容器区分开,建议还是创建一个新的网段让三台容器自己相连。

#查看docker 存在的网段
docker network ls
#创建名为bigdata的新网段
docker network create bigdata
# 三台容器连入bigdata网段
docker network connect bigdata hadoop01
docker network connect bigdata hadoop02
docker network connect bigdata hadoop03
#断开三台容器与bridge的连接
docker network disconnect bridge hadoop01
docker network disconnect bridge hadoop02
docker network disconnect bridge hadoop03
  • 最后查看bigdata内的网段:以及三台机器的ip地址

    docker network inspect bigdata
    

    mac docker部署hadoop集群_第1张图片

    • 注意因为docker的centos8的镜像是不带防火墙的,可以省去关闭防火墙步骤

7.2 SSH 无密登陆配置

  • 对于hadoop01主机

    • 运行如下命令:
    yum -y install passwd openssh-server openssh-clients
    systemctl status sshd
    systemctl start sshd
    systemctl enable sshd #让sshd服务开机启动
    ss -lnt #检查22端口号是否开通
    

    此时发现:22端口已开通

    image-20230927192529764

    • 设置root密码

       passwd root
      

      image-20230927192609357

注意,到这个步骤,每个容器都必须安装一次!

  • 安装完成之后:修改hosts文件

    vim /etc/hosts
    #在文件后添加
    172.19.0.2      hadoop01
    172.19.0.3      hadoop02
    172.19.0.4      hadoop03
    
  • 设置免密登录

     ssh-keygen -t rsa #连续三个回程
    [root@hadoop01 ~] cd .ssh/
    [root@hadoop01 ~] ls
    

    image-20230928011217604

  • 将公钥拷贝到要免密登录的目标机器上

    ssh-copy-id hadoop01
    ssh-copy-id hadoop02
    ssh-copy-id hadoop03
    

    注意这里本容器的公钥也需要拷贝,以上命令需要在三个容器中都执行

    mac docker部署hadoop集群_第2张图片

7.3 容器间时间同步

  • centos8取消了ntpd服务,使用chrony替代了ntpd的时间同步,为三台容器下载chronyd

    yum -y install chrony
    
  • 设置hadoop01为时间同步主服务器,其余节点从hadoop01同步时间

    #对于hadoop01容器
    vim /etc/chrony.conf
    
    • 取消图中注释的两行:

    mac docker部署hadoop集群_第3张图片

    • 取消掉图中两行注释,前者代表允许该网段从本服务器同步时间,后者代表将本服务器作为时间同步主服务器
    • 修改后启动chrony服务
 systemctl status chronyd #查看服务状态
 systemctl start chronyd #启动服务
 systemctl enable chronyd #将服务设置为开机启动

mac docker部署hadoop集群_第4张图片

  • 对于hadoop02和hadoop03 都修改时间同步来源为hadoop01

    vim /etc/chrony.conf 
    
  • 做如下修改:

    image-20230928012512770

一些chrony命令:

查看时间同步源:
$ chronyc sources -v
查看时间同步源状态:
$ chronyc sourcestats -v
校准时间服务器:
$ chronyc tracking
  • 解压文件

     tar -zxvf hadoop-3.3.4.tar.gz -C /usr/local
    
  • 配置hadoop环境变量

    cd /etc/profile.d/
    touch my_env.sh
    vim my_env.sh
    #在其末尾添加
    #HADOOP_HOME
    export HADOOP_HOME=/usr/local/hadoop-3.3.4
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    #让修改后的文件生效
    source /etc/profile
    #测试是否成功
    hadoop version
    

    image-20230928013054015

  • 分发hadoop 以及环境变量

    cd /usr/local/
    scp -r hadoop/ hadoop02:$PWD
    scp -r hadoop/ hadoop03:$PWD
    scp /etc/profile hadoop02:/etc/
    scp /etc/profile hadoop03:/etc/
    
    source /etc/profile #在hadoop02上执行
    source /etc/profile #在hadoop03上执行
    

7.4 集群分发脚本

  • 将脚本放在全局环境变量中

    echo $PATH
    

    image-20230928013355835

  • 在全局环境目录下创建xsync脚本

    cd /usr/local/bin
    vim xsync
    
    #编写如下脚本
    #!/bin/bash
    
    if [ $# -lt 1 ]
    then
        echo Not Enough Arguement!
        exit;
    fi
    for host in hadoop01 hadoop02 hadoop03
    do
        echo ====================  $host  ====================
    
        for file in $@
        do
            if [ -e $file ]
                then
                    pdir=$(cd -P $(dirname $file); pwd)
    
                    fname=$(basename $file)
                    ssh $host "mkdir -p $pdir"
                    rsync -av $pdir/$fname $host:$pdir
                else
                    echo $file does not exists!
            fi
        done
    done
    
    #修改脚本xysnc 赋予执行权限
    chmod +x xsync
    #测试脚本
    xsync /usr/local/bin
    #将脚本复制/bin目录,以便全局调用
    cp xsync /bin/
    #同步环境变量配置
     ./bin/xsync /etc/profile.d/my_env.sh
     
    #最后hadoop01 hadoop02 hadoop03 都执行 
    source /etc/profile
    

8.关于hadoop集群的配置问题

  • 可参考Hadoop的学习笔记(二):完全分布式的配置、格式化、启动 - 知乎 (zhihu.com)

需要注意的点是:

webUI界面:

在启动了hdfs和yarn之后,其HDFS的Yarn的webUI的界面地址:其不是容器的ip地址!!要注意

因为可以发现其实在物理机器上是ping不通hdfs的ip地址的

我也按照一些资料去解决问题,暂时还没有解决物理机和docker容器ip不互通的问题

但是,在启动容器的时候,我们设置了端口的映射关系,就可以通过物理机的ip地址来访问容器内端口

因此:

HDFS:http://localhost:50070/
yarn:http://localhost:8080

mac docker部署hadoop集群_第5张图片

mac docker部署hadoop集群_第6张图片

你可能感兴趣的:(hadoop,macos,docker,hadoop)