一、环境
系统版本 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 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/
在从容器外部进行cp
docker cp CentOS7-Base.repo 镜像id:/etc/yum.repos.d/
yum clean all
yum makecache fast
# 下载sshd服务
yum -y install openssl-devel net-tools openssl-server openssl initscripts openssh-server sudo
# 开启sshd服务
sudo systemctl daemon-reload
service sshd start
ss -tan
vim /etc/ssh/sshd_config #找到permitrootlogin yes,取消注释 保存退出,和ubuntu操作一样
echo 123456 | passwd --stdin root
exit
制作centos7-sshd:v1镜像
docker commit xxx(运行的容器id) centos7-sshd:v1
查看制作的centos7-sshd:v1
docker ps -
运行centos7-sshd:v1镜像
docker run -itd --name centos-ssh-test --privileged=true -p 5022:22 centos7-sshd:v1 /usr/sbin/init
打开xshell工具,连接centos-ssh-test容器,端口号5022
用户名root 密码123456
三、使用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
运行dockerfile文件
docker build -t hadoop:v1 -f dockerfile-hadoop-v1 . #注意有个点,表示本地文件运行
编译时间长,需耐心等等
四、创建docker桥接网络
dockerfile构建镜像成功后,创建docker 网络
docker network create --driver bridge hadoop-br
依据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
进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
分别在3台容器上各自修改主机名
hostname hadoop01
bash
hostname hadoop02
bash
hostname hadoop03
bash
分别在3台容器上各自修改hosts映射文件
vim /etc/hosts
-------------添加-------------
172.18.0.2 hadoop01
172.18.0.3 hadoop02
172.18.0.4 hadoop03
五、脚本配置免密登录
准备好脚本文件fgssh
将文件拷贝到容器内部hadoop01上
docker cp fgssh 2879723a7b13:/root
查看文件是否拷贝成功,并对脚本加权限
chmod +x fgssh
执行脚本
./fgssh -user root -hosts "hadoop01 hadoop02 hadoop03" -advanced -exverify -confirm
脚本运行期间会要求输入以下文字
yes
或者主机密码
按要求输入后即可
六、配置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
七、更改Hadoop配置
cd /opt/bigdata/hadoop/etc/hadoop
vim workers
-------------
添加
hadoop01
hadoop02
hadoop03
--------------
cat workers
注意这几个文件的配置,非常重要
#节点
workers
#环境
hadoop-env.sh
#核心配置
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
查看hadoop集群环境变量配置
vim hadoop-env.sh
查看hadoop核心配置
vim core-site.xml
vim hdfs-site.xml
vim mapred-site.xml
vim yarn-site.xml
同步文件
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
在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
九、启动集群服务
启动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
访问hdfs页面
192.168.80.28:50070
将hadoop02、hadoop03依次启动
sbin/hadoop-daemon.sh start datanode
sbin/hadoop-daemon.sh start namenode
启动YARN服务
在hadoop01机器上
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
访问yarn页面
http://192.168.80.28:8088/
启动另外俩台yarn服务
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
再次查看集群已正常
跑一个圆周率程序测试下
hadoop jar /opt/bigdata/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar pi 16 1000
测试集群调度数据是否正常
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
可以在hdfs网页查看数据目录
查看yarn执行状况
下载数据结果文件
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
--------------------------
至此,本次hadoop集群测试实验OK ❤❤❤❤❤