【编者的话】随着Hadoop 成为大数据的事实标准,Hadoop的生态环境也在不断膨胀,环境搭建的复杂性,给开发和测试带来了不便。如何用Docker来降低Hadoop 开发中的复杂性,Crayon 带来了他们的方案。
从历史上来看,企业软件供应商为了控制他们客户端的安装基础的 开发环境 ,已经发展成了一场斗争。如果没有对部署环境的适当控制,排除客户端的任何问题将成为一场灾难。
最初,公司提供一个包含定制的 操作系统镜像 的应用。通过安装软件作为其一部分组成,它给予了从硬件到操作系统的对环境的完全的控制力。但是它导致很难为企业解决问题。企业软件供应商不得不与其它公司形成合作关系,并且依赖这些公司,来为他们分发硬件平台。他们必须寻找多个合作伙伴关系,以避免被锁定在一个合作伙伴。
服务器虚拟化用来解决多供应商的硬件平台和环境问题。它帮助企业软件供应商有效的发布他们的软件,通过在部分 虚拟机管理程序 之上进行测试和认证。它提供了一个良好的顶层抽象,企业软件应用能够在其中部署和测试。在我早先工作的组织中,我们使用生成的 ova 镜像,用来在虚拟机管理程序上创建 虚拟机 实例,对于一个完全封闭的应用,这有助于创建相同结果,更便于管理。
这个模式有几个问题无法解决。首先,构建ova 镜像,你需要有大量的系统级的技能。其次是管理分布式环境。当一个软件要求分布式的安装在多节点上,仍然有大量的手工操作包括启动这些虚拟机。随着企业开始使用云作为他们的基础设施,不考虑应用的种类(即使当应用运行在一个节点中),管理一个分布式环境变得更重要。
Docker 的问世正好解决了这两个问题。Docker 允许任何人很简单的快速创建、执行和测试Docker 容器。有大量的框架,用于分布式Docker 的管理,比如Google 的 kubernetis 、 CoreOS 、 Multi-Container orchestration 等等,这些都很容易和Docker 结合。
除了这些,相对于虚拟机,Docker是非常轻量级的。如下图所示,它避免了虚拟机管理程序的附加层,运行一个轻量级的 Docker 引擎 。它支持Windows 和 Boot2Docker 。
虽然Docker 试图解决很多问题,但是我们选择了“构建一致的环境便于去复制”这一方面。
最初在Crayon,在我们的开发周期中,为了测试很少的代码,我们不得不改变我们的 MapReduce 程序。我们需要将我们的程序放到 AWS 环境中的生产集群中,这主要是为了解决配置本地用于测试的 Hadoop 环境的时间和精力。当一个 POC 仅需要Hadoop 生态系统中的一些组件来完成工作时,反复的配置系统是没有效率的,尤其当 Hadoop 生态系统 的组件一直在增加时。
我们使用 SequenceIQ 提供的工具来开始我们的自动化Hadoop 集群之旅,几分钟之内我们就能够启动一个多节点的Hadoop 集群。有趣的是,他们采用blueprints 的格式来抽象化集群的配置,通过Docker 的帮助来自动化集群的配置和启动。 Hortonworks 收购SequenceIQ 表明了SequenceIQ 所做的自动化Hadoop 集群开发这类工作的重要性。
SequenceIQ 启发了我们采用Docker。我们通过定制和调整SequenceIQ 的Docker 镜像取得了一些进展。我们为数据处理构建了一个完全的Docker 化平台。
对于我们所有使用Hadoop 组件的poc,我们创建了一致的,易于复制的Docker 实例,取代了之前人们试着去在本地安装Hadoop 生态系统的每个组件,对于开发和测试环境的需要,我们只需要创建一次,便能在任何时间和地点使用它。
这就是我们达到一致的开发,测试,集成和部署的方式之旅,是无缝的。 我们期待让Docker 成为我们默认的神器,直到部署阶段。 虽然在企业环境中可能存在一些挑战,我们希望会有一个行业广泛采用Docker。 请继续翻看我们关于我们目前所作的尝试和成就的详细内容。
原文链接: Why we chose Docker to build Crayon’s data processing platform (翻译:覃璐)