使用docker部署Haoop集群

技术栈结构

1
2
3
4
5
6
7
8
# hadoop集群版本
hadoop-3.3.1
# java版本
OpenJDK8U-jdk_x64_linux_hotspot_8u322b06 # 清华源上下载
# centos版本
centos7
# docker版本
docker 20.10.12

网络ip分配

1
2
3
4
5
6
# 网络集群
172.18.0.0
# 采用一主两从搭建 hadoop完全分布式
masert 172.18.0.10
salver01 172.18.0.11
salver02 172.18.0.12

创建一个docker-ent 网络

1
docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 HadoopClusterEnt

构建hadoop+jdk+centos的镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# Dockerfile
FROM centos:7

# 镜像的作者
MAINTAINER long<[email protected]>

# 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no
RUN yum install -y openssh-server sudo
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
#安装openssh-clients
RUN yum install -y openssh-clients

# 添加测试用户root,密码root,并且将此用户添加到sudoers里
RUN echo "root:root" | chpasswd
RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# 启动sshd服务并且暴露22端口
RUN mkdir /var/run/sshd
EXPOSE 22

# 添加jdk和hadoop
ADD OpenJDK8U-jdk_x64_linux_hotspot_8u322b06.tar.gz /usr/local
ADD hadoop-3.3.1.tar.gz /usr/local

# 添加环境
ENV JAVA_HOME /usr/local/jdk8u322-b06
ENV HADOOP_HOME /usr/local/hadoop-3.3.1
ENV PATH $PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
EXPOSE 9870
EXPOSE 8088

CMD ["/usr/sbin/sshd", "-D"]
WORKDIR /usr/local
ENTRYPOINT /usr/sbin/init


# 构建 image
docker build -t long/centos-hadoop .

构建master、salver01、salver02容器

1
2
3
4
5
6
7
8
# master
docker run -d --name master --hostname master -p 9870:9870 -p 8088:8088 --network HadoopClusterEnt --ip 172.18.0.10 --privileged=true long/centos-hadoop

# salver01
docker run -d --name salver01 --hostname salver01 --network HadoopClusterEnt --ip 172.18.0.11 --privileged=true long/centos-hadoop

# salver02
docker run -d --name salver02 --hostname salver02 --network HadoopClusterEnt --ip 172.18.0.12 --privileged=true long/centos-hadoop

启动master、salver01、salver02容器

1
2
3
4
5
6
7
8
# 启动master
docker exec -it master /bin/bash

# 启动salver01
docker exec -it salver01 /bin/bash

# 启动salver02
docker exec -it salver02 /bin/bash

配置Hadoop集群

初始化Hadoop集群

启动Hadoop集群