基于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 Compose部署分布式MinIO集群
一.概述 Minio 是一个基于Go语言的对象存储服务.它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 ...
- 腾讯大规模Hadoop集群实践 [转程序员杂志]
TDW(Tencent distributed Data Warehouse,腾讯分布式数据仓库)基于开源软件Hadoop和Hive进行构建,打破了传统数据仓库不能线性扩展.可控性差的局限,并且根据腾 ...
- 大规模Hadoop集群实践:腾讯分布式数据仓库(TDW)
TDW 是腾讯最大的离线数据处理平台.本文主要从需求.挑战.方案和未来计划等方面,介绍了TDW在建设单个大规模集群中采取的 JobTracker 分散化和 NameNode 高可用两个优化方案. TD ...
- 大规模Hadoop集群在腾讯数据仓库TDW的实践
随着业务的快速增长,TDW的节点数也在增加,对单个大规模Hadoop集群的需求也越来越强烈.TDW需要做单个大规模集群,主要是从数据共享.计算资源共享.减轻运营负担和成本等三个方面考虑. 数据共享.T ...
- 基于docker实现redis高可用集群
基于docker实现redis高可用集群 yls 2019-9-20 简介 基于docker和docker-compose 使用redis集群和sentinel集群,达到redis高可用,为缓存做铺垫 ...
- BAT 大规模Hadoop集群实践
百度高级架构师马如悦:我的Hadoop 2.0 http://www.csdn.net/article/2011-04-28/296869 腾讯大规模Hadoop集群实践 腾讯 hadoop 基线版本 ...
- [转载] 把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篇文 ...
- 把Nutch爬虫部署到Hadoop集群上
原文地址:http://cn.soulmachine.me/blog/20140204/ 把Nutch爬虫部署到Hadoop集群上 Feb 4th, 2014 | Comments 软件版本:Nutc ...
- ActiveMQ此例简单介绍基于docker的activemq安装与集群搭建
ActiveMQ拓展连接 此例简单介绍基于Docker的activemq安装与集群搭建 一 :安装 1.获取activemq镜像 docker pull webcenter/activemq 2.启动 ...
随机推荐
- 【代码笔记】iOS-长条蓝色button
一,效果图. 二,代码. ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup ...
- SQL SERVER 将表字段值0和1互转的几种方法
需求: 如果表字段的值为 0 则将其修改为1 ,如果表字段的值为 1 则将其修改为 0. 方法一 end 方法二 ) 方法三 )
- Js利用Canvas实现图片压缩
最近做的APP项目涉及到手机拍照上传图片,因为手机拍照的图片通常都比较大,所以上传的时候就会很慢.为此,需要对图片进行压缩处理来优化上传功能.以下是具体实现: /* * 图片压缩 * img 原始图片 ...
- SoapUI 接口测试之post提交本地数据文件
SoapUI接口测试之post提交本地数据文件 by:授客 QQ:1033553122 本文主要是针对用SoapUI POST提交本地数据文件的方法做个简单介绍 举例: 文件同步接口 接口地址:htt ...
- Android Fragment的用法(二)
如果你经常使用平板电脑,应该会发现很多的平板应用现在都采用的是双页模式(程序会在左侧的面板上显示一个包含子项的列表,在右侧的面板上显示内容),因为平板电脑的屏幕足够大,完全可以同时显示下两页的内容,但 ...
- WebView动态注入JavaScript脚本
Demo地址:https://gitee.com/chenyangqi/YouMeDai 背景介绍 在Android与JavaScript交互一文中学习了原生和JS交互,但是如果我们想和别人开发好的w ...
- 【Redis】Redis学习(四) Redis Sentinel模式详解
主从模式的弊端就是不具备高可用性,当master挂掉以后,Redis将不能再对外提供写入操作,因此sentinel应运而生. Redis Sentinel是Redis官方提供的集群管理工具,主要有三大 ...
- linux chmod 给目录或文件赋权限 可读可写可执行
前提: mode权限设定字串,格式:[ugoa...][[+-=][rwxX]...][,...] 其中u表示拥有者(user),g表示与拥有者属于同一个群体(group),o表示其他以外的人(ot ...
- 美图DPOS以太坊教程(Docker版)
一.前言 最近,需要接触区块链项目的主链开发,在EOS.BTC.ethereum.超级账本这几种区块链技术当中,相互对比后,最终还是以go-ethereum为解决方案. 以ethereum为基准去找解 ...
- 记一款bug管理系统(bugdone.cn)的开发过程(1) -- 为什么要开发一款bug开发系统
对于从事软件研发行业的同学来说bug管理系统肯定不陌生.本人03年左右开始正式成为一名码农,工作期间接触过若干bug管理系统,如JIRA等,不过都是自行部署在公司内网的. 几年过去了,现在已经是互联网 ...