在阿里云服务器,基于docker手动配置spark集群、HDFS

配置spark集群的方式当前最简单的方式是采用docker-compose,但这里采用最麻烦的手动配置,目的只是为了熟悉配置过程

在阿里云上开启了三个docker,虚拟三个节点;节点间通过ssh免密通信;

三个节点一起组成HDFS和spark集群




一台服务器设置4个es节点 四台服务器集群成一台_spark



1、制作自定义centos镜像

1.1 原始镜像下载

首先docker拉取一个centos7(注意版本,如果是默认版本的centos8,ssh存在点问题)

启动镜像,取名hadoop


docker pull centos:centos7
docker run -i -t --name hadoop centos7 /bin/bash


1.2 下载包

在宿主机下:


"Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie"


tar zxvf解压所有包,然后docker cp所有的解压后的文件夹到hadoop docker中,例如(hadoop即之前创建的docker)


docker cp ../software/ hadoop:/home/


这样在hadoop容器的/home/software里面就有四个软件


[root@iZbp1ffiy6dvemkvvfddykZ software


1.3 配置jdk、scala、hadoop

进入hadoop docker中


exec -it hadoop /bin/bash


vi /etc/profile 并在文件末尾添加配置信息:


JAVA_HOME


vi ~/.bashrc 并在文件末尾添加


export


vi etc/hadoop/hadoop-env.sh,在末尾添加


export


使配置生效


source /etc/profile


检查配置是否成功


java -version
scala -version
hadoop version


1.4 配置ssh


# 安装ssh
yum install openssh-clients
yum install openssh-server


1.5 提交镜像


"centos7 with hadoop and ssh" e9d7 centos7-hadoop-sshtest


为了让ssh自动启动,需要编写dockerfile,在宿主机的任意位置:


cd centos7-hadoop-ssh
vi Dockerfile


添加内容


# 选择一个已有的os镜像作为基础r
FROM centos7-hadoop-sshtest


最后构建镜像


docker build -t centos7-hadoop-ssh .


此时通过docker images就可以看到构建成功的镜像了

2、搭建集群

2.1 集群架构

注意:以下的所有左侧端口都需要在阿里云服务器的安全组中添加

  • docker0 : hadoop0
  • 主节点
  • 192.168.2.10
  • 端口映射(宿主端口/docker端口)
  • 8080/8080:spark web UI
  • 8081/8081:spark worker UI
  • 9870/9870:HDFS web UI
  • 50070/50070:
  • docker1 : hadoop1
  • 从节点
  • 192.168.2.11
  • 端口映射(宿主端口/docker端口)
  • 4040/4040:spark Job
  • 8082/8081:spark worker1 UI
  • docker2 : hadoop2
  • 从节点
  • 192.168.2.12
  • 端口映射(宿主端口/docker端口)
  • 4041/4040:spark Job
  • 8083/8081:spark worker21 UI

2.2 网络配置

主机间的通信需要在一个网段,使用


=192.168.2.0/24 hadoop-net
docker network ls


创建网段

2.3 启动


=


启动后用docker ps检查

2.4 ssh免密配置


exec -it hadoop0 /bin/bash
docker


开启所有节点;对于三个docker,全部进行以下配置:

  • (1)vi /etc/hosts
192.168.2.10    hadoop0
192.168.2.11    hadoop1
192.168.2.12    hadoop2


  • (2)配置密码
#输入密码


  • (3)ssh
StrictHostKeyChecking


最后,docker间ssh检测配置是否成功

如在hadoop0中输入ssh hadoop1,保证不输入密码能够进入hadoop1

2.5 HDFS配置

hadoop0

cd /home/software/hadoop-3.2.1/etc/hadoop

当前目录下,HDFS中6个重要的配置文件:

  1. core-site.xml:Hadoop全局的配置文件,也包含一些HDFS的宏观配置。
  2. dfs-site.xml:HDFS配置文件。
  3. yarn-site.xml:YARN配置文件。
  4. mapred-sie.xml:MapReduce配置文件。
  5. slaves:从节点列表。
  6. hadoop-env.sh:与运行脚本的环境变量相关的配置文件。

1、core-site.xml


<configuration>


2、hdfs-site.xml

namenode和datanode地址,副本数


<configuration>


3、yarn-site.xml


<configuration>


4、mapred-site.xml


<configuration>


5、start-dfs.sh和stop-dfs.sh

在最前面添加


#!/usr/bin/env bash


6、start-yarn.sh和stop-yarn.sh


#!/usr/bin/env bash


7、重启hadoop

/home/software/hadoop-3.2.1/sbin/start-all.sh

jps查看是否成功

8、slaves

vi slaves修改为


hadoop1
hadoop2


9、复制hadoop目录到其他docker


scp  -rq /home/software/hadoop-3.2.1   hadoop1:/home/software
scp  -rq  /home/software/hadoop-3.2.1   hadoop2:/home/software


10、格式化HDFS


/home/software/hadoop-3.2.1/bin/hdfs namenode -format


最后启动HDFS


# 在hdoop0上:


使用jps查看是否成功

此时web打开 {阿里云公网ip:9879},即hdfs的namenode界面

3、spark

在hadoop0中:


/home/software/spark-3.0.1-bin-hadoop3.2/sbin/start-master.sh


在hadoop1和hadoop2中


/home/software/spark-3.0.1-bin-hadoop3.2/sbin/start-master.sh spark://hadoop0:7077


此时访问 {阿里云公网ip:8080}即可访问spark web ui

由于之前我们对各个worker节点的8081端口,也就是worker ui端口作了映射;

如hadoop1的8081端口映射到了宿主机8082,因此通过{阿里云公网ip:8081}即可访问worker1的web界面,同理worker2为{阿里云公网ip:8082}

4、测试

在hadoop1上执行


100


{阿里云公网ip:8080}可以看到spark执行情况

打开{阿里云公网ip:8081},可以看到worker1的执行情况

打开{阿里云公网ip:8082},可以看到worker2的执行情况

打开{阿里云公网ip:4040},可以看到Job UI(因为这里是在hadoop1上提交,故4040,若是hadoop2,则应该是4041)

打开{阿里云公网ip:9870},可以看到HDFS的界面