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-centosofficialvi 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-centosofficialvi 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/bashif [ $# -lt 1 ]
    thenecho Not Enough Arguement!exit;
    fi
    for host in hadoop01 hadoop02 hadoop03
    doecho ====================  $host  ====================for file in $@doif [ -e $file ]thenpdir=$(cd -P $(dirname $file); pwd)fname=$(basename $file)ssh $host "mkdir -p $pdir"rsync -av $pdir/$fname $host:$pdirelseecho $file does not exists!fidone
    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.mzph.cn/news/89678.shtml

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

相关文章

【力扣每日一题】2023.9.27 餐厅过滤器

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目挺长,估计中等难度是给在了阅读理解上。 简单来说就是给我们一堆餐厅的信息,每个餐厅拥有五个属性&#xff…

虹科Pico汽车示波器诚邀您加入精准诊断时代,助您成为修车大师!

虹科Pico汽车示波器的口号是: 面向未来诊断,定义精准时代 淘汰人的是工具从来不是年龄!虹科Pico汽车示波器能够让您掌握现代的诊断工具,让您更高效的诊断故障原因。 我们有专业的设备与优质的技术服务!让每个用户自…

LeetCode每日一题:2251. 花期内花的数目(2023.9.28 C++)

目录 2251. 花期内花的数目 题目描述: 实现代码与解析: 离散化差分 原理思路: 2251. 花期内花的数目 题目描述: 给你一个下标从 0 开始的二维整数数组 flowers ,其中 flowers[i] [starti, endi] 表示第 i 朵花的…

1.centos7 安装显卡驱动、cuda、cudnn

安装conda 参考 python包 2.安装conda python库-CSDN博客3.Cenots Swin-Transformer-Object-Detection环境配置-CSDN博客 1.安装显卡驱动 步骤1:安装依赖 yum -y install kernel-devel yum -y install epel-release yum -y install gcc 步骤2:查询显…

[滴水逆向]03-12 pe头字段说明课后作业,输出pe结构

#include <iostream> #include <windows.h> using namespace std; #pragma warning(disable:4996) //DOC结构 typedef struct _DOC_HEADER {WORD e_magic;WORD e_cblp;WORD e_cp;WORD e_crlc;WORD e_cparhar;WORD e_minalloc;WORD e_maxalloc;WORD e_ss;WO…

CentOS 7下载安装MySQL 5.7以及连接虚拟机CentOS 7数据库教程

## CentOS 7下载安装MySQL 5.7以及连接虚拟机CentOS 7数据库教程 文章目录 ## [CentOS 7下载安装MySQL 5.7以及连接虚拟机CentOS 7数据库教程](https://my.oschina.net/u/3986411/blog/4714780) 通过如下命令查看mariadb的安装包 rpm -qa | grep mariadb通过如下命令卸载mariad…

Java基础简单整理

文章目录 Java语言具有以下特点&#xff1a;Java SE vs Java EEJVM vs JDK vs JRE为什么说 Java 语言编译与解释并存&#xff1f;Java 和 C 的区别?Java注释用法&#xff1a;Java标识符Java基本数据类型链接Java字符串类型链接基本类型和包装类型的区别&#xff1f;静态方法为…

可以动态改变刻度背景色的车速仪表盘

最近做的项目的主页面需要用到一个仪表盘来动态显示车速&#xff0c;同时改变对应的背景色 仪表盘 开始是想着使用echarts&#xff0c;修修改改拿来用&#xff0c;但是人家客户有规定&#xff0c;必须搞个差不多的&#xff0c;那没办法&#xff0c;自 己动手搞个吧 截图如下&am…

SDI-12协议与STM32 进行uart通信

场景是用stm32与一款温湿度传感器通信&#xff0c;不过是基于SDI-12协议&#xff0c;SDI-12时序和UART类似&#xff0c;故采用UART传输&#xff0c;原理图如下 其中DIR_OUT_SDI是一个IO引脚&#xff0c;控制UART_TX_SDI是否使能&#xff0c;U10是三态门IC&#xff0c;即拉低DIR…

AI文章,AI文章生成工具

在互联网时代&#xff0c;随着信息爆炸式增长&#xff0c;文章的需求愈发旺盛。从博客、新闻、社交媒体到企业宣传&#xff0c;文字作为传达信息、吸引受众的工具变得愈发重要。但问题是&#xff0c;对于很多人来说&#xff0c;创作一篇高质量的文章并不容易。时间、创意、写作…

【c语言的函数指针介绍】

C语言中的函数指针是一种特殊的指针&#xff0c;它指向函数而不是数据。函数指针允许你在运行时动态地选择要调用的函数&#xff0c;这使得你可以根据需要在不同的函数之间切换&#xff0c;或者将函数作为参数传递给其他函数。函数指针的声明和使用如下&#xff1a; 声明函数指…

Tomcat多实例、负载均衡、动静分离

Tomcat多实例部署 安装jdk [rootlocalhost ~]#systemctl stop firewalld.service [rootlocalhost ~]#setenforce 0 [rootlocalhost ~]#cd /opt [rootlocalhost opt]#ls apache-tomcat-8.5.16.tar.gz jdk-8u91-linux-x64.tar.gz rh [rootlocalhost opt]#tar xf jdk-8u91-linu…

荣耀时刻!2023抖音电商作者峰会为优质直播间和卓越生态伙伴颁奖

9月27日&#xff0c;抖音电商在上海举行了以“向新成长”为主题的2023抖音电商作者峰会&#xff0c;并现场颁发了荣誉奖项。抖音电商优质直播间以及践行抖音电商作者精神四个维度的年度荣誉一一揭晓。 过去一年&#xff0c;数百万作者与众多品牌商家、MCN机构和精选联盟服务商…

打造卓越摄影作品,尽享专业级编辑体验——DxO PhotoLab 7 for Mac

DxO PhotoLab 7 for Mac 是一款功能强大的专业照片编辑软件&#xff0c;为摄影爱好者和专业摄影师提供了优秀的工具和功能&#xff0c;让您能够轻松打造卓越的摄影作品并实现专业级的编辑效果。 DxO PhotoLab 7 提供了一套先进的图像处理算法&#xff0c;能够准确地还原照片的…

ORACLE 在内存管理机制上的演变和进化

截止目前&#xff0c;计算机内存仍然被认为是我们可以获得的最快速度的物理存储设备。 将频繁访问的数据尽可能地置于内存中&#xff0c;已成为当前各种软件和应用程序提高数据访问性能&#xff0c;减少访问延迟的最为有效的途径。 然而&#xff0c;内存作为关键的计算资源&am…

K8S-存储卷,pv,pvc

pv&#xff0c;pvc 一、emptyDir存储卷1.概述2.示例 二、hostPath存储卷1.概述 三、nfs共享存储卷1.在stor01节点上安装nfs&#xff0c;并配置nfs服务2.master节点操作3.在nfs服务器上创建index.html4.master节点操作 四、PVC 和 PV1.概述2.PV和PVC之间的相互作用遵循的生命周期…

基于Java的传统文化宣传平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

python接口自动化(一)--什么是接口、接口优势、类型(详解)

简介 经常听别人说接口测试&#xff0c;接口测试自动化&#xff0c;但是你对接口&#xff0c;有多少了解和认识&#xff0c;知道什么是接口吗&#xff1f;它是用来做什么的&#xff0c;测试时候要注意什么&#xff1f;坦白的说&#xff0c;笔者之前也不是很清楚。接下来先看一…

Ci2451-2.4g无线MCU收发芯片

Ci2451 是一款集成无线收发器和8位RISC(精简指令集)MCU的SOC芯片。 无线MCU解决方案,集成丰富的MCU资源、更小尺寸,来满足设计中的各种内存、功率、尺寸要求,充分缩短2.4GHz无线产品设计周期并优化产品成本。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff…

005:根据股票代码和起始日期获取K线数据

我们改进《001》中的部分&#xff0c;因为他他没法在可视化界面输入信息&#xff0c;这样太麻烦。我们设法在可视化界面输入股票代码和起始日期&#xff0c;这样可以灵活得多。这部分&#xff0c;我们仍旧只获取日K线的数据。 import tkinter as tk from tkinter import messa…