一、背景:

随着互联网的发展、互联网用户的增加,互联网中的数据也急剧膨胀。每天产生的数据量数以万计,本地文件系统和单机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. 【代码笔记】iOS-播放从网络上下载的语音

    代码: ViewController.m #import "ViewController.h" //录音 #import <AVFoundation/AVFoundation ...

  2. 【代码笔记】iOS-removeFromSuper

    代码: RootViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after ...

  3. CSS布局模型学习(Float、Position、Flexbox)

    一.Floatfloat 属性定义元素在哪个方向浮动.以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动.浮动元素会生成一个块级框,而不论它本身是何种元素. 清除浮 ...

  4. 8 张脑图入门 JavaScript - 基础面试不倒

    8 张脑图入门 JavaScript - 基础面试不倒 转载请注明出处 第一:JavaScript 的变量 第二:JavaScript 运算符 第三:JavaScript 数组 第四:JavaScri ...

  5. View的measure机制

    Android中View框架的工作机制中,主要有三个过程: 1.View树的测量(measure)Android View框架的measure机制     2.View树的布局(layout) And ...

  6. 绝版Node--Sequlize搭建服务(Node全栈之路 二)

    在Node全栈之路(一),也就是上篇文章中,我们讲到了sequlize的基本增删该查,这篇文章,我们在上篇文章的基础上继续探讨,讲一下关于sequlize创建的表之间的对应关系 参考资料:https: ...

  7. Web服务架构风格之REST

    REST(Representational State Transfer)是一种Web服务的架构,其目的是创建具有良好扩展性的分布式系统.它的约束包含: 使用C/S模型.client和server之间 ...

  8. python被游标坑了

    为了方便,这次就不单独写脚本了,直接一步一步执行下来就好了先说下游标,就是一个指针,比如我有1234每条占一行,那么初始游标默认是在1的位置,当read(1)后,游标自动向下next,现在指在2的位置 ...

  9. man -k : nothing appropriate.

    ➜ workplace man -k zip zip: nothing appropriate. 出现这种情况,是索引库没有建立. man 和 whatis 共用一个索引库的. 我们使用  man w ...

  10. mybatis 中的<![CDATA[ ]]>

    在使用mybatis 时我们sql是写在xml 映射文件中,如果写的sql中有一些特殊的字符的话,在解析xml文件的时候会被转义,但我们不希望他被转义,所以我们要使用<![CDATA[ ]]&g ...