mac docker部署hadoop集群

news2024/11/25 13:51:08

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
    

    image-20230928005907438

    • 注意因为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
    

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

    image-20230927193633972

7.3 容器间时间同步

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

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

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

    image-20230927194454453

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

image-20230927194553444

  • 对于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

image-20230928014236371

image-20230928014305235

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1049634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

掌握 JavaScript 数组方法:了解如何操作和优化数组

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

Android Logcat 命令行工具

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、日常用法3.1 面板介绍3.2 日志过滤…

零代码编程:用ChatGPT批量将多个文件夹中的视频转为音频

有多个文件夹中的 视频,都要批量转换成音频格式。 转换完成后要删除视频。虽然现在已经有很多格式转换软件可以实现这个功能,但是需要一个个文件夹的操作,还要手动去删除视频。用ChatGPT来写一个批量自动操作程序吧: 输入提示词如…

获取el-select选中的下标

accountZbList:[ ]:下拉列表已通过接口获取数据 <el-row><el-col :span"12"><el-form-item label"账簙" prop"accountTook" class"itemzb"><el-select v-model"tableForm.accountTook" placeholder&…

软件测试基础学习

注意&#xff1a; 各位同学们&#xff0c;今年本人求职目前遇到的情况大体是这样了&#xff0c;开发太卷&#xff0c;学历高的话优势非常的大&#xff0c;公司会根据实际情况考虑是否值得培养&#xff08;哪怕技术差一点&#xff09;&#xff1b;学历稍微低一些但是技术熟练的…

改进的最大内切圆算法求裂缝轮廓宽度

前段时间我将网上最大内切圆算法进行了代码的整理&#xff0c;原先博主上传的代码稍微有点乱&#xff0c;可能也是它自己使用&#xff0c;大家可以看这篇整理好的&#xff1a;最大内切圆算法计算裂缝宽度。 最大内切圆算法详解 一个圆与给定的多边形或曲线的每一条边或曲线都…

13.(开发工具篇github)如何在GitHub上上传本地项目

一:创建GitHub账户并安装Git 二:创建一个新的仓库(repository) 三、拉取代码 git clone https://github.com/ainier-max/myboot.git git clone git@github.com:ainier-max/myboot.git四、拷贝代码到拉取后的工程 五、上传代码 (1)添加所有文件到暂存

PyTorch 模型性能分析和优化 — 第 1 部分

一、说明 这篇文章的重点将是GPU上的PyTorch培训。更具体地说&#xff0c;我们将专注于 PyTorch 的内置性能分析器 PyTorch Profiler&#xff0c;以及查看其结果的方法之一&#xff0c;即 PyTorch Profiler TensorBoard 插件。 二、深度框架 训练深度学习模型&#xff0c;尤其是…

江西广电会展集团总经理李悦一行莅临拓世科技集团调研参观,科技璀璨AIGC掀新潮

在江西这片充满活力的土地上&#xff0c;数字经济如潮水般涌动&#xff0c;会展文化与科技的完美结合&#xff0c;正如新时代的璀璨繁星照亮夜空&#xff0c;更预示着一场AIGC创新的壮丽篇章即将展开。作为拓世科技集团的老朋友&#xff0c;江西广电多位领导多次莅临拓世科技集…

【MATLAB源码-第40期】基于matlab的D*(Dstar)算法栅格路径规划仿真。

1、算法描述 D*算法路径规划 D*算法&#xff08;Dynamic A*&#xff09;是A*算法的一种变种&#xff0c;主要用于在地图中的障碍物信息发生变化时重新计算路径&#xff0c;而不需要从头开始。该算法适用于那些只有部分信息已知的环境中。 工作原理&#xff1a; 1. D*算法首先…

嵌入式Linux应用开发-第七章-RK3288和 RK3399的 LED驱动程序

嵌入式Linux应用开发-第七章-RK3288和 RK3399的 LED驱动程序 RK3288和 RK3399的 LED驱动程序7.3 RK3288和 RK3399的 LED驱动程序7.3.1 原理图7.3.1.1 fireflye RK3288的 LED原理图7.3.1.2 firefly RK3399的 LED原理图 7.3.2 所涉及的寄存器操作7.3.2.1 RK3288的 GPIO8_A1引脚7.…

探索ClickHouse——使用MaterializedView存储kafka传递的数据

在《探索ClickHouse——连接Kafka和Clickhouse》中&#xff0c;我们讲解了如何使用kafka engin连接kafka&#xff0c;并读取topic中的数据。但是遇到了一个问题&#xff0c;就是数据只能读取一次&#xff0c;即使后面还有新数据发送到该topic&#xff0c;该表也读不出来。 为了…

Ae 效果:CC Smear

扭曲/CC Smear Distort/CC Smear CC Smear &#xff08;CC 漩涡条纹&#xff09;可以将两点之间的源图像内容进行拉伸扭曲变形&#xff0c;形成一种类似油墨被涂抹或者柔体被拉扯之后的漩涡条纹效果。 ◆ ◆ ◆ 效果属性说明 From 从 漩涡条纹效果的起点。 默认为合成的中心。…

麒麟v10获取wwn

for i in cat /proc/partitions | awk {print $4} | grep sd do echo "Device: $i WWID: /usr/lib/udev/scsi_id --page0x83 --whitelisted --device/dev/$i" done | sort -k4

用于时间触发的嵌入式软件的IDE

TTE Systems的RapidiTTy IDE为希望创建“时间触发”微控制器软件以提高整体系统可靠性的开发人员提供了一个独立的环境。RapidiTTy&#xff08;下面的图1&#xff09;旨在解决深度嵌入的应用&#xff0c;包括医疗&#xff0c;国防&#xff0c;汽车和工业部门以及白色和棕色商品…

【Linux】Linux远程访问Windows下的MySQL数据库

1.建立Windows防火墙规则 首先需要开放windows防火墙&#xff0c;针对3306端口单独创建一条规则&#xff0c;允许访问。 打开windows安全中心防火墙与保护&#xff0c;点击高级设置 进入之后&#xff0c;点击入站规则&#xff0c;新建一条规则 新建端口入站规则 端口填写330…

【计算机网络】 基于TCP的简单通讯(客户端)

文章目录 流程伪代码代码实现加载库创建套接字连接服务端收发数据关闭套接字、卸载库 测试 流程伪代码 //1、加载库//2、创建套接字//3、连接服务端while(true){//4、发送数据//5、接收数据} //6、关闭套接字、卸载库代码实现 加载库 int err 0;WORD version MAKEWORD(2, 2…

表单控件拖拽平台都有哪些特点?

什么样的表单控件拖拽平台可以提升办公协作效率&#xff1f;在竞争激烈的当今社会&#xff0c;利用低代码技术平台的优势和特点&#xff0c;可以将企业内部的数据资源真正利用起来&#xff0c;帮助更多领域的客户朋友做出更有竞争优势的经营决策&#xff0c;实现数字化转型和流…

【Verilog 教程】6.3Verilog状态机

关键词&#xff1a;状态机&#xff0c;售卖机 有限状态机&#xff08;Finite-State Machine&#xff0c;FSM&#xff09;&#xff0c;简称状态机&#xff0c;是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。状态机不仅是一种电路的描述工具&#xff0c;而且…

0x23根据地址读取内存服务

诊断仪从ECU通过起始地址和内存大小空间来读取指定内存的数据&#xff0c;高地址范围未使用到的字节用0x00去填充。 请求报文格式 肯定响应报文形式