一、环境

系统版本   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

第二十四节  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/

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

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

yum clean all 
yum makecache fast

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

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

第二十四节  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

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

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

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

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

查看制作的centos7-sshd:v1
docker ps -

第二十四节  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

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

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

第二十四节  docker构建hadoop集群_hadoop_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

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

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

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

四、创建docker桥接网络

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

第二十四节  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

第二十四节  docker构建hadoop集群_xml_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

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

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

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

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

hostname hadoop02
bash

hostname hadoop03
bash

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

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

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

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

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

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

五、脚本配置免密登录

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

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

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

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

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

脚本运行期间会要求输入以下文字
yes
或者主机密码
按要求输入后即可

第二十四节  docker构建hadoop集群_docker_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 

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

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

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

七、更改Hadoop配置

cd /opt/bigdata/hadoop/etc/hadoop
vim workers
-------------
添加
hadoop01
hadoop02
hadoop03
--------------
cat  workers

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

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

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

#节点

workers

#环境

hadoop-env.sh

#核心配置

core-site.xml

hdfs-site.xml

mapred-site.xml

yarn-site.xml

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

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

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

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

vim  hdfs-site.xml

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

vim mapred-site.xml

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

vim yarn-site.xml

第二十四节  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

第二十四节  docker构建hadoop集群_docker_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

八、格式化集群

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

执行格式化
bin/hdfs namenode -format

第二十四节  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 

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

访问hdfs页面
192.168.80.28:50070

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


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

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

sbin/hadoop-daemon.sh start namenode

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


启动YARN服务

在hadoop01机器上
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager

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

访问yarn页面
http://192.168.80.28:8088/

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

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

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

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

再次查看集群已正常

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

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

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

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

第二十四节  docker构建hadoop集群_hadoop_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

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

第二十四节  docker构建hadoop集群_hadoop_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
--------------------------

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

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

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