一、环境

系统版本   centos7.6

docker版本   Docker version 20.10.10


准备文件:

hadoop-3.3.1.tar.gz   #hadoop安装包

hadoopfiles.tar.gz     #hadoop内部各种配置文件

jdk1.8.0_201.tar.gz    #安装java环境

二、制作shh容器

拉取centos:7镜像

docker pull centos:7
  • 1.

第二十四节  docker构建hadoop集群_docker

运行容器
docker run -d --name centos7 --privileged=true centos:7 /usr/sbin/init

进容器
docker exec -it centos7 /bin/bash
--------------
更换centos7的源
cd /etc/yum.repos.d
mkdir yumbak
把里面的repo进行备份 
mv CentOS-* yumbak/
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

第二十四节  docker构建hadoop集群_xml_02

在从容器外部进行cp 
docker cp CentOS7-Base.repo 镜像id:/etc/yum.repos.d/

yum clean all 
yum makecache fast
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

第二十四节  docker构建hadoop集群_xml_03

# 下载sshd服务
yum -y install openssl-devel net-tools openssl-server openssl initscripts  openssh-server  sudo  
  • 1.
  • 2.

第二十四节  docker构建hadoop集群_xml_04

# 开启sshd服务
sudo systemctl daemon-reload
service sshd start
ss -tan
vim /etc/ssh/sshd_config  #找到permitrootlogin yes,取消注释 保存退出,和ubuntu操作一样

echo 123456 | passwd --stdin root
exit
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

第二十四节  docker构建hadoop集群_docker_05

第二十四节  docker构建hadoop集群_docker_06

第二十四节  docker构建hadoop集群_xml_07

制作centos7-sshd:v1镜像
docker commit   xxx(运行的容器id)  centos7-sshd:v1

查看制作的centos7-sshd:v1
docker ps -
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

第二十四节  docker构建hadoop集群_xml_08

运行centos7-sshd:v1镜像
docker run -itd --name centos-ssh-test --privileged=true -p 5022:22 centos7-sshd:v1 /usr/sbin/init
  • 1.
  • 2.

第二十四节  docker构建hadoop集群_hadoop_09

打开xshell工具,连接centos-ssh-test容器,端口号5022
用户名root   密码123456
  • 1.
  • 2.

第二十四节  docker构建hadoop集群_xml_10

三、使用dockerfile编写Hadoop

mkdir -p /root/hadoop100
vim dockerfile-hadoop-v1
ls
-------------------------
# 使用基础镜像
FROM centos7-sshd:v1
MAINTAINER jc
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.huaweicloud.com/repository/conf/CentOS-7-anon.repo
RUN yum install lrzsz git subversion gpm unzip zip net-tools wget vim curl epel-release -y && \
 yum install -y gcc gcc-c++ make gd-devel libxml2-devel \
 libcurl-devel libjpeg-devel libpng-devel openssl-devel \
 libmcrypt-devel libxslt-devel libtidy-devel autoconf \
 iproute net-tools telnet wget curl && \
 yum clean all && \
 rm -rf /var/cache/yum/*
RUN mkdir -p /opt/bigdata
# 安装jdk
ADD jdk1.8.0_201.tar.gz /opt/bigdata
RUN mv /opt/bigdata/jdk1.8.0_201 /opt/bigdata/jdk
ENV JAVA_HOME /opt/bigdata/jdk
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
## 安装hadoop
ADD hadoop-3.3.1.tar.gz /opt/bigdata/
RUN mv /opt/bigdata/hadoop-3.3.1 /opt/bigdata/hadoop
ENV HADOOP_HOME /opt/bigdata/hadoop
ENV HADOOP_MAPRED_HOME /opt/bigdata/hadoop
ENV PATH $PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 配置 Hadoop
COPY core-site.xml /opt/bigdata/hadoop/etc/hadoop/
COPY hdfs-site.xml /opt/bigdata/hadoop/etc/hadoop/
COPY mapred-site.xml /opt/bigdata/hadoop/etc/hadoop/
COPY yarn-site.xml /opt/bigdata/hadoop/etc/hadoop/
COPY hadoop-env.sh /opt/bigdata/hadoop/etc/hadoop/
COPY yarn-env.sh /opt/bigdata/hadoop/etc/hadoop/
COPY mapred-env.sh /opt/bigdata/hadoop/etc/hadoop/
WORKDIR /opt/bigdata/hadoop
--------------------------------------
----------格式化-------
yum install dos2unix
dos2unix  dockerfile-hadoop-v1
  • 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.
  • 40.

第二十四节  docker构建hadoop集群_hadoop_11

运行dockerfile文件
docker build -t hadoop:v1  -f  dockerfile-hadoop-v1 .  #注意有个点,表示本地文件运行
编译时间长,需耐心等等
  • 1.
  • 2.
  • 3.

第二十四节  docker构建hadoop集群_hadoop_12

四、创建docker桥接网络

dockerfile构建镜像成功后,创建docker 网络
docker network create --driver bridge hadoop-br
  • 1.
  • 2.

第二十四节  docker构建hadoop集群_hadoop_13

依据hadoop:v1镜像,来运行3台hadoop容器,
hadoop01-----主节点master
hadoop02-----slave节点
hadoop03-----slave节点
docker run -itd --network hadoop-br --name hadoop01 -p 50070:50070 -p 8088:8088 -p 9000:9000 -p 16010:16010 -p 2181:2181 -p 8080:8080 -p 16000:16000 -p 9020:9020 -p 42239:42239 -p 60000:60000 -p 1022:22 -p 10000:10000 -p 10002:10002 --privileged=true hadoop:v1 /usr/sbin/init
docker run -itd --network hadoop-br --name hadoop02 -p 16020:16020 -p 2022:22 --privileged=true hadoop:v1 /usr/sbin/init
docker run -itd --network hadoop-br --name hadoop03 -p 3022:22 --privileged=true hadoop:v1 /usr/sbin/init
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

第二十四节  docker构建hadoop集群_docker_14

进3台容器,单独开会话窗口,方便操作
docker exec -it hadoop01 /bin/bash
docker exec -it hadoop02 /bin/bash
docker exec -it hadoop03 /bin/bash

查看容器IP
ifconfig
hadoop01   172.18.0.2
hadoop02   172.18.0.3
hadoop03   172.18.0.4
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

第二十四节  docker构建hadoop集群_hadoop_15

第二十四节  docker构建hadoop集群_hadoop_16

第二十四节  docker构建hadoop集群_xml_17

分别在3台容器上各自修改主机名
hostname hadoop01
bash

hostname hadoop02
bash

hostname hadoop03
bash
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

第二十四节  docker构建hadoop集群_docker_18

第二十四节  docker构建hadoop集群_xml_19

第二十四节  docker构建hadoop集群_hadoop_20

分别在3台容器上各自修改hosts映射文件
vim /etc/hosts
-------------添加-------------
172.18.0.2   hadoop01
172.18.0.3   hadoop02
172.18.0.4   hadoop03
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

第二十四节  docker构建hadoop集群_hadoop_21

第二十四节  docker构建hadoop集群_hadoop_22

五、脚本配置免密登录

准备好脚本文件fgssh
将文件拷贝到容器内部hadoop01上
docker cp fgssh 2879723a7b13:/root
  • 1.
  • 2.
  • 3.

第二十四节  docker构建hadoop集群_docker_23

查看文件是否拷贝成功,并对脚本加权限
chmod +x fgssh
  • 1.
  • 2.

第二十四节  docker构建hadoop集群_xml_24

执行脚本
./fgssh -user root -hosts "hadoop01 hadoop02 hadoop03" -advanced -exverify -confirm

脚本运行期间会要求输入以下文字
yes
或者主机密码
按要求输入后即可
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

第二十四节  docker构建hadoop集群_xml_25

六、配置JDK环境变量

vim /etc/profile
export JAVA_HOME=/opt/bigdata/jdk
export CLASSPATH=.$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/opt/bigdata/hadoop
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:${HADOOP_HOME}/bin

source /etc/profile


scp /etc/profile root@hadoop02:/etc
source /etc/profile
scp /etc/profile root@hadoop03:/etc
source /etc/profile

java -version
hadoop version 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

第二十四节  docker构建hadoop集群_docker_26

第二十四节  docker构建hadoop集群_hadoop_27

第二十四节  docker构建hadoop集群_hadoop_28

七、更改Hadoop配置

cd /opt/bigdata/hadoop/etc/hadoop
vim workers
-------------
添加
hadoop01
hadoop02
hadoop03
--------------
cat  workers
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

第二十四节  docker构建hadoop集群_hadoop_29

第二十四节  docker构建hadoop集群_hadoop_30

注意这几个文件的配置,非常重要

#节点

workers

#环境

hadoop-env.sh

#核心配置

core-site.xml

hdfs-site.xml

mapred-site.xml

yarn-site.xml

查看hadoop集群环境变量配置
vim hadoop-env.sh
  • 1.
  • 2.

第二十四节  docker构建hadoop集群_docker_31

查看hadoop核心配置
vim core-site.xml
  • 1.
  • 2.

第二十四节  docker构建hadoop集群_hadoop_32

vim  hdfs-site.xml
  • 1.

第二十四节  docker构建hadoop集群_hadoop_33

vim mapred-site.xml
  • 1.

第二十四节  docker构建hadoop集群_hadoop_34

vim yarn-site.xml
  • 1.

第二十四节  docker构建hadoop集群_docker_35

同步文件
scp  workers hadoop-env.sh  core-site.xml  hdfs-site.xml mapred-site.xml yarn-site.xml root@hadoop02:/opt/bigdata/hadoop/etc/hadoop
scp  workers hadoop-env.sh  core-site.xml  hdfs-site.xml mapred-site.xml yarn-site.xml root@hadoop02:/opt/bigdata/hadoop/etc/hadoop
  • 1.
  • 2.
  • 3.

第二十四节  docker构建hadoop集群_hadoop_36

在hadoop02中
cd /opt/bigdata/hadoop/etc/hadoop

在hadoop02中
cd /opt/bigdata/hadoop/etc/hadoop

查看这个几个文件的配置是否同步
cat workers
cat hadoop-env.sh
cat core-site.xml
cat hdfs-site.xml
cat mapred-site.xml
cat yarn-site.xml
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

八、格式化集群

cd ..
cd ..
pwd
/opt/bigdata/hadoop

执行格式化
bin/hdfs namenode -format
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

第二十四节  docker构建hadoop集群_hadoop_37

九、启动集群服务

启动HDFS服务

## 在hadoop01上启动服务
sbin/hadoop-daemon.sh start datanode
sbin/hadoop-daemon.sh start namenode

[root@hadoop01 hadoop]# jps
1381 NameNode
1270 DataNode
1418 Jps

查看端口
[root@hadoop01 hadoop]# netstat -nultp |grep 50070
tcp        0      0 0.0.0.0:50070 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

第二十四节  docker构建hadoop集群_hadoop_38

访问hdfs页面
192.168.80.28:50070
  • 1.
  • 2.

第二十四节  docker构建hadoop集群_hadoop_39


第二十四节  docker构建hadoop集群_docker_40

将hadoop02、hadoop03依次启动
sbin/hadoop-daemon.sh start datanode

sbin/hadoop-daemon.sh start namenode
  • 1.
  • 2.
  • 3.
  • 4.

第二十四节  docker构建hadoop集群_hadoop_41


启动YARN服务

在hadoop01机器上
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
  • 1.
  • 2.
  • 3.

第二十四节  docker构建hadoop集群_xml_42

访问yarn页面
http://192.168.80.28:8088/
  • 1.
  • 2.

第二十四节  docker构建hadoop集群_xml_43

第二十四节  docker构建hadoop集群_docker_44

第二十四节  docker构建hadoop集群_xml_45

启动另外俩台yarn服务
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
  • 1.
  • 2.
  • 3.

再次查看集群已正常

第二十四节  docker构建hadoop集群_xml_46

第二十四节  docker构建hadoop集群_docker_47

跑一个圆周率程序测试下
hadoop jar /opt/bigdata/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar  pi 16 1000
  • 1.
  • 2.

第二十四节  docker构建hadoop集群_hadoop_48

第二十四节  docker构建hadoop集群_docker_49

测试集群调度数据是否正常
mkdir file-test
造数据
----------------------
spark
spark
hive
hive
hive
hive
flink
flink
--------------------
在hdfs上新建文件夹目录
bin/hdfs dfs -mkdir /input
bin/hdfs dfs -ls /input
hdfs   dfs  -put file-test  /input
bin/hdfs dfs -ls /input


hdfs dfs -put file-test /input
hadoop jar /opt/bigdata/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input /output
hadoop jar /opt/bigdata/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input /output1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

第二十四节  docker构建hadoop集群_hadoop_50

第二十四节  docker构建hadoop集群_xml_51

可以在hdfs网页查看数据目录

第二十四节  docker构建hadoop集群_hadoop_52

查看yarn执行状况


第二十四节  docker构建hadoop集群_hadoop_53

下载数据结果文件
hdfs dfs -get /output1

-------------------------
[root@hadoop01 hadoop]# cd output1
[root@hadoop01 output1]# ll
total 4
-rw-r--r-- 1 root root 23 Aug 15 09:28 part-r-00000
-rw-r--r-- 1 root root  0 Aug 15 09:28 _SUCCESS
[root@hadoop01 output1]# cat part-r-00000
flink	2
hive	4
spark	2
--------------------------
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

第二十四节  docker构建hadoop集群_xml_54

第二十四节  docker构建hadoop集群_hadoop_55

至此,本次hadoop集群测试实验OK     ❤❤❤❤❤