前言

搭建一个 Hadoop 集群需要起码三台以上的服务器,传统的使用 VMware 多开虚拟机的方式对内存的占用较多,对电脑的配置要求较高,起码要 8 核处理器外加 16 G的运行内存,否则开多个虚拟机再开 IDEA
非常容易卡死。

使用 Docker 的话就简单了,不用安装操作系统,直接下载镜像,这个镜像就相当于操作系统,然后基于这个镜像运行多个容器,就相当于开了多个虚拟机,且系统性能消耗要远小于虚拟机。

假设我们有一个 centos7 镜像,启动多个容器,每个容器都有一个IP,都能通过SSH连接操作,这样就可以在每个容器中安装 JAVA Hadoop,从而搭建起集群环境了。

使用 Docker 搭建 Hadoop 集群的具体步骤有:

  • 安装Docker
  • 获取centos镜像
  • 安装SSH
  • 为容器配置IP
  • 安装JAVA和Hadoop
  • 配置Hadoop

一、安装 Docker

Docker 支持 CentOS 6 及以后的版本。

CentOS 7 系统可以直接通过 yum 进行安装:

yum install -y docker

在这里插入图片描述

二、拉取镜像

我们首先先启动 docker

systemctl start docker

在这里插入图片描述

docker 启动后通过 docker pull centos 指令来获取 CentOS 镜像

在这里插入图片描述
运用 docker images 指令来查看镜像列表

在这里插入图片描述

三、创建容器并配置环境

接下来我们来创建一个名为 hadoop1 的容器,镜像源为 centos。

 docker run --privileged=true --name=hadoop1 -p 9870:9870 -p 8020:8020 -p 9866:9866 -dit docker.io/centos /sbin/init

其中 :

--privileged=true /sbin/init 表示特权启动,后面需要用到 systemctl 命令,需要由这个权限才可以没有上面这个,再使用时会报 PID 1 的错误。

-p: 指定端口映射,格式为:主机(宿主)端口:容器端口,我们需要用到 hadoop1 9870和8020端口,这俩个端口分别运行 hdfs 和 yarn 服务,9866 端口为读写数据端口。

-dit 表示交互式且后台运行,少了 -it 容器会自动停止

之后我们在宿主机中创建 /opt/module 与 /opt/software 目录,将 hadoop 与 jdk 压缩包上传至 /opt/software 路径下,并解压到 /opt/module 路径中。

在这里插入图片描述

在这里插入图片描述

之后将 jdk 和 hadoop 从主机复制到该容器中

docker cp /opt/module/jdk1.8.0_212 1c6155788cb5:/opt/module
docker cp /opt/module/hadoop-3.1.3 1c6155788cb5:/opt/module

docker cp 指令的语法为

docker cp hadoop路径 容器ID:容器路径

然后进入容器 docker exec -it 1c6155788cb5 /bin/bash

配置环境变量,在 /etc/profile.d/ 下创建文件 mydev.sh

在这里插入图片描述

:wq保存退出后,使用 source /etc/profile 使配置生效

四、安装 ssh

我们需要让各个容器产生联系,才能构成集群,但默认情况下,容器并不能被其他容器直接通过 ssh 访问,所以这里需要配置。

首先需要设置密码

passwd root

大概率会提示没有该命令,就得下载它,然后再设置就好了

yum install passwd

然后下载 ssh,以下三步(安装了服务端和客户端)

yum install openssh
yum install openssh-server
yum install openssh-clients

然后检查配置文件,查看以下两个配置是否一样(默认应该都是这样的)

vim /etc/ssh/sshd_config

PermitRootLogin yes
PasswordAuthentication yes

这两个配置允许外网通过 ssh 连接该服务器(容器)

如果发现不是这样,就修改它,同时需要重启 ssh 是指生效

systemctl restart sshd

同样该命令可能不存在,就下载它

yum install initscripts

ifconfig 查看当前容器 IP,然后用 ssh 测试连通一下,如拒绝访问通过输入以下指令将 22 端口打开

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

在这里插入图片描述

五、保存镜像并进行克隆

首先要克隆出多个容器,就需要将该容器打包成镜像,再由该镜像创建出多个容器,步骤如下:

首先通过以下指令将容器保存为镜像

docker  commit -m="描述信息" -a="作者"  容器id  目标镜像名:[TAG]

在这里插入图片描述

然后我们利用新生成的镜像再创建容器

docker run --privileged=true --name=hadoop2 -p 8088:8088 -dit hadoop /sbin/init
docker run --privileged=true --name=hadoop3 -p 9868:9868 -dit hadoop /sbin/init

六、配置 IP

在这些容器生成好后,为它们配置一个 IP 地址映射,往后就不用去记住每一个容器的 IP 地址了。

但同时由于 docker 网桥模式的特性,当容器重启时,会按顺序为该容器分配一个 IP,使得该 IP 地址不是固定的会变化,这对我们已经做的映射非常不友好,所以接下来的第一步,是为每个容器固定一个 IP 地址(这里需要借助 pipework)。

1)安装 pipework (下载并复制可执行文件到 bin 目录)

git clone https://github.com/jpetazzo/pipework
cp ~/pipework/pipework /usr/local/bin/

2) 安装 bridge-utils

yum -y install bridge-utils

3)创建网络(这里 IP 地址自定义)

brctl addbr br0
ip link set dev br0 up
ip addr add 172.16.10.1 dev br0

4)为各个容器设置固定的 IP

pipework br0 <容器名> IP/掩码,如:
pipework br0 hadoop1 172.16.10.10/24
pipework br0 hadoop2 172.16.10.11/24
pipework br0 hadoop3 172.16.10.12/24

5)测试这几个 IP 是否可用

ping 172.16.10.10

这样就成功地为每一个容器固定好 IP 地址了,接下来就可以在容器内配置映射了

1)在每一台容器中,修改 hosts 文件

vim /etc/hosts

比如说我的,就在文件中增加:
172.16.10.10 hadoop001
172.16.10.11 hadoop002
172.16.10.12 hadoop003

2)配置完毕后,我们就可以直接通过名字轻松连接各个容器了,如:

ssh hadoop003

剩下的免密登录、Hadoop 配置等,均与虚拟机中配置相同,详情见这篇文章

Hadoop (三) --------- Hadoop 运行环境搭建 (虚拟机)

Logo

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

更多推荐