先修篇

下载Docker可参考该博客的Docker安装
安装Docker可能遇到的一些问题可参考该博客的Docker安装问题

操作环境

  • windows : 10
  • Docker : 4.7.0
  • 将要拉取的镜像 : centos 7.6.1810

1. 安装centos 7.6镜像

1.1 搜索centos 7.6镜像

docker search centos7

在这里插入图片描述

1.2 拉取镜像

docker pull centos:7.6.1810

1.3 验证镜像安装成功

docker images

在这里插入图片描述

1.4 创建桥接网络(Docker默认使用桥接,此处亦使用桥接)

1.4.1 将网络名称命名为hadoop

docker network create -d bridge hadoop

1.4.2 查看网络hadoop

docker network inspect hadoop

在这里插入图片描述

1.5 运行镜像成容器

# 将本地目录A挂载至镜像centos:7.6.1810,并以特权模式在后台启动容器(命名为centos7)
docker run -v E:\COURSE\spark:/home -itd --privileged --name centos7 centos:7.6.1810 /usr/sbin/init

在这里插入图片描述
docker run参数

  • -v windows本地目录挂载至容器centos7的目录下
  • -itd 后台启动
  • –privileged 特权模式
  • –name 对容器起名
# 连接当前运行容器,获取bash
docker exec -it centos7 /bin/bash

2. 为搭建hadoop做准备

2.1 配置centos镜像

阿里centos 镜像源

2.1.1 备份

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2.1.2 下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

2.1.3 生成缓存

yum makecache

2.2 为root用户设置密码

yum -y install passwd
passwd root

在这里插入图片描述

2.3 安装工具

可不执行该语句

yum -y install vim passwd openssh-clients openssh-server net-tools

2.3.1 安装vim

yum install -y vim

2.2.2 安装open-ssh

yum install -y openssh-server openssh-clients

ssh-keygen命令常用选项:

  • -t TYPE:指定密钥加密类型
  • -P PASSWORD:指定私钥加密的密码,建议为空
  • -f FILENAME:指定密钥保存位置
  1. 配置ssh免密登录
ssh-keygen -t rsa -P ""
  1. 将公钥追加到authorized_keys 文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  1. 编辑文件/etc/ssh/sshd_config
vim /etc/ssh/sshd_config

PermitRootLogin yesPubkeyAuthentication yes的注释去掉
在这里插入图片描述
4. 设置 SSH 服务为自启动

systemctl enable sshd.service
  1. 启动 SSH 服务
systemctl start sshd.service
  1. 免密登录自己(验证ssh是否配置成功)
ssh 127.0.0.1

在这里插入图片描述

2.2.3 安装JAVA

方式一 使用yum源安装

yum search java| grep jdk
yum install -y java-1.8.0-openjdk*
2.2.3.1. 寻找JAVA安装位置

第二条和第三条命令中具体ls 哪个目录, 视上一步输出结果而定

which java
ls -lr /usr/bin/java
ls -lr /etc/alternatives/java

在这里插入图片描述

2.2.3.2 由①寻得java安装目录为/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/bin/java
2.2.3.3 配置有关java环境变量
vim /etc/profile

在末尾添加如下内容:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
2.2.3.4 验证
source /etc/profile
echo $JAVA_HOME

在这里插入图片描述

方式二 压缩包式安装

第一步 : Oracle JDK官网下载至(之前启动容器时挂载的目录A)

tar -zxvf /home/jdk-8u331-linux-x64.tar.gz -C /usr/local/
mv /usr/local/jdk-8u331-linux-x64 /usr/local/java

第二步 : 配置有关java环境变量

vim /etc/profile

在末尾添加如下内容:

export JAVA_HOME=/usr/local/java
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

第三步 : 验证

source /etc/profile
echo $JAVA_HOME

在这里插入图片描述

2.2.4 将hadoop3.2.2解压至/usr/local目录下

此前启动容器时,将目录A(E:\COURSE\spark文件夹)挂载至容器的/home下
hadoop-3.2.3.tar.gz清华镜像站

tar -zxvf /home/hadoop-3.2.2.tar.gz -C /usr/local/
mv /usr/local/hadoop-3.2.2 /usr/local/hadoop

3. 搭建hadoop集群

3.1 修改文件

3.1.1 /etc/profile

vim /etc/profile

在末尾添加如下内容:

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_COMMON_HOME=$HADOOP_HOME 
export HADOOP_PREFIX=$HADOOP_HOME 
export HADOOP_HDFS_HOME=$HADOOP_HOME 
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME 
export HADOOP_INSTALL=$HADOOP_HOME 
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 
export HADOOP_CONF_DIR=$HADOOP_HOME 
export HADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexec 
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop
export HDFS_DATANODE_USER=root
export HDFS_DATANODE_SECURE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export HDFS_NAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

使文件/etc/profile生效:

source /etc/profile

3.1.2 $HADOOP_HOME/etc/hadoop/hadoop-env.sh

vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh

在末尾添加如下内容:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

3.1.3 $HADOOP_HOME/etc/hadoop/core-site.xml

vim $HADOOP_HOME/etc/hadoop/core-site.xml

将原文件的<configuration></configuration>替换为如下内容:

<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://node01:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>      
        <value>/home/hadoop/tmp</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131702</value>
    </property>
</configuration>

3.1.4 $HADOOP_HOME/etc/hadoop/hdfs-site.xml

vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml

将原文件的<configuration></configuration>替换为如下内容:

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/hadoop/hdfs_name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/hadoop/hdfs_data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node01:9001</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
</configuration>

3.1.5 $HADOOP_HOME/etc/hadoop/mapred-site.xml

vim $HADOOP_HOME/etc/hadoop/mapred-site.xml

将原文件的<configuration></configuration>替换为如下内容:

<configuration>
	<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node01:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node01:19888</value>
    </property>
        <property>
        <name>mapreduce.application.classpath</name>
        <value>
            /usr/local/hadoop/etc/hadoop,
            /usr/local/hadoop/share/hadoop/common/*,
            /usr/local/hadoop/share/hadoop/common/lib/*,
            /usr/local/hadoop/share/hadoop/hdfs/*,
            /usr/local/hadoop/share/hadoop/hdfs/lib/*,
            /usr/local/hadoop/share/hadoop/mapreduce/*,
            /usr/local/hadoop/share/hadoop/mapreduce/lib/*,
            /usr/local/hadoop/share/hadoop/yarn/*,
            /usr/local/hadoop/share/hadoop/yarn/lib/*
        </value>
    </property>
</configuration>

3.1.6 $HADOOP_HOME/etc/hadoop/yarn-site.xml

vim $HADOOP_HOME/etc/hadoop/yarn-site.xml

将原文件的<configuration></configuration>替换为如下内容:

<configuration>
    <property>
  		<name>yarn.resourcemanager.hostname</name>
        <value>node01</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>node01:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>node01:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>node01:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>node01:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>node01:8088</value>
    </property>
</configuration>

3.1.7 $HADOOP_HOME/etc/hadoop/workers

vim $HADOOP_HOME/etc/hadoop/workers

将原文件的替换为如下内容:

node02
node03

3.2 从容器中保存镜像

# 当前容器 可使用命令 docker ps 查看镜像ID
docker commit -m “hadoop” -a “hadoop“ 当前容器 目标镜像

本人此处命令为

docker commit -m “Deploy Hadoop based on centos” -a “CMCST“ centos7 hadoop_centos

docker commit :从容器创建一个新的镜像。

语法

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明说明
-a提交的镜像作者;
-c使用Dockerfile指令来创建镜像;
-m提交时的说明文字;
-p在commit时,将容器暂停

3.3 启动hadoop

3.3.1 运行Master节点: node01
docker run -itd --privileged --network hadoop -h "node01" --name "node01" -p 9870:9870 -p 8088:8088 -p 50070:50070 -p 9001:9001 -p 8030:8030 -p 8031:8031 -p 8032:8032 hadoop_centos /usr/sbin/init
3.3.2 运行Worker节点: node02
docker run -itd --privileged --network hadoop -h "node02" --name "node02" hadoop_centos /usr/sbin/init
3.3.3 运行Worker节点: node03
docker run -itd --privileged --network hadoop -h "node03" --name "node03" hadoop_centos /usr/sbin/init
3.3.4 修改文件/etc/hosts

获取node01、node02、node03的terminal

分别打开三个cmd窗口,分别执行

docker exec -it node01 /bin/bash
docker exec -it node02 /bin/bash
docker exec -it node03 /bin/bash

获取node01、node02、node03的IP地址

docker network inspect 网络名称
docker network inspect hadoop

在这里插入图片描述

在node01、node02、node03中修改文件/etc/hosts

vim /etc/hosts

在文件首部添加如下内容

172.18.0.2 node01
172.18.0.3 node02
172.18.0.4 node03

3.3.4 格式化[node1下]

/usr/local/hadoop/bin/hadoop namenode -format

3.3.5 启动hadoop集群[node1下]

/usr/local/hadoop/sbin/start.all.sh
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐