一、背景:

随着互联网的发展、互联网用户的增加,互联网中的数据也急剧膨胀。每天产生的数据量数以万计,本地文件系统和单机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集群及设计思路的更多相关文章

  1. 基于Docker Compose部署分布式MinIO集群

    一.概述 Minio 是一个基于Go语言的对象存储服务.它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 ...

  2. 腾讯大规模Hadoop集群实践 [转程序员杂志]

    TDW(Tencent distributed Data Warehouse,腾讯分布式数据仓库)基于开源软件Hadoop和Hive进行构建,打破了传统数据仓库不能线性扩展.可控性差的局限,并且根据腾 ...

  3. 大规模Hadoop集群实践:腾讯分布式数据仓库(TDW)

    TDW 是腾讯最大的离线数据处理平台.本文主要从需求.挑战.方案和未来计划等方面,介绍了TDW在建设单个大规模集群中采取的 JobTracker 分散化和 NameNode 高可用两个优化方案. TD ...

  4. 大规模Hadoop集群在腾讯数据仓库TDW的实践

    随着业务的快速增长,TDW的节点数也在增加,对单个大规模Hadoop集群的需求也越来越强烈.TDW需要做单个大规模集群,主要是从数据共享.计算资源共享.减轻运营负担和成本等三个方面考虑. 数据共享.T ...

  5. 基于docker实现redis高可用集群

    基于docker实现redis高可用集群 yls 2019-9-20 简介 基于docker和docker-compose 使用redis集群和sentinel集群,达到redis高可用,为缓存做铺垫 ...

  6. BAT 大规模Hadoop集群实践

    百度高级架构师马如悦:我的Hadoop 2.0 http://www.csdn.net/article/2011-04-28/296869 腾讯大规模Hadoop集群实践 腾讯 hadoop 基线版本 ...

  7. [转载] 把Nutch爬虫部署到Hadoop集群上

    http://f.dataguru.cn/thread-240156-1-1.html 软件版本:Nutch 1.7, Hadoop 1.2.1, CentOS 6.5, JDK 1.7 前面的3篇文 ...

  8. 把Nutch爬虫部署到Hadoop集群上

    原文地址:http://cn.soulmachine.me/blog/20140204/ 把Nutch爬虫部署到Hadoop集群上 Feb 4th, 2014 | Comments 软件版本:Nutc ...

  9. ActiveMQ此例简单介绍基于docker的activemq安装与集群搭建

    ActiveMQ拓展连接 此例简单介绍基于Docker的activemq安装与集群搭建 一 :安装 1.获取activemq镜像 docker pull webcenter/activemq 2.启动 ...

随机推荐

  1. 使用kafka consumer api时,中文乱码问题

    使用Intelli idea调试kafka low consumer时,由于broker存储的message有中文, idea中console端是可以正确显示的 然后mvn package打包到服务器 ...

  2. 几个python函数

    迭代器 fun函数 过滤作用 s=['a', 'b', 'c'] def fun1(s): if s!='a': return s ret filter(fun1, str) print(ret)   ...

  3. JavaScript语法详解:if语句&for循环&函数

    本文首发于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. if语句 最基本的if语句 if语句的结构体:(格式) if (条件表达式) ...

  4. VMWare12虚拟机实现主客机间的文件拖拽(复制粘贴)和文件夹共享

    版本: 主机:Windows 7 64位旗舰版 虚拟机: VMWare 12 + Windows 7 64位旗舰版 VMWare pro 12 + Ubuntu16.04LTS 64位 注:由于VMW ...

  5. 通过递增快照备份 Azure 非托管 VM 磁盘

    概述 Azure 存储提供创建 Blob 快照的功能. 快照将捕获该时间点的 Blob 状态. 本文介绍有关如何使用快照维护虚拟机磁盘备份的方案. 如果选择不使用 Azure 备份和恢复服务,但想要为 ...

  6. 调整 Windows VM 的大小

    本文说明如何使用 Azure Powershell 调整在 Resource Manager 部署模型中创建的 Windows VM 的大小. 创建虚拟机 (VM) 后,可以通过更改 VM 大小来扩展 ...

  7. 【概率论】条件概率 & 全概率公式 & 朴素贝叶斯公式

    0. 说明 条件概率 & 全概率公式 & 朴素贝叶斯公式 学习笔记 参考 scikit-learn机器学习(五)--条件概率,全概率和贝叶斯定理及python实现 1. 条件概率 [定 ...

  8. PHP中unset,array_splice删除数组中元素的区别

    php中删除数组元素是非常的简单的,但有时删除数组需要对索引进行一些排序要求我们会使用到相关的函数,这里我们来介绍使用unset,array_splice删除数组中的元素区别吧 如果要在某个数组中删除 ...

  9. Linux之因BASH造成的键盘错误和环境问题

    对于Linux我们习惯使用/bin/bash.并且大多数人操作在Centos系统上,但是仍有不少人在ubuntu上使用,两个操作系统大同小异.都是使用了Linux内核.接下来就来讲讲我使用过程中两个系 ...

  10. maven的下载与安装

    下载路径:http://maven.apache.org/download.cgi 选择打红线的进行下载,我用的版本是3.3.9, 下载后解压该文件,解压后的文件内容如下: 解压完成后配置maven的 ...