APP下载

基于Docker容器的多节点Hadoop集群快速部署方案

2022-10-20秦黄刘晓娟李满刘晓莉

现代信息科技 2022年13期
关键词:镜像虚拟化应用程序

秦黄,刘晓娟,李满,刘晓莉

(广州工商学院,广东 广州 518200)

0 引 言

近年来,大数据产业得到了大力发展,数据不再是一串冰冷的数字,越来越多的企业开始重视数据,大学也开始普及数据科学和大数据专业。Hadoop 是Apache 开源基金会开发的分布式系统,由HDFS 和YARM 组成。Hadoop 是采用Java 语言开发的分散计算平台,适用于大数据领域的分布式存储和计算,是当前广泛使用的大数据计算工具。

Hadoop 在大数据领域中具有举足轻重的地位,是研究大数据技术的基石。从某种程度上说,一个人对Hadoop 基础知识掌握的扎实与否决定其在大数据技术道路上能走多远。在生成环境下或者是学习大数据的过程中,经常会遇到因使用场景的不同而应用不同集群配置的情况,若采用传统的部署方式需要进行很多烦琐重复的工作,会加大时间成本和生产成本。随着数据量的不断增大,原有DataNode 节点的容量已经不能满足数据存储的需求,需要在原有集群基础上动态添加新的数据节点,但是传统的扩容方式过程烦琐且容易出错。

为了实现Hadoop 集群上多节点的快速搭建和便捷的扩容缩容,在本文中我们提出一种基于Docker 容器快速构建多节点Hadoop 集群的引入方案。

1 容器虚拟化技术

现有的虚拟化技术包含容器虚拟化与服务器虚拟化,二者的目标是相通的,目的都是为应用程序建立一个孤立环境,但容器虚拟化技术与服务器虚拟化相比更为轻量。

这是由于服务器虚拟化技术是从操作系统层下手,不像传统的虚拟机技术那样虚拟出一套硬件驱动后,在其上运行一个完整的操作系统,对用户来说相当于使用物理性质的虚拟机。而容器虚拟化技术则不同,它与宿主机共用内核,直接将一个应用程序及其所运行的环境依赖打包成镜像。为了与服务器虚拟化技术产生的虚拟机区分开来,容器技术产生的环境就称为容器。容器技术的轻量,具体体现为所建立的容器用不上1 分钟甚至几秒钟内就可以启用,远比需要数分钟甚至几十分钟才能开启的传统虚拟机来得快。

容器提供了可以在分散且隔离的环境中运行和维护应用程序的功能。因为应用程序被制作成拥有完整架构体系的镜像并建立在独立的容器中,在这种隔离和独立空间的保证下,可以在给定的物理机器上同时运行多个容器。此外,容器是轻量级且独立的,又包含运行应用程序所需的所有内容,因此用户不需要依赖主机上安装的内容。用户可以在工作时或生产环境下快速便捷地共享容器或移植镜像,并确保与之共享的每一个用户都能获得相同环境下的相同容器或镜像,有效解决了运行环境改变而带来的各个组件之间的兼容性问题。

综上,利用Docker 可以实现对环境的快速构建,避免了环境不一致和依赖冲突等问题。将所有的应用、配置和依赖打包进容器中,以便在任何环境下都能够有效运行。容器虚拟化技术藉由镜像妥善解决了在线和离线环境的问题,保证生活周期中应用或服务环境的标准化,非常有利于持续部署与测试。因此,容器虚拟化技术迅速成为新兴的虚拟化方式,Docker 容器与以往的虚拟化方式相比具有显著的优势。

2 Docker 容器技术

Docker 容器技术中包含三个重要组件,分别是镜像、容器和仓库。通常来说,镜像用于创建容器,这与Java语言中的班级与实例的关系相似。镜像是静态定义,容器是执行镜像时的实体,可以创建、启动、停止、删除和暂停容器。在Docker 技术的原理中,容器表示具有完整的最后一个操作系统的应用程序。Docker 容器完全使用沙箱机制,相互之间不会有任何接口,对资源的额外需求很低,运行时不需要专门的虚拟化管理程序,只需占用较小的存储空间。

Docker 的仓库是集中存放镜像文件的场所,仓库中存放很多的镜像,每个镜像具有不同的标签用于标注版本和其他信息。当需要在其他服务器上使用某个镜像时,就可以直接从仓库中获取,也就是说仓库可为镜像提供存储和分发的服务。

2.1 Docker 环境安装

Docker 使用client-server 体系结构,Docker 客户端可以与Docker 守护进程(即Docker 服务器)建立通信。客户端和守护进程可以在同一系统中运行。客户端也可以连接到远程Docker 守护进程。Docker 客户端和Docker 守护进程也可以使用JavaAPI,通过UNIX 插口或网络接口实现通信和连接。

CentOS 是最常用的Linux 操作系统,本文使用CentOS7来演示如何搭建Docker 运行环境,搭建过程比较简单,可分为以下三步:

(1)条件准备。选择Docker 支持的操作系统,目前市面上绝大多数的操作系统Docker 都支持,这里选用的是CentOS 系统的7.9 版本。安裝Docker 引擎,需要具备一个稳定的或长期支持的CentOS 版本,不支持测试或存档版本。

(2)完成安装。Docker 的安装方法有多种,包括yum安装、rpm 包安装、便捷非交互式脚本安装等。

启动Docker 服务并查看服务状态,如图1所示。

图1 启动Docker 服务

2.2 Docker 镜像制作

Docker 镜像是Docker 的重要组成部分,一层一层地重叠而成,但镜像却是独立的不可写入的对象。镜像内是简单的操作系统且较多使用Linux 操作系统,还包括执行应用程序所需的文件和依赖性软件包,同时也会根据不同的应用场景叠加应用程序。Docker 容器技术解决了普通虚拟机庞大臃肿的问题。镜像可以理解为一种构建时(build-time)结构,而容器可以理解为一种运行时(run-time)结构。

映像是一个只读模板,其中包含有关创建Docker 容器的说明。通常情况下,一个映像是基于另一个映像而存在的,并且映像还具有一些额外的自定义层来实现具体的功能。用户可以创建自己的映像,也可以使用其他人创建的镜像,用户可在Docker 的仓库中找到其他开发者发布的映像。

如图2所示,所有的Docker 镜像都起始于一个基础镜像层,在修改或增加新的内容时,就会在当前镜像层之上创建新的镜像层,比如在centOS7 的镜像里添加了JDK,那么就会在CentOS7 的基础镜像层上添加一个包含JDK 的镜像层。镜像运行时应用了宿主机的Kernel 内核,内核的上一层一般是操作系统(比如CentOS、Ubuntu 等),再上一层是运行环境或应用程序服务(如JDK、Apache 等)。

图2 Docker 分层镜像

使用docker run 命令从一个镜像中创建启动容器,一个镜像可以创建为多个容器,一旦镜像通过容器启动后,二者之间就会产生一定的依赖关系,另外,容器启动后,镜像是无法被删除的。Docker 镜像可以从官方公共镜像仓库DockerHub 中获取。镜像仓库是容器环境的重要组成部分,用于保存和管理镜像文件。DockerHub 中有Docker 官方提供的镜像和许多社区开发者贡献的镜像,必要时还可以根据需要自行定制镜像。

制作镜像的方法主要有两种:一种是打包镜像生成的容器,另一种是使用镜像文件制作镜像。一般的生产环境中通常使用Dockerfile 文件来创建并定义用户所需的应用。Dockfile 是由Docker 程序解释的脚本,Dockerfile 由对应于Linux 下的命令构成。

使用Dockerfile 文件制作镜像的主要流程是先创建一个Dockerfile,在Dockerfile 中自定义创建镜像的组件,最后生成并测试映像。通过在Dockerfile 文件中输入相应的指令来配置用户所需的环境和功能,Dockerfile 中的每条指令都会在映像中叠加一个层。更改Dockerfile 并重新生成映像时,只会重新生成已更改的层。基于这样的模式,Docker 与其他虚拟化技术相比更加快捷。

在基于Docker 容器快速搭建多节点Hadoop 集群部署方案中,使用镜像文件制作镜像,镜像层级结构如图3所示,基础镜像为Ubuntu14,在基础镜像的基础上完成依赖包的配置(比如JDK、SSH、wget 等基础服务以及环境变量、免密登录的配置)。定义Dockerfile 时需要创建一个文件夹作为生成hadoop 镜像的场所,生成镜像所需的资源和镜像文件Dockerfile 都存放在这个文件夹下,此文件夹可以任意命名,但是生成镜像的文件必须命名为Dockerfile。

图3 镜像层级结构

3 部署方案

基于Docker 容器快速搭建多节点Hadoop 集群部署方案借助阿里云服务器来完成,利用Docker 容器模拟多节点,具体性能表如表1所示。

表1 硬件信息

集群搭建的软件环境如表2所示。环境搭建完成后,利用设计好的Dockerfile 创建定制镜像,再根据定制镜像创建容器进行实际搭建。

表2 组件版本信息

本方案中Hadoop 集群结构设计如图4所示,包含一个主节点、2 个从节点,由于不涉及存储性能要求,故本方案中的HDFS 采用默认副本数,不进行额外修改。

图4 Hadoop 集群结构

3.1 集群部署

本方案先在阿里云服务器上搭建好集群间的虚拟网络,并通过定制镜像完成1 个主节点容器和2 个从节点容器的创建,然后进入主节点容器,通过脚本启动Hadoop 集群,通过访问Hadoop 集群的主节点50070 即可查看集群情况。需要注意的是,根据容器启动时的端口映射规则,此时主节点的50070 会映射宿主机的50070 端口,因此实际上是通过访问宿主机的50070 端口来获取集群情况,如图5所示,集群状态是活跃的。

图5 集群情况

3.2 集群测试

WordCount 可以说是最简单的MapReduce 程序,多节点Hadoop 集群部署完成后,以词频统计WordCount 为例,对集群进行测试,验证集群运行情况。

以词频统计WordCount 为例,对集群进行测试,详情为:

(1)WordCount 的过程如图6所示,按照mapreduce编程规范分别编写Mapper、Reducer,完成词频统计。

图6 MapReduce 程序工作流程

(2)在完成必要的准备工作之后执行WordCount 程序,程序运行情况如图7所示。

图7 WordCount 程序运行情况

(3)监控WordCount 程序运行时硬件资源使用情况。由前文可知WordCount 程序是MapRecuce 程序,需要消耗计算资源,因此图8CPU 使用情况符合测试预期。

图8 CPU 使用情况

WordCount 程序的目的是通过MapReduce 计算框架词频统计,需要占用较多内存,所以如图9所示的内存使用情况符合测试预期。

图9 内存使用情况

如图10所示,系统负载量跟活跃进程数量有直接关系,因此在WordCount 程序运行期间系统负载呈明显上升趋势是符合测试预期的。

图10 系统负载情况

(4)通过浏览器监控界面查看统计结果,如图11所示。

图11 统计结果

4 结 论

传统的应用程序开发完成后,需要准备很多的设置说明文档以帮助其他开发人员进一步开发,而Docker 的封装和隔离特性让烦琐的部署配置工作变得简单。镜像中引入各种复杂的安装配置环境,且Docker 虚拟出一套完整的操作系统,所以兼容性问题得到保障,同时也大大节省了部署配置和测试验证时间,在生产环境下省去很多成本,极大地提高了开发测试效率。容器是轻量级的操作系统,在物理机器的系统上操作,不需要像虚拟机那样翻译指令,直接使用物理机器的CPU 命令即可。

Docker 的应用也明显改善了学习和生产环境,生产环境下的一些配置是极其烦琐的,如果需要将应用服务环境移植到另一台机器,就要反复地进行配置和调试,这样会消耗大量的时间和人力,对企业来说将是一笔不小的投入。Docker 技术完美地解决了这个问题,同时开发人员还可以利用Docker 来解决协作编码时环境不兼容的问题,Docker 之所以发展如此迅速,也是因为它提供了系统平滑移植、容器虚拟化技术的标准化解决方案。

猜你喜欢

镜像虚拟化应用程序
镜像
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
镜像
镜像
浅谈虚拟化工作原理
用户怎样选择虚拟化解决方案
三星电子将开设应用程序下载商店
微软软件商店开始接受应用程序
虚拟化整合之势凸显