最初接触Docker是在2013年初,当时Docker才刚起步不久,知之甚少。在不到一年的时间里,Docker已经家喻户晓,成为时下最热门的云计算技术之一,出现了许多围绕docker的新兴产品(仅供参考):html
什么是Docker。Docker是一个开源的引擎,能够轻松的为任何应用建立一个轻量级的、可移植的、相互隔离的容器。开发者在笔记本上编译测试经过的容器能够批量地在生产环境中部署,包括VMs(虚拟机)、OpenStack 集群和其余的基础应用平台。 node
Docker应用场景:mysql
本文主要介绍docker在大数据方面的应用,通过一段时间的研究和实际操做,提出了Hadoop on Docker架构。大概思路就是将硬件(或云服务器)经过Docker搭建成为一个“超级服务器”,这里的超级是指,拥有足够的CPU,内存,而且提供7*24小时不宕机服务(除非同一时间全部物理主机全宕机)。每一个Docker容器做为超级服务器资源的一个实例,能够根据需求动态增长实例,以知足计算性能要求。下图是整个Hadoop on Docker的架构git
从上自下,依次为:web
1. 将datanode容器挂载到外部文件存储系统中,能够经过增长外部文件系统的磁盘大小来提升hdfs存储能力。sql
2. 将全部配置文件存放在公共文件系统中,能够方便整个系统的配置管理,减小重复操做。docker
有人会有疑问:现在服务器已经很廉价,彻底能够在不一样服务器上运行不一样服务,不必使用docker。数据库
若是硬件服务器对你来讲确实是廉价的,以致于搭建100个节点的hadoop集群,大多数状况下运行mapreduce job的节点书不超过10个,剩余90台服务器常年处于休息状态,对你来讲也可有可无的话,我无话可说。抛开硬件成本不说,docker容器的隔离机制也是集群部署中的一大亮点!服务器
本文的目的是经过docker容器,使用更少的硬件资源来运行一样的job,容器相对于服务器来讲是更细粒度的资源。同时因为容器的隔离机制,一个容器发生故障并不影响到其余容器及宿主主机。此外这种架构还解决了单点故障问题,每台服务器运行着相同的docker镜像,经过定时向zookeeper发送心跳,来监控全部容器的健康状态,心跳是一份包含该服务器上全部运行着的容器的名单。那么有可能发生两种突发状况:架构
对于第一种状况,因为心跳包含全部运行着容器的名单,当服务器某个容器挂掉,好比mysql意外终止,zookeeper经过两次心跳对比,发现缺乏mysql,因而启动应急措施,重启该服务器的mysql容器。若是宿主主机宕机,zookeeper在一段时间内未接受该服务器的心跳,发现宕机,而后在其他剩下的服务器中重启上一次心跳名单中运行着的容器,如图所示
整个系统的实现还有一个前提,就是使不一样宿主主机上的docker容器可以通讯,能够参见这篇。
最终的目的是使整个架构看起来像在一台超级服务器(cpu,内存足够大,而且永不宕机)上运行hadoop。
本文持续更新。。。