在阿里云服务器,基于docker手动配置spark集群、HDFS
配置spark集群的方式当前最简单的方式是采用docker-compose,但这里采用最麻烦的手动配置,目的只是为了熟悉配置过程
在阿里云上开启了三个docker,虚拟三个节点;节点间通过ssh免密通信;
三个节点一起组成HDFS和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个重要的配置文件:
- core-site.xml:Hadoop全局的配置文件,也包含一些HDFS的宏观配置。
- dfs-site.xml:HDFS配置文件。
- yarn-site.xml:YARN配置文件。
- mapred-sie.xml:MapReduce配置文件。
- slaves:从节点列表。
- 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的界面