Hadoop on Docker

  最初接触Docker是在2013年初,当时Docker才刚起步不久,知之甚少。在不到一年的时间里,Docker已经家喻户晓,成为时下最热门的云计算技术之一,出现了许多围绕docker的新兴产品(仅供参考):html

  • Flynn:一个使用go语言编写的开源PaaS平台,目标是简化分布式环境中应用的部署和维护,能够经过git push命令,将应用部署到Docker,从而省去复杂的配置和操做。
  • CoreOS:一种新的架构体系从新设计的Linux发型版,能够运行在既有的硬件活着云服务器上。CoreOS不提供相似yum或apt的包管理工具,用户不须要在CoreOS中安装软件,而是让程序都在Docker容器中运行。
  • Fig:是一个基于Docker的用于快速搭建开发环境的工具,目前Fig团队已经加入Docker公司。
  • Kubernets:来自Google的容器集群管理工具,支持跨平台。目前已经获得微软,IBM,红帽,CoreOS等公司的支持。
  • Boot2Docker:专为Docker设计的轻量级Linux发型包,解决Windows或OS X用户不能安装Docker的问题。

  什么是Docker。Docker是一个开源的引擎,能够轻松的为任何应用建立一个轻量级的、可移植的、相互隔离的容器。开发者在笔记本上编译测试经过的容器能够批量地在生产环境中部署,包括VMs(虚拟机)、OpenStack 集群和其余的基础应用平台。 node

  Docker应用场景mysql

  • web应用的自动化打包和发布。
  • 自动化测试和持续集成,发布。
  • 在服务型环境中部署和调整数据库或其余的后台应用。
  • 从头编译或者扩展示有的OpenShift或Cloud Foundry平台来搭建本身的PaaS环境等。

本文主要介绍docker在大数据方面的应用,通过一段时间的研究和实际操做,提出了Hadoop on Docker架构。大概思路就是将硬件(或云服务器)经过Docker搭建成为一个“超级服务器”,这里的超级是指,拥有足够的CPU,内存,而且提供7*24小时不宕机服务(除非同一时间全部物理主机全宕机)。每一个Docker容器做为超级服务器资源的一个实例,能够根据需求动态增长实例,以知足计算性能要求。下图是整个Hadoop on Docker的架构git

从上自下,依次为:web

  • Zookeeper:协调集群中物理主机之间的同步,包括维护一张每一个服务器上运行着的容器名单,全部服务器上Docker容器的ip域名映射表(动态更新),Docker容器配置。
  • Server:上面运行着不少docker容器,每一个容器运行着特定功能的服务。把应用打包到容器中运行的好处是,应用间是相互隔离的,一个容器宕掉不会影响主机上及其余容器,而且在建立容器的时候能够定制不一样的资源(CPU,内存等)。
  • FS:外部文件系统有两个做用:

      1. 将datanode容器挂载到外部文件存储系统中,能够经过增长外部文件系统的磁盘大小来提升hdfs存储能力。sql

      2. 将全部配置文件存放在公共文件系统中,能够方便整个系统的配置管理,减小重复操做。docker

  • Yarn:资源管理系统,最终的目标是能够将不一样的集群容器(storm,spark等)放在同一个yarn系统中,经过yarn的调度来为不一样集群分配不一样资源。

有人会有疑问:现在服务器已经很廉价,彻底能够在不一样服务器上运行不一样服务,不必使用docker。数据库

若是硬件服务器对你来讲确实是廉价的,以致于搭建100个节点的hadoop集群,大多数状况下运行mapreduce job的节点书不超过10个,剩余90台服务器常年处于休息状态,对你来讲也可有可无的话,我无话可说。抛开硬件成本不说,docker容器的隔离机制也是集群部署中的一大亮点!服务器

本文的目的是经过docker容器,使用更少的硬件资源来运行一样的job,容器相对于服务器来讲是更细粒度的资源。同时因为容器的隔离机制,一个容器发生故障并不影响到其余容器及宿主主机。此外这种架构还解决了单点故障问题,每台服务器运行着相同的docker镜像,经过定时向zookeeper发送心跳,来监控全部容器的健康状态,心跳是一份包含该服务器上全部运行着的容器的名单。那么有可能发生两种突发状况:架构

  • docker容器挂掉
  • 宿主主机宕机

对于第一种状况,因为心跳包含全部运行着容器的名单,当服务器某个容器挂掉,好比mysql意外终止,zookeeper经过两次心跳对比,发现缺乏mysql,因而启动应急措施,重启该服务器的mysql容器。若是宿主主机宕机,zookeeper在一段时间内未接受该服务器的心跳,发现宕机,而后在其他剩下的服务器中重启上一次心跳名单中运行着的容器,如图所示

整个系统的实现还有一个前提,就是使不一样宿主主机上的docker容器可以通讯,能够参见这篇

最终的目的是使整个架构看起来像在一台超级服务器(cpu,内存足够大,而且永不宕机)上运行hadoop。

本文持续更新。。。

相关文章
相关标签/搜索