提示:本部分教程将指导您在Docker容器中构建一个Spark集群,包括配置主节点和工作节点。
文章目录
第四章:在 ubuntu 上安装 docker
1.创建课程文件夹及所需目录和文件:
mkdir -p 课程文件夹/{opt,sm,sw1,sw2}
2.创建 hosts 文件:
cd 课程文件夹
touch hosts
在hosts文件中添加集群节点的IP和主机名:
127.0.0.1 localhost
172.19.0.2 sm
172.19.0.3 sw1
172.19.0.4 sw2
这些IP地址对应Docker网络中的容器IP,确保在创建Docker网络时指定了这些IP,或者使用Docker的静态IP分配。
将 hosts 文件复制到各节点目录:
sudocp /课程文件夹/hosts /课程文件夹/sm/hosts
sudocp /课程文件夹/hosts /课程文件夹/sw1/hosts
sudocp /课程文件夹/hosts /课程文件夹/sw2/hosts
3.在opt目录下安装必要的软件,拥有足够的权限(需要用到 sudo)
将以下软件安装包下载并放置到opt目录下:
Anaconda(或Miniconda)
Hadoop 3.3.4
JDK 1.8.0_351
Spark 3.3.1(与Hadoop 3兼容的版本)
确保已安装必要的工具:
cd opt
sudoapt update
sudoaptinstall -y wgetcurltar
(1)安装 Miniconda3
下载 Miniconda3 安装包
sudowget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O Miniconda3.sh
安装 Miniconda3
sudobash Miniconda3.sh -b -p /课程文件夹/opt/conda/miniconda3
-b 表示静默安装,-p /opt/miniconda3 指定安装路径为 /opt/conda/miniconda3
(2) 安装 JDK(方法众多)
通过 Oracle 官网手动下载,登录 Oracle 账号,选择正确的安装包。
把JDK 安装包导入到wsl中的课程文件夹/opt:
打开文件资源管理器
找到opt,直接复制过来opt中:
提示:复制内容到 WSL(可使用 chmod 命令修改 WSL 文件夹权限,完成 Windows 资源管理器内的拖拽复制)
解压 JDK 文件:
mkdir -p /opt/jdk
tar -zxvf jdk-8u351-linux-x64.tar.gz -C /课程文件夹/opt/jdk
(3)安装 Hadoop
下载 Hadoop 安装包
sudowget https://downloads.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
解压 Hadoop 安装包
sudomkdir -p /opt/hadoop
sudotar -zxvf hadoop-3.3.4.tar.gz -C /课程文件夹/opt/hadoop
Hadoop 安装路径为 /opt/hadoop/hadoop-3.3.4
(4)安装 Spark
下载 Spark 安装包
sudowget https://downloads.apache.org/spark/spark-3.3.1/spark-3.3.1-bin-hadoop3.tgz
解压 Spark 安装包
sudomkdir -p /opt/spark
sudotar -zxvf spark-3.3.1-bin-hadoop3.tgz -C /课程文件夹/opt/spark
Spark 安装路径为 /opt/spark/spark-3.3.1-bin-hadoop3
(5)
安装完成后,可以删除下载的安装包以释放空间:
rm -f Miniconda3.sh
rm -f jdk-8u351-linux-x64.tar.gz
rm -f hadoop-3.3.4.tar.gz
rm -f spark-3.3.1-bin-hadoop3.tgz
目录文件结构:
(6)将 opt 目录中的子目录或文件分别复制到 sm、sw1 和 sw2 目录中:
cp -r /课程文件夹/opt/* /课程文件夹/sm/
cp -r /课程文件夹/opt/* /课程文件夹/sw1/
cp -r /课程文件夹/opt/* /课程文件夹/sw2/
4.创建环境变量 .bashrc
nano /课程文件夹/.bashrc
添加以下内容,根据目录结构配置环境变量:
#!/bin/bash# 公共环境变量exportJAVA_HOME=/root/jdk/jdk1.8.0_351
exportPATH=$JAVA_HOME/bin:$PATHexportHADOOP_HOME=/root/hadoop/hadoop-3.3.4
exportPATH=$HADOOP_HOME/bin:$PATHexportSPARK_HOME=/root/spark/spark-3.3.1-bin-hadoop3
exportPATH=$SPARK_HOME/bin:$PATHexportCONDA_HOME=/root/conda/miniconda3
exportPATH=$CONDA_HOME/bin:$PATH# 打印已配置的环境变量以验证echo"JAVA_HOME=$JAVA_HOME"echo"HADOOP_HOME=$HADOOP_HOME"echo"SPARK_HOME=$SPARK_HOME"echo"PATH=$PATH"
环境变量路径:
JAVA_HOME:指向 sm、sw1、sw2 节点挂载的 jdk 目录。
HADOOP_HOME:指向各节点的 hadoop 目录。
SPARK_HOME:指向各节点的 spark 目录。
CONDA_HOME:指向各节点的 conda 目录。
动态打印:
脚本会打印出配置的环境变量值,便于验证配置是否正确。
复制到各节点目录:
sudocp /课程文件夹/.bashrc /课程文件夹/sm/.bashrc
sudocp /课程文件夹/.bashrc /课程文件夹/sw1/.bashrc
sudocp /课程文件夹/.bashrc /课程文件夹/sw2/.bashrc
5.配置SSH服务
nano /课程文件夹/sshd_config
编辑sshd_config文件,添加以下内容:
Include /etc/ssh/sshd_config.d/*.conf
# 启用公钥认证
PubkeyAuthentication yes# 禁用密码认证
PasswordAuthentication no
# 允许 root 用户登录
PermitRootLogin yes
KbdInteractiveAuthentication no
UsePAM no
Subsystem sftp /usr/lib/openssh/sftp-server
这些配置确保了容器内SSH服务可以使用公钥认证,并允许root用户登录
复制到各节点目录:
sudocp /课程文件夹/sshd_config /课程文件夹/sm/sshd_config
sudocp /课程文件夹/sshd_config /课程文件夹/sw1/sshd_config
sudocp /课程文件夹/sshd_config /课程文件夹/sw2/sshd_config
查看目录:
6.启动docker sm:
在启动容器时,挂载 .bashrc、sshd_config 和 hosts 文件到容器中。
sudo docker run --rm -it \
--name sm \
--hostname sm \
--net spark_network \
--volume /课程文件夹/sm:/root \
--volume /课程文件夹/sm/.bashrc:/root/.bashrc \
--volume /课程文件夹/sm/sshd_config:/etc/ssh/sshd_config \
--volume /课程文件夹/sm/hosts:/etc/hosts \
cc /bin/bash -c "source ~/.bashrc && service ssh start && /bin/bash"
解释命令
- sudo docker run 启动一个新的 Docker 容器。
- –rm 在容器停止运行后,自动删除容器,避免占用存储空间。
- -it -i:保持容器的标准输入流打开,便于交互。 -t:为容器分配一个伪终端。 这两个选项一起让容器进入交互式模式,可以手动操作容器。
- –name sm 设置容器的名称为 sm,便于标识和管理。
- –hostname sm 设置容器内部的主机名为 sm,便于容器内程序(如 SSH 或 Spark)识别自己的节点名称。
- –net spark_network 将容器加入名为 spark_network 的 Docker 网络,允许容器间通信。 spark_network 是一个自定义网络,需提前创建,创建请参考 WSL中搭建SPARK平台(上)
- –volume /课程文件夹/sm:/root 挂载主机目录 /课程文件夹/sm 到容器内的 /root 目录。 容器内的 /root 目录会包含主机的 sm 子目录内容,如 conda、hadoop、jdk、spark 等文件夹。
- –volume /课程文件夹/sm/.bashrc:/root/.bashrc 将主机上的 .bashrc 文件挂载到容器的 /root/.bashrc 中。 容器内的用户会自动加载这个文件中的环境变量配置,例如 JAVA_HOME、HADOOP_HOME 等。
- –volume /课程文件夹/sm/sshd_config:/etc/ssh/sshd_config 将主机上的 sshd_config 文件挂载到容器的 /etc/ssh/sshd_config 中。 配置 SSH 服务的参数,例如是否允许密码登录、是否允许 root 用户登录等。
- –volume /课程文件夹/sm/hosts:/etc/hosts 将主机上的 hosts 文件挂载到容器的 /etc/hosts 中。 配置主机名到 IP 地址的映射,便于容器内的程序通过主机名互相通信。
- cc 指定要运行的 Docker 镜像名为 cc。 该镜像需要提前构建,包含基础依赖。创建请参考 WSL中搭建SPARK平台(上)
- /bin/bash -c “source ~/.bashrc && service ssh start && /bin/bash” 容器启动后的运行命令,分为以下几个部分: source ~/.bashrc: 加载 .bashrc 文件,配置环境变量。 service ssh start: 启动 SSH 服务,允许容器接收远程登录请求。 /bin/bash: 启动一个交互式 Bash Shell,保持容器运行并允许用户操作。
验证环境配置:
验证 SSH 配置:
验证 hosts 文件:
接下来就是在容器内生成 SSH 密钥,并测试免密登录,并配置hadoop和spark的配置文件,最终启动 Spark 集群。
版权归原作者 是纯一呀 所有, 如有侵权,请联系我们删除。