基于Docker搭建Hadoop集群

一、准备工作

  下载VMware、Xshell、Xftp、centos7映像文件、hadoop和jdk的压缩包。

二、配置虚拟机

1.创建虚拟机

  使用VMware新建虚拟机,同时安装centos7系统,命名为master。

2.给虚拟机配置IP、网关等

vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改BOOTPROTO为static,并在最后添加虚拟机的IP地址,子网掩码、网关和DNS等,如下图。

保存后退出。

重启网络服务,测试能否ping通百度,可以则配置成功,如下图。

3.关闭防火墙

查看此时防火墙的状态。

systemctl status firewalld

发现此时防火墙开启,所以将其关闭,并设置永久关闭。

systemctl stop firewalld
systemctl disable firewalld

此时再查看防火墙的状态,发现已关闭。(若要测试是否永久关闭可以重启后查看)

4.补充:找不到ifconfig命令(可用于查看IP)

进行如下操作即可。

5.使用xshell连接虚拟机

 选择“接受并保存”,然后输入用户名和密码即可。

6.修改主机名

若第一步未命名虚拟机,可通过如下命令。

vi /etc/hostname

 输入名字,保存后退出。然后重启,命名生效。

三、安装docker服务

1.自动安装docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2.查看docker的版本

3.启动docker,并设置开机自启动

4.配置docker镜像加速器

vi /etc/docker/daemon.json

添加如下内容

保存后退出。

5.重启docker服务

systemctl daemon-reload
systemctl restart docker

输入docker info,最下方显示我们配置的地址时即为成功配置镜像加速器,如下图。

四、安装pipework和bridge-utils

1.新建文件夹software

mkdir software
cd software

2.安装git

yum install -y git

3.下载pipework

git clone https://github.com/jpetazzo/pipework.git

下载完成。

4.把pipework脚本添加到path中

cp pipework/pipework /usr/bin/

5.安装bridge-utils

yum install bridge-utils

五、搭建集群(一)

1.集群规划

hadoop01hadoop02hadoop03
IP192.168.19.201192.168.19.202192.168.19.203
HDFSNameNode、DataNodeDataNodeSecondaryNode、DataNode
YARNNodeManagerResourceManager、NodeManagerNodeManager

2.拉取centos镜像

cd ~
docker pull centos:7.5.1804

查看镜像

3.创建文件夹docker-hadoop

mkdir docker-hadoop

4.使用xftp连接master,并传输jdk安装包到文件夹docker-hadoop

选中jdk压缩包,直接拖拽过去即可。

5.编辑Dockerfile,通过其生成带有jdk、ssh服务的镜像

cd docker-hadoop
vi Dockerfile

添加如下内容。

FROM centos
MAINTAINER master
 
#安装JDK
RUN mkdir -p /opt/software && mkdir -p /opt/service
ADD jdk1.8.0_221.tar.gz /opt/service

RUN cd /etc/yum.repos.d/
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum makecache
RUN yum update -y
RUN yum install -y openssh-server sudo
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN yum install -y openssh-clients
 
RUN echo "root:1" | chpasswd
RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
 
RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

注:MAINTAINER+空格+作者的信息,用于指定镜像作者的信息,根据自身实际修改。“root:1”的冒号后改成自己的密码。

6.生成基础镜像

docker build -t hadoopbase:1.0 ./

查看镜像是否创建成功。

 六、搭建集群(二)

1.创建三个容器

docker create -it --name hadoop01 -h hadoop01 hadoopbase:1.0
docker create -it --name hadoop02 -h hadoop02 hadoopbase:1.0
docker create -it --name hadoop03 -h hadoop03 hadoopbase:1.0

2.pipework配置网络

cd /usr/local/bin
vi docker.sh
chmod 777 docker.sh

脚本内容如下

#!/bin/bash

# 启动容器
docker start hadoop01
docker start hadoop02
docker start hadoop03

# 搭建网桥
brctl addbr br0; \
ip link set dev br0 up;
ip addr del 192.168.19.144/24 dev ens33;\
ip addr add 192.168.19.144/24 dev br0; \
brctl addif br0 ens33;\
ip route add default via 192.168.19.1 dev br0 

#睡5秒钟
sleep 5

#给容器配置ip和网关
pipework br0 hadoop01 192.168.19.201/24@192.168.19.1
pipework br0 hadoop02 192.168.19.202/24@192.168.19.1
pipework br0 hadoop03 192.168.19.203/24@192.168.19.1

3.执行脚本

显示如上则说明容器启动成功。

4.使用xshell连接三个容器

编辑容器的hosts文件,配置主机映射。

vi /etc/hosts

删除最后一行,添加以下内容。

192.168.19.201 hadoop01
192.168.19.202 hadoop02
192.168.19.203 hadoop03

保存后退出。可测试能否通过主机名ping通,从而判断配置是否生效。

5.配置三个容器之间的免密登录

此时仅在hadoop01上操作。

ssh-keygen -t rsa

三次回车。

ssh-copy-id hadoop01
ssh-copy-id hadoop02
ssh-copy-id hadoop03

依次执行,需要输入“yes”和自己设置的密码。

然后在hadoop02和hadoop03上执行相同的操作。

七、搭建集群(三)

1.使用xftp连接hadoop01,上传hadoop安装包,放在/opt/software下

2.解压hadoop的安装包到/opt/service下

tar -zxvf hadoop-2.7.7.tar.gz -C /opt/service

3.配置jdk和hadoop的环境变量

vi /etc/profile

添加以下内容

#JAVE_HOME
export JAVA_HOME=/opt/service/jdk1.8.0_221
export PATH=$PATH:$JAVA_HOME/bin

#HADOOP_HOME
export HADOOP_HOME=/opt/service/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

使文件生效

source /etc/profile

查看jdk和hadoop的版本

4.修改hadoop的配置文件

进入对应的文件夹

cd /opt/service/hadoop-2.7.7/etc/hadoop/

(1)修改core-site.xml

vi core-site.xml

在<configuration></configuration>间添加以下内容,保存后退出。

<!--指定NameNode的地址-->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop01:9000</value>
  </property>
 
  <!--指定hadoop存放数据的目录-->
  <property>
    <name>hadoop.tmp.dir</name>    
    <value>/opt/service/hadoop-2.7.7/data</value>
  </property>

  <!--配置HDFS网页登录使用的静态用户为root-->
  <property>
    <name>hadoop.http.staticuser.user</name>
    <value>root</value>
  </property>

(2)修改hdfs-site.xml

在<configuration></configuration>间添加以下内容,保存后退出。

<!--nn web端访问地址-->
  <property>
    <name>dfs.namenode.http-address</name>
    <value>hadoop01:9001</value>
  </property>

  <!-- 2nn web端访问地址-->
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop03:9002</value>
  </property>

  <!--指定HDFS副本的数量-->
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>

  <!--指定NN存放元数据信息的位置-->
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/opt/service/hadoop-2.7.7/hdfs/name</value>
  </property>

  <!--指定DN存放元数据信息的位置-->
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/opt/service/hadoop-2.7.7/hdfs/data</value>
  </property>

(3)修改mapred-site.xml

该文件夹下没有mapred-site.xml这个文件,所以需要执行以下操作。

cp mapred-site.xml.template mapred-site.xml

然后在<configuration></configuration>间添加以下内容,保存后退出。

<!--指定MR运行在yarn上-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
  
  <!--历史服务器端地址-->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop01:10020</value>
  </property>
 
  <!--历史服务器web端地址-->
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop01:19888</value>
  </property>

(4)编辑yarn-site.xml

在<configuration></configuration>间添加以下内容,保存后退出。

<!--指定MR走shuffle-->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

  <!--指定ResourceManager的地址-->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop02</value>
  </property>

  <!--yarn容器允许分配的最大最小内存-->
  <property>
    <name>yarn.scheduler.minimum-allocation-mb</name>
    <value>512</value>
  </property>
  <property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>2048</value>
  </property>

  <!--yarn容器允许管理的物理内存大小-->
  <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>2048</value>
  </property>

  <!--关闭yarn对虚拟内存的限制检查-->
  <property> 
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
  </property>
<!--开启日志聚集功能-->
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>
 
  <!--设置日志聚集服务器地址-->
  <property>
    <name>yarn.log.server.url</name>
    <value>http://hadoop01:19888/jobhistory/logs</value>
  </property>

  <!--设置日志保留时间为7天-->
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
  </property>

(5)编辑hadoop_env.sh

改动这个地方即可。

(6)编辑slaves

把原有内容删除,添加三个容器的名字,如下。

注:不要有空格或者空行!

 (7)配置环境变量

vi /etc/profile

 在最后添加如下内容。

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

使环境变量生效。

source /etc/profile

5.分发hadoop到其余两个容器

scp -r /opt/service/hadoop-2.7.7 hadoop02:/opt/service
scp -r /opt/service/hadoop-2.7.7 hadoop03:/opt/service

6.分发配置文件

scp -r /etc/profile hadoop02:/etc/profile
scp -r /etc/profile hadoop03:/etc/profile

在hadoop02和hadoop03上分别执行以下命令,使环境变量生效。

source /etc/profile

7.启动集群

(1)格式化hdfs

在hadoop01上执行以下命令。

cd /opt/service/hadoop-2.7.7
bin/hdfs namenode -format

格式化成功,结束状态为0

(2)启动hdfs和yarn

start-dfs.sh
start-yarn.sh

注:在hadoop01上启动dfs,在hadoop02上启动yarn

 (3)查看集群状态

 

 

 使用jps查看各容器的进程,和上三图一致即为成功。

(4)在web端查看

 

 

搭建并启动成功,感谢浏览!如有问题,欢迎指正和讨论