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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 基于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镜像架构:


a1d8560741655229c33bd299a5dfb7e.png


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信息、快照总结、启动进程、文件系统和日志信息等。


相关文章
|
18天前
|
监控 文件存储 Docker
实现NAS远程下载,Docker部署qBittorrent、Transmission、贝锐花生壳
与电脑不同,NAS通常7x24小时运行,便于下载资源,解决BT/PT下载需长时间在线的问题。因此,qBittorrent、Transmission等下载管理工具成为NAS用户的必备应用。通过Docker,用户可在多种NAS设备上快速安装这些工具,并通过局域网IP地址+端口访问。然而,缺乏公网IPv4地址导致远程访问困难,贝锐花生壳提供了解决方案,允许无公网IP情况下通过固定域名远程访问NAS中的下载工具,简化了部署过程,使用户能随时随地控制家中的下载任务。
141 33
实现NAS远程下载,Docker部署qBittorrent、Transmission、贝锐花生壳
|
11天前
|
应用服务中间件 Docker 容器
docker应用部署---Tomcat的部署配置
这篇文章介绍了如何使用Docker部署Tomcat服务器,包括搜索和拉取Tomcat镜像、创建容器并设置端口映射和目录映射,以及如何创建一个HTML页面并使用外部机器访问Tomcat服务器。
docker应用部署---Tomcat的部署配置
|
11天前
|
关系型数据库 MySQL 数据安全/隐私保护
docker应用部署---MySQL的部署配置
这篇文章介绍了如何使用Docker部署MySQL数据库,包括搜索和拉取MySQL镜像、创建容器并设置端口映射和目录映射、进入容器操作MySQL,以及如何使用外部机器连接容器中的MySQL。
docker应用部署---MySQL的部署配置
|
1天前
|
存储 Linux 开发者
虚拟机centos7.9一键部署docker
本文介绍了如何在 CentOS 7.9 虚拟机上安装 Docker 社区版 (Docker-ce-20.10.20)。通过使用阿里云镜像源,利用 `wget` 下载并配置 Docker-ce 的 YUM 仓库文件,然后通过 `yum` 命令完成安装。安装后,通过 `systemctl` 设置 Docker 开机自启并启动 Docker 服务。最后,使用 `docker version` 验证安装成功,并展示了客户端与服务器的版本信息。文中还提供了列出所有可用 Docker-ce 版本的命令。
虚拟机centos7.9一键部署docker
|
25天前
|
人工智能 API 数据库
FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
【9月更文挑战第5天】 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
|
12天前
|
前端开发 应用服务中间件 nginx
docker部署本地前端项目思路
docker部署本地前端项目思路
24 7
|
11天前
|
应用服务中间件 nginx Docker
docker应用部署---nginx部署的配置
这篇文章介绍了如何使用Docker部署Nginx服务器,包括搜索和拉取Nginx镜像、创建容器并设置端口映射和目录映射,以及如何创建一个测试页面并使用外部机器访问Nginx服务器。
|
1月前
|
分布式计算 Hadoop Devops
Hadoop集群配置https实战案例
本文提供了一个实战案例,详细介绍了如何在Hadoop集群中配置HTTPS,包括生成私钥和证书文件、配置keystore和truststore、修改hdfs-site.xml和ssl-client.xml文件,以及重启Hadoop集群的步骤,并提供了一些常见问题的故障排除方法。
46 3
Hadoop集群配置https实战案例
|
11天前
|
分布式计算 Hadoop Java
Hadoop集群搭建,基于3.3.4hadoop和centos8【图文教程-从零开始搭建Hadoop集群】,常见问题解决
本文是一份详细的Hadoop集群搭建指南,基于Hadoop 3.3.4版本和CentOS 8操作系统。文章内容包括虚拟机创建、网络配置、Java与Hadoop环境搭建、克隆虚拟机、SSH免密登录设置、格式化NameNode、启动Hadoop集群以及通过UI界面查看Hadoop运行状态。同时,还提供了常见问题的解决方案。
Hadoop集群搭建,基于3.3.4hadoop和centos8【图文教程-从零开始搭建Hadoop集群】,常见问题解决
|
1月前
|
虚拟化 Docker Windows
window 10专业版部署docker环境
本文介绍了如何在Windows 10专业版上部署Docker环境,包括安装步骤、配置镜像加速以及可能遇到的错误处理。
72 2
window 10专业版部署docker环境
下一篇
无影云桌面