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

  • 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 集群和其他的基础应用平台。

  Docker应用场景

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

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

从上自下,依次为:

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

      1. 将datanode容器挂载到外部文件存储系统中,可以通过增加外部文件系统的磁盘大小来提高hdfs存储能力。

      2. 将所有配置文件存放在公共文件系统中,可以方便整个系统的配置管理,减少重复操作。

  • 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。

本文持续更新。。。

Hadoop on Docker的更多相关文章

  1. Windows server 2016 支持容器 ,安装docker 搭建Ubuntu+hadoop (docker为服务器)

    一.Windows server 2016 是肯定要安装的, 关于如何启动容器功能那就是控制面板中增加与删除里面的启用了,很多地方可以百度到 二. 安装Ubuntu hadoop 等  待续 注意: ...

  2. Hadoop的Docker镜像构建

    1.Dockerfile ###Dockerfile -- beagin FROM ubuntu:trusty #MAINTAINER The Hue Team "https://githu ...

  3. 基于Docker快速搭建多节点Hadoop集群--已验证

    Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中.这篇教程介绍了利用Docker在单机上快速搭建多节点 Hadoop集群的详细步骤.作者在发现目前的Hadoop ...

  4. docker安装hadoop

    docker为hadoop的云化带来了极大便利,安装和应用也会更快更方便.进入正题: docker search hadoop 将会看到如下结果: INDEX NAME DESCRIPTION STA ...

  5. 使用Docker在本地搭建Hadoop分布式集群

    学习Hadoop集群环境搭建是Hadoop入门必经之路.搭建分布式集群通常有两个办法: 要么找多台机器来部署(常常找不到机器) 或者在本地开多个虚拟机(开销很大,对宿主机器性能要求高,光是安装多个虚拟 ...

  6. 基于Docker一键部署大规模Hadoop集群及设计思路

    一.背景: 随着互联网的发展.互联网用户的增加,互联网中的数据也急剧膨胀.每天产生的数据量数以万计,本地文件系统和单机CPU已无法满足存储和计算要求.Hadoop分布式文件系统(HDFS)是海量数据存 ...

  7. Docker 构建Hadoop环境

    参考如下文章: Docker安装Hadoop Docker在本地搭建Hadoop分布式集群 Docker快速搭建Hadoop测试环境 从0开始用docker搭建 hadoop分布式环境 Docker- ...

  8. Docker生态不会重蹈Hadoop的覆辙

    本文原作者是晏东(精灵云Ghostcould创始人),在读到<Docker生态会重蹈Hadoop的覆辙吗?>文章后的个人思考,里面的不少观点也是很不错的. 1.形态上的差异 2013年的时 ...

  9. Docker生态会重蹈Hadoop的覆辙吗?

    从网上找到了这篇2016年中旬刷爆朋友圈的文章,没有找到作者和首发出处.两年多过去了,文中分析的很多不确定性都有了结论,里面不少分析思路.观点还是很不错的. Docker的兴起和Hadoop何其相似 ...

随机推荐

  1. NHibernate系列文章四:NHibernate运行时监控

    摘要 有三种方式可以实现NHibernate运行时监控,监控的信息包括:执行了的SQL语句.NHibernate执行过程.数据库性能分析.这对我们学习NHibernate有很大的帮助,在工作中也能快速 ...

  2. idea 到myeclipse

    在上一篇博客使用maven进行开发过程管理之准备篇中提到了maven的基本概念.IT男罗书全觉得概念我是懂了,但是那些东西似乎离我很远啊.先开发再说吧, 于是IT男罗书全就在svn上取了源代码,并开始 ...

  3. 【转载】C++ function、bind和lambda表达式

    本篇随笔为转载,原贴地址:C++ function.bind和lambda表达式. 本文是C++0x系列的第四篇,主要是内容是C++0x中新增的lambda表达式, function对象和bind机制 ...

  4. TJI读书笔记13-内部类

    TJI读书笔记13-内部类 TJI读书笔记13-内部类 创建内部类 内部类和外部类的关系 .this和.new 内部类和向上转型 局部内部类 匿名内部类 匿名内部类的定义和初始化 使用匿名内部类来实现 ...

  5. arpg网页游戏之地图(二)

    [转]http://www.cnblogs.com/BlueWoods/p/4684557.html 这一节说说视窗,这个视窗,也就是游戏的视角.现在的网页游戏分为2D游戏,2.5D游戏和3D游戏,2 ...

  6. Net分布式系统之二:CentOS系统搭建Nginx负载均衡(下)

    上一篇文章介绍了VMWare12虚拟机.Linux(CentOS7)系统安装.部署Nginx1.6.3代理服务做负载均衡.接下来介绍通过Nginx将请求分发到各web应用处理服务. 一.Web应用开发 ...

  7. HTML第二天

    针对html做了一个知识点的思维导图

  8. dba管理

    ORACLE 锁表的解决方法及查找引起锁表SQL语句方法  1. ORACLE中查看当前系统中锁表情况 select * from v$locked_object 可以通过查询v$locked_obj ...

  9. ActiveMQ安装与使用

    一 .安装运行ActiveMQ: 1.下载activemq wget http://archive.apache.org/dist/activemq/apache-activemq/5.9.0/apa ...

  10. 极客DIY:使用树莓派制作一套“NAS+私有云盘+下载机”

    原创作者:HackLiu 0×00 前言 ‍ ‍ 如果你家里有多台设备需要联网需要娱乐,你一定会或多或少遇到设备碎片化带来的烦恼.当然,已经有很多厂商包括新晋的小米.360在内的互联网公司做了这个事情 ...