基于Docker一键部署大规模Hadoop集群及设计思路

Posted 李金泽AllenLi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Docker一键部署大规模Hadoop集群及设计思路相关的知识,希望对你有一定的参考价值。

欢迎关注大数据和人工智能技术文章发布的微信公众号:清研学堂,在这里你可以学到夜白(作者笔名)精心整理的笔记,让我们每天进步一点点,让优秀成为一种习惯!

一、背景:

随着互联网的发展、互联网用户的增加,互联网中的数据也急剧膨胀。每天产生的数据量数以万计,本地文件系统和单机CPU已无法满足存储和计算要求。Hadoop分布式文件系统(HDFS)是海量数据存储的重要技术,它将数据存储在多个从节点上,对这些节点的硬件资源进行统一管理与分配,并向客户端提供文件系统访问接口,解决了本地文件系统在文件大小、文件数量、打开文件数目等的限制问题。海量数据存储系统的数据都是通过分布式文件系统存储在各个节点上。通过分布式文件系统,海量数据存储系统可以可靠地存储PB级以上数据。因此,分布式存储和分布式计算的应用成为必然的趋势。

Hadoop集群可以充分利用分布式的优越性,解决大数据的存储和计算问题。然而就在Hadoop分布式带来便利的同时,其集群的安装和部署都有一定的局限性,前期准备工作非常多,如配置文件之多、配置节点数量之大、部署过程涉及计算机网络、Linux操作系统、SSH无密码登录、jdk环境配置、shell脚本等一系列纷繁复杂的知识,专人来做正常工作周期需要3个人部署加测试一个月左右,动辄分布式集群的部署还以失败告终,并无从下手找出故障根源。因此也给 Hadoop 研究人员造成了很多困扰。而安装部署 Hadoop平台是研究大数据处理的第一步,是不可避免的必经之路,其次,在后期使用过程中,一旦服务出错也很难排查出是哪个节点出现了问题,使得运维人员的难度大大提高。因此,对于Haoop集群的自动化部署和状态的实施监测研究是非常具有意义的课题。而目前市面上大数据监控系统由很多,但都仅仅针对各自组建的独立监控,如Cloudea Manager,其只针对本公司产品,只监控hadoop以及hadoop相关组件Hbase等,对Redis、storm等其他组件并不支持,其次很多组件如kafa只提供监控接口,想查看组件状态必须自己调用监控接口,这对于非研发人员具有一定的难度,因此缺少一款针对大数据集群所有组件统一监控的系统。

在过去,单机的小规模部署对于Hadoop这样的大数据平台是没有任何实际意义的。此前,具有真正应用意义的多机部署也从未真正实现过。那么,如何借助Docker作为优化手段,在多机大规模的情况下进行一键部署,是目前Hadoop系统架构方面最受关注的技术热点之一。过去,几百台规模集群的Hadoop on Docker的部署,从未有人实现过,这也是Hadoop on Docker难以落地应用的主要原因之一。而一键规模化部署则更是绕过了Hadoop on Docker在市场的适应期,降低了安装和使用的成本,使企业用户可以更早更快地使用该技术,是在Hadoop技术发展和推广中举足轻重的一个技术突破。

Docker是PaaS提供商docker公司开源的一个基于LXC的轻量级虚拟化技术的容器引擎,整个项目基于go语言开发,并遵从Apache2.0协议。通过分层镜像标准化和内核虚拟化技术,Docker使得应用开发者和运维工程师可以以统一的方式跨平台发布应用,并且以几乎没有额外开销的情况下提供资源隔离的应用运行环境。Docker采用了如图所示的客户/服务器架构模式。客户端通过TCP/REST向Docker host发送创建容器、运行容器、保存容器、删除容器等请求,实现远程控制。服务端主要包括daemon和container两部分。

Docker daemon是服务端中一个常驻留在后台的守护服务进程,该守护进程在后台启动一个server进程,其工作职责是接收客户端发送的请求;在engine模块中根据客户端的请求类型,server通过路由与分发调度机制,找到相应的job来处理客户端的请求。通过driver转发至容器中的libcontainer库,libcontainer提供了很多与容器相关的API,不需要依赖其他文件库,Docker可以调用libcontainer库文件直接操作,这种架构允许多个容器在共享同一个Linux内核的情况下完全隔离地运行。

Docker容器是Docker系统结构中服务交付的最终体现方式,通Docker的需求与下发的命令,订制相应的服务并运行容器。Docker Registry是存储容器镜像的管理仓库,是集中存放镜像文件的场所,当用户创建了自己的镜像之后就可以使用push命令将它上传到仓库,这样下次在另外一台机器上使用这个镜像时,只需要从仓库上pull下来即可。而容器镜像是在容器被创建时,用来加载并初始化容器的文件系统与目录。在容器的运行过程中,Docker daemon会与Docker Registry进行进程间通信,具有搜索镜像、下载镜像、上传镜像等基本功能。

Docker底层的两个核心技术分别是namespace和cgroups。命名空间的作用是为容器提供进程间隔离的技术以及为每个容器提供不同的主机名。Docker使用到了群组控制技术来管理可利用的资源,其主要具有对共享资源的分配、限制、审计及管理等功能。

容器化是以可移动可预测方法发布和部署应用程序的过程,通过包装组件及其依赖,打包成一个标准的、隔离的、轻量 的环境。Docker是最流行的容器化软件,能够与许多开源项目集成管理和创建容器。

与传统虚拟化技术相比,容器化技术优点为:

1、简化部署。它将应用打包成单一地址访问的、registry存储的、仅通过一行命令就可以部署完成的组件。

2、启动速度快。容器技术对操作系统的资源进行再次抽象,通过这种方式,打包好的服务可以在0.05秒的时间内启动,相比之下,可能需要几分钟的时间才能启动一台虚拟机。

3、内存消耗低。容器可以允许开发者和系统管理人员对计算资源进行进一步细分,如果一个小型的虚拟机所提供的资源相对于服务运行所需要的资源来说过于庞大,或者对于系统而言,一次性地扩展出一台虚拟机会需要很多的工作量,那么容器会很好地改善这一状况。

4、系统支持量高,单机支持上千个容器

5、安全隔离,隔离不同的应用程序

6、可移植性好,一次封装到处运行

技术分享图片

虚拟机技术

技术分享图片

docker容器技术

二、Hadoop镜像架构:

OS

hostname

IP

Ubuntu

hadoop-master

172.18.0.10

Ubuntu

hadoop-slave1

172.18.0.11

Ubuntu

hadoop-slave2

172.18.0.12

Ubuntu

hadoop-slave3

172.18.0.13

三、设计思路:

1、自动化部署大数据平台:

采用编写Dockerfile脚本创建镜像的方式实现自动化部署hadoop各个组件。本文基于的Linux操作系统是Ubuntu14.04版本,

采用Dockerfile安装hadoop基础镜像的具体步骤如下:

1、 安装和配置JDK #hadoop由java语言编写,需要jdk运行环境

2、 安装和配置hadoop

3、 配置文件直接导入

4、 配置SSH免密码登录 #免密码登录到节点上来启动这个节点

5、 创建hadoop基础镜像

6、 创建自定义网络 #选择容器模式

7、 创建容器 #附带系统环境搭建

8、 格式化Namenode

9、 启动hadoop服务

10、验证hadoop服务是否正常启动

2、实施监控大规模hadoop集群:

利用docker一键优化部署大规模hadoop集群后,需要监控各个组件的运行状态, 采用JMX对集群进行监控,它能将监控功能整合到系统或应用程序中,JMX能给绝大多数系统或设备提供相应的监控服务。提供JMX接口的hadoop组件有:hadoop,hbase,zookeeper,kafka。采用MongoDB作为监控数据的缓存数据库,并向web端提供监控数据。

实时监测hadoop的内容有:DFS占有率、DFS剩余率、数据块占有率、活着的节点、Namenode日志状态、Namenode存储位置、Datenode信息、快照总结、启动进程、文件系统和日志信息等。

由于演示视频太大,无法上传至公众号平台,因此想要源码的可以关注清研学堂,小编后期整理好后会发到平台上供大家参考学习!

作者:李金泽AllenLi,清华大学在读研究生,研究方向:大数据和人工智能。

 

以上是关于基于Docker一键部署大规模Hadoop集群及设计思路的主要内容,如果未能解决你的问题,请参考以下文章

基于Docker搭建大数据集群Hadoop部署

基于Docker搭建大数据集群Spark部署

docker一键部署elasticsearch搜索服务器只要3分钟

Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平台

docker一键部署hadoop心得

使用 docker 一键搭建 hadoop,hbase, hive 等大数据集群