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

08 docker搭建大数据集群

由于电脑资源不足,免费使用了阿里云的云服务器,使用docker搭建大数据集群

1. 创建普通用户并修改用户权限

详见01 Hadoop集群部署_Hadoop安装与部署步骤详解-CSDN博客

2. centos镜像配置

#下载centos镜像,加tag下载指定版本,在root用户下操作
docker pull centos:7.5.1804#查看镜像
docker images

3. 创建容器serverbase

#用centos镜像创建容器
docker run -itd --name serverbase --privileged centos:7.5.1804 init# name 容器名称# privileged 表示用root身份操作容器# centos:版本号或latest 指定镜像,可以用镜像id代替# 查看正在运行的容器
docker ps

# 进入容器docker exec -it serverbase /bin/bash
# 设置root用户密码
passwd
# 修改镜像源(阿里镜像源)
cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*    # 把以CentOS-*格式的文件中mirrorlist替换为#mirrorlist,即注释掉该行sed -i 's|#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-*    # 替换为阿里镜像源
yum makecache    # 重建yum缓存

安装一些必要工具

# 安装epel-release,软件仓库
yum install -y epel-release
# 安装网络工具
yum install -y net-tools
# 安装 Vim 编辑器
yum install -y vim
# 安装 passwd(修改密码工具)
yum install passwd
# 安装 Telnet 客户端(用于测试远程端口连通性)
yum install telnet
# 安装 OpenSSH 服务端和客户端
yum install openssh-server -y
yum install openssh-clients -y

修改ssh配置文件 

vi /etc/ssh/sshd_config
# 使配置生效
systemctl start sshd

退出容器,将修改后的容器打包成新的镜像

docker commit -a "jale" -m "basic server" serverbase centos:serverbase
# -m:提交说明(类似 Git 的 commit message)。
# -a:指定作者信息(可选)。
# <容器ID或名称>:通过 docker ps -a 查看。
# <新镜像名称>:<标签>:自定义镜像名称和版本

4. IP问题

查看docker的网络(默认使用桥接模式)

Docker 默认创建的 bridge 网络使用子网 172.17.0.0/16。第一个容器通常分配 172.17.0.2,后续容器依次递增(如 172.17.0.3172.17.0.4)。宿主机作为网关占用 172.17.0.1

Docker 内嵌的 IP 分配服务(类似 DHCP)动态分配 IP 地址。每次容器启动时,Docker 会从可用 IP 池中选择一个未被占用的地址。

docker network ls

固定ip分配

(1)自定义桥接网络

docker network create --subnet=192.168.100.0/24 my_bridge
# --subnet 指定一个docker网段,要和docker自建的不同
# my_bridge 自定义网络名称

再次查看已有网络

5. 集群节点配置

5.1 创建节点

按照原本设定,创建3个节点,节点命名最好不要有下划线或特殊字符

docker run -d \ --name hadoop102 \ --hostname hadoop102 \--net bigdatadockernetwork \--ip 192.168.10.102 \-p 10200:22 \-p 10201:8020 \-p 10202:9870 \-p 10203:2181 \-p 10204:9092 \-p 10205:8081 \-p 10206:16010 \-p 10207:7030 \--privileged \centos:serverbase \/usr/sbin/init# -d:以“分离模式”(后台)运行容器。
# --name hadoop102:将容器命名为 hadoop102,便于后续管理(如启动/停止)。
# --hostname hadoop102:设置容器内部的主机名为 hadoop102,容器内进程(如 Hadoop 服务)会识别此主机名。
# --net bigdatadockernetwork:将容器连接到名为 bigdatadockernetwork 的自定义 Docker 网络
# --ip 192.168.10.102:为容器分配静态 IP 地址 192.168.10.102(需网络支持自定义 IP)。
# 端口映射 (-p):将宿主机的端口映射到容器内部端口,格式为 -p <宿主机端口>:<容器端口>:
# --privileged:赋予容器特权模式,允许访问宿主机的设备(如内核模块),通常用于需要系统级权限的服务(如某些 Hadoop 组件依赖此选项)。
# centos:serverbase:使用的镜像名称,基于 CentOS 并预装了基础服务(如 systemd,因为启动命令是 /usr/sbin/init)。
# /usr/sbin/init:容器启动时运行的进程,这里是 systemd 的初始化系统

测试IP地址是否能连通

# 进入容器
docker exec -it hadoop102 bash
# 查看IP地址
ifconfig

# ping通外网
ping www.baidu.com

# ping通宿主机ping <宿主机ip>

依次创建节点hadoop103,hadoop104

# hadoop103
docker run -d --name hadoop103 --hostname hadoop103 --net bigdatadockernetwork --ip 192.168.10.103 -p 10300:22 -p 10301:8020 -p 10303:2181 -p 10304:9092 -p 10305:8081 -p 10306:16010 -p 10307:7040 --privileged centos:serverbase /usr/sbin/init
# hadoop104
docker run -d --name hadoop104 --hostname hadoop104 --net bigdatadockernetwork --ip 192.168.10.104 -p 10400:22 -p 10401:8020 -p 10402:9868 -p 10403:2181 -p 10404:9092 -p 10405:8081 -p 10406:16010 --privileged centos:serverbase /usr/sbin/init

修改节点root用户密码

# 依次进入3个容器docker exec -it hadoop102 bash
# 修改密码passwd

5.2 配置主机名称使容器之间可以相互识别

分别修改三个容器中的/etc/bashrc文件,使容器每次启动时检查hosts文件中是否有对应的映射,没有则添加

# hadoop102
result=$(cat /etc/hosts | grep ".*192.168.10.102.*hadoop102.*")
if [[ "$result" = "" ]]
thenecho "192.168.10.102 hadoop102" >> /etc/hosts
fi# hadoop103
result=$(cat /etc/hosts | grep ".*192.168.10.103.*hadoop103.*")
if [[ "$result" = "" ]]
thenecho "192.168.10.103 hadoop103" >> /etc/hosts
fi# hadoop104
result=$(cat /etc/hosts | grep ".*192.168.10.104.*hadoop104.*")
if [[ "$result" = "" ]]
thenecho "192.168.10.104 hadoop104" >> /etc/hosts
fi# 设置ll命令
alias ll="ls -alF"

修改完执行

source /etc/bashrc

在自己电脑的hosts文件中配置域名解析(Windows系统C:\Windows\System32\drivers\etc)

# 添加以下内容
宿主机ip hadoop102
宿主机ip hadoop103
宿主机ip hadoop104

5.3 容器自启动

# 容器自启动
docker update --restart=always hadoop102# 关闭容器自启动
docker update --restart=no hadoop102

重启docker检查

# 停止所有容器docker stop $(docker ps -aq)
# 重启dockersudo systemctl restart docker
# 查看运行中的容器docker ps

5.4 ssh免密登录

以hadoop102为例:

# 产生密钥对,长度为4096,一直回车即可
ssh-keygen -t rsa -b 4096

# 复制公钥给hadoop102,hadoop103,hadoop104,填yes和对应容器密码即可
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

5.5 集群时区修改与时间同步

5.5.1 时区修改

# 查看当前时间(CentOS默认时区非东八区)
date
# 查看节点服务器时间时区
timedatectl
# 修改时区
timedatectl set-timezone Asia/Shanghai
#修改后可再查看时区

5.5.2 时间同步

# 下载chrony
yum -y install chrony
# 启动chrony
systemctl start chronyd
# 设置自启动
systemctl enable chronyd
# 修改配置
vi /etc/chrony.conf
# Allow NTP client access from local network.
allow 0.0.0.0/0# Serve time even if not synchronized to a time source.
local stratum 10

allow 0.0.0.0/0:允许 任何 IP 地址(0.0.0.0/0) 的客户端访问此 NTP 服务器,同步时间。

local stratum 10:即使 NTP 服务器未同步到任何上游时间源(如互联网 NTP 服务器),也允许作为时间源对外提供服务,并声明自己的 stratum(层级)为 10。

 在hadoop103,hadoop104上下载chrony,启动服务,设置自启动,修改配置

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
pool hadoop102 iburst
# 使用 自定义的 NTP 服务器池(hadoop102)作为时间源,并启用 iburst 加速同步

查看chrony服务运行和同步节点信息

chronyc activity
chronyc tracking

5.6 防火墙管理

对三个容器做以下操作

# 下载防火墙
yum install firewalld firewall-config
# 停止防火墙
systemctl stop firewalld
# 关闭防火墙自启动
systemctl disable firewalld

以上内容参考https://blog.csdn.net/weixin_41878387/article/details/127972541?spm=1001.2014.3001.5506

十分感谢!

6. 复制安装包到容器中

如果创建时绑定挂载某个宿主机路径,则可以将安装包传入该路径

或者在容器中直接联网下载安装包

我的情况是容器已经创建好了,安装包是本地上传的,所以需要先将安装包上传到宿主机中,然后从宿主机复制到容器中进行安装

# 创建普通用户
adduser <name>
# 设置密码
passwd <name>
# 安装sudo
yum install sudo
# 修改普通用户sudo权限
vim sudoers

从宿主机将安装包文件复制到容器中

 docker cp /opt/software/ hadoop102:/opt/
docker cp <宿主机路径> <容器名称或id>:<容器路径>

还有一种方式,使用dockerfile:把现有容器保存成镜像,在dockerfile中继承这个镜像并构建新的镜像,然后基于新镜像创建容器。把dockerfile和安装包放在宿主机的同一目录下,然后编写dockerfile并在该目录下进行。

我的理解,镜像像是原来在VMware中设置的快照,可以把当前容器的状态保存下来,就可以实现像github版本管理一样管理不同时期的容器,出错了也可以回退,只需要基于之前某一状态的的镜像生成新的容器即可。


文章转载自:

http://XyGVt4Sm.kfstq.cn
http://1VAJAyfp.kfstq.cn
http://t6tNqm6o.kfstq.cn
http://IOSXH6Mi.kfstq.cn
http://j1LxSb0P.kfstq.cn
http://66Qazhtx.kfstq.cn
http://LXnUbNQq.kfstq.cn
http://9QzdngqC.kfstq.cn
http://HopgoHws.kfstq.cn
http://g1P1UvJp.kfstq.cn
http://5unzpHW1.kfstq.cn
http://FolpXP3W.kfstq.cn
http://aR2yVdtY.kfstq.cn
http://HD7ehdYp.kfstq.cn
http://hPnMBoxl.kfstq.cn
http://yB61xEA7.kfstq.cn
http://cppsb8wc.kfstq.cn
http://231QWF6d.kfstq.cn
http://G8gLAp8z.kfstq.cn
http://YyMQLzzX.kfstq.cn
http://3qNT2mKM.kfstq.cn
http://C0a2gKrR.kfstq.cn
http://rDiycUlv.kfstq.cn
http://O3tyh4At.kfstq.cn
http://1uLa6JGr.kfstq.cn
http://QNiTeWtx.kfstq.cn
http://ApRDvcSF.kfstq.cn
http://c8c6xpMe.kfstq.cn
http://E6hJQZby.kfstq.cn
http://3YDLaoeU.kfstq.cn
http://www.dtcms.com/a/374435.html

相关文章:

  • 【华为OD】微服务的集成测试
  • Tool | UI/BI类网址收录
  • 计算机视觉(opencv)——基于模板匹配的身份证号识别系统
  • 腾讯推出AI CLI工具CodeBuddy,国内首家同时支持插件、IDE和CLI三种形态的AI编程工具厂商
  • 前后端联调时出现的一些问题记录
  • 网络编程;套接字;TCP通讯;UDP通讯;0909
  • 最后一公里文件传输难题Localsend+cpolar破解
  • Windows 命令行:cd 命令3,当前目录,父目录,根目录
  • 医疗连续体机器人模块化控制界面设计与Python库应用研究(下)
  • Nginx 优化与防盗链
  • Spring Web 异步响应实战:从 CompletableFuture 到 ResponseBodyEmitter 的全链路优化
  • Linux基础命令使用
  • 第二章、PyTorch 入门笔记:从张量基本操作到线性回归实战
  • 【参数详解与使用指南】PyTorch MNIST数据集加载
  • Ruoyi-vue-plus-5.x第六篇Web开发与前后端交互: 6.4 WebSocket实时通信
  • vlan(局部虚拟网)
  • MissionPlanner架构梳理之(十)-参数编辑器
  • Hadoop Windows客户端配置与实践指南
  • 【NVIDIA-B200】 ‘CUDA driver version is insufficient for CUDA runtime version‘
  • 从源码视角全面解析 Chrome UI 布局系统及 Views 框架的定制化实现方法与实践经验
  • 9.9 ajax的请求和封装
  • CTFshow系列——PHP特性Web101-104
  • MCP学习一——UV安装使用教程
  • 【Java实战㊳】Spring Boot实战:从打包到监控的全链路攻略
  • Go语言实战案例-开发一个Markdown转HTML工具
  • idea、服务器、数据库环境时区不一致问题
  • HarmonyOS 5.1.1版本图片上传功能
  • 2025最新超详细FreeRTOS入门教程:第八章 FreeRTOS任务通知
  • Puter+CPolar低成本替代商业网盘,打造私有云新势力
  • Deepoc科技之暖:智能助盲设备如何为视障家人点亮生活