Docker搭建Hadoop环境

Hadoop集群环境配置起来相当繁琐,并且在学习Hadoop过程中没有一般不会去使用多台设备进行分布式集群配置。因此在一台机器上配置Hadoop分布式集群时通常采用虚拟机来模拟多台设备,但虚拟机较为占用系统资源,开多个虚拟机(模拟Hadoop集群通常使用3个,一个master,两个slave)对内存要求比较高,因此笔者就想是否能通过Docker来配置Hadoop,并且通过Jetbrains IDEA来连接Docker容器调试MapReduce程序。经过一番折腾,成功地搭建了Docker+IDEA的Hadoop环境。在此将结合网上其他一些教程和自己的经验讲配置过程记录下来。
注意:文中多次提到容器终端是hadoop-master这个容器的终端

Docker的安装与使用

建议在Ubuntu上配置以下内容,因为我自己在Windows上多次尝试配置,都出现Datanode启动不了的情况,同样的步骤在Ubuntu上就没有问题。

看了一些Docker教程,笔者认为菜鸟教程里的Docker教程不错,包含安装过程和一些基础命令,在这里就不赘述了,读者自行查看 菜鸟教程- Docker,另外建议将Docker的镜像源修改为国内镜像源,下载速度会更快。

拉取镜像

镜像,是 Docker 的核心,可以通过从远程拉取镜像即可配置好我们所需要的环境,我们这次需要的是 Hadoop 集群的镜像。我们使用kiwenlau/hadoop:1.0这个镜像。

sudo docker pull kiwenlau/hadoop:1.0

显示以下信息说明拉去镜像成功
sudo docker pull kiwenlau/hadoop:1.0

克隆配置脚本

这一步是从github上克隆配置脚本,脚本的内容是使用kiwenlau/hadoop:1.0配置mater、slave1、slave2三个容器,其中slave数量可以修改:

git clone https://github.com/kiwenlau/hadoop-cluster-docker

切换到合适的路径在进行克隆,显示以下信息说明克隆完成
克隆完成

创建网桥

由于Hadoop的master节点需要与slave节点通信,需要在各个主机节点配置节点IP,为了不用每次启动都因为IP改变了而重新配置,在此配置一个Hadoop专用的网桥,配置之后各个容器的IP地址就能固定下来。

sudo docker network create --driver=bridge hadoop

出现以下信息说明网桥创建完成
网桥创建完成

执行脚本

此时可以通过前面步骤克隆下来的脚本进行容器创建了,首先看一下脚本内容
容器创建脚本
为了后续通过IDEA连接IDEA,需要修改脚本,添加一个端口映射,将容器的9000端口映射到本地的9000端口,在-p 8088:8088 \下添加一行如下图所示
添加9000端口
执行脚本,脚本在创建完容器之后进入了容器的终端
执行脚本

Docker命令补充

1、切换到本地终端而不关闭容器:快捷键Ctrl+P+Q,前一个步骤进入了容器的终端,如果我们想在这个窗口执行本地命令,而不想关闭当前容器,可以使用这个快捷前切换回本地终端,如下图所示:
在这里插入图片描述
也可以通过新建一个终端窗口通过以下attach命令来进入容器终端,这种方式更方便一点,不需要使用命令来回切换终端
2、进入容器终端:在一个容器启动的情况下,我们想从本地终端切换到容器终端,可以使用docker的attach命令来切换:

# sudo docker attach [container-id]
sudo docker attach hadoop-master

进入容器终端
3、以上两条是我们在后续步骤要多次用到的,在此提出,其他Docker命令请查看 菜鸟教程- Docker

更换镜像源

  • 在下一步中需要安装vim,在安装vim前需要执行sudo apt-get update更新软件源,这一步如果使用默认镜像源(国外源),更新速度会很慢,因此最好在次之前配置国内镜像源。
  • 由于更换镜像源需要复制镜像源到文件中,而容器中只有vi(非vim)编辑器,vi的粘贴很难用(我不会用),所有采用在本机创建一个镜像源文件,然后通过Docker命令移动到Docker容器中的方法来修改镜像源文件。
    首先新开一个本地终端,创建一个sources.list文件
gedit sources.list
  • 将以下内容复制进去
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
  • 容器终端下备份一下sources.list文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.copy
  • 本地终端使用Docker命令将本地文件复制到Docker容器里
sudo docker cp sources.list  hadoop-master:/etc/apt
  • 最后在容器终端更新一下软件源
sudo apt-get update

安装vim

  • 由于kiwenlau/hadoop:1.0这个镜像是没有安装vim编辑器,因此我们需要先把vim装上,方便后续查看文件,执行以下安装命令即可
# 安装vim
sudo apt-get install vim

启动Hadoop

在前面一个步骤的最后进入了Hadoop容器的终端(master节点),因为是已经配置好Hadoop的容器,所以可以直接使用Hadoop,在容器根目录下有一个启动Hadoop的脚本,脚本代码如下,启动了dfs和yarn:
在这里插入图片描述

  • 通过以下命令执行:
./start-hadoop.sh

出现以下信息说明Hadoop启动成功
启动Hadoop

测试Word Count

根目录下还有一个测试WordCount程序的脚本,WordCount是Hadoop里“Hello World”程序,是一个用于文本字符统计的MapReduce程序,先来看一下run-wordcount.sh这个脚本的内容,脚本往hdfs里添加了数据文件,然后执行了Hadoop里的例子hadoop-mapreduce-examples-2.7.2-sources.jar:
在这里插入图片描述

  • 执行脚本
./run-wordcount.sh

输出结果没有报异常,且结果如下则WordCount程序执行成功
在这里插入图片描述

查看Web管理页面

  • Name Node:[Your IP Address]:50070/
    • 进入页面可以看到各节点的情况,注意如果Summary下的节点信息异常(容量为0、Live Nodes为0等)可能是配置过程出现了问题。
    • 在导航栏的Utilities中有两个选项Browse the file systemLogs,前者是查看hdfs文件系统的,后者是查看Hadoop运行日志的,出现任何异常时可以在日志中查看,看能否找出异常原因。

name Node管理页面

  • Resource Manager: [Your IP Address]:8088/

Resource Manager管理页面

  • 容器的IP可以在启动容器时的输出信息里找到,或者在开启的本地端口映射的情况下使用本地浏览器,IP使用localhost

Docker配置Hadoop环境的过程到此就结束了,下一篇IDEA调试Docker上的Hadoop会介绍如何在IDEA连接Docker配置的Hadoop容器,并且调试的文章,以便于Hadoop的深入学习。

本文是在本人第一次配置完成很久之后才写的,可能有些容易出错的细节没写清楚或者有错误,如果有问题,欢迎在下方留言纠正或提问

参考”从 0 开始使用 Docker 快速搭建 Hadoop 集群环境“:https://www.jianshu.com/p/b75f8bc9346d

Logo

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

更多推荐