(这是有关容器化世界里的数据科学与工程系列博客文章的第一部分)。
我非常肯定,在去年,我见识了关于“容器”和 Docker 的大肆宣传。实际上,Bryan Cantrill( Joyent 的CTO)和Ben Hindman( Mesosphere 的创始人)近期宣布:2015年是“容器之年”(点击 这里 看他们的在线会议)。那么,这些宣传究竟是什么,它又如何与数据科学与工程中正在发生的事情有所关联的呢?
如果去年你都一直在“闭门造车”, 这里 是有关容器以及使用容器所带来的好处的一些介绍。然而,我在这里将要提供的资源,是给那些希望容器化他们的数据流水线的人看的。
容器化数据流水线的优势
让我们假设你已经拥有了一个漂亮的Kafka+Spark+Cassandar构成的数据流水线。你为什么还要花功夫来容器化其中的一个或多个部分呢?如下是一些原因:
- 易于部署:通过将你流水线中的一部分封装为单命令行、可部署的组件,你可以在需要的时候轻易的重新部署这些组件。例如,我非常确定,你的Spark用户已经意识到保持Spark为最新版本是一件非常辛苦的工作。然而,通过使用Spark的容器化版本,你可以使用一行命令就完成新版的部署(假设你清楚Spark任务的版本依赖关系的情况下)。
- 可扩展:由于部署容器非常简单,扩展资源也是非常简单的。当你的数据流水线压力大时,你可以快速的部署新的容器;而当数据流水线比较清闲时,你又可以轻易的销毁这些容器。
- 快速恢复:这里快速恢复的含义为,你可以非常容易的部署数据流水线中每个组件的多个容器,并且保证不会让这些容器中的任何一个失效。如果一个容器失效或功能错误,可以在其他正在运行的容器分担其工作的同时,销毁该容器并建立一个新的容器。
- 云灵活性:如果所有的数据流水线组件都是通过容器部署的,我们就可以灵活的利用任何一个云供应商来轻易的部署流水线。当你在一个云中获得权限后,你可以直接将流水线从其他云移植过来。或你可以动态编排流水线的部署位置,以优化资源利用率。
利用这些容器的组件开始工作
对我们而言,幸运的是,开发人员已经考虑到了数据流水线中普通组件的容器化工作。以下就是一些Docker镜像和Dockerfile,以帮助你快速将数据流水线运行起来:
- Spark
- Kafka 以及 Spotify的Kafka
- Cassandra
- MongoDB
- Storm
- Flink
- Postgres
- Hadoop
相关的项目
如果你真的对容器化的数据流水线感兴趣,以下是一些有趣的开源项目,你或许希望去了解、贡献和使用:
- Pachyderm流水线系统——“pps选择以容器内的流水线的方式来思考,而非以map或reduce任务的方式来思考”。流水线是表示在大的数据集上进行计算的一种通用方法。流水线也可以被容器化,以使得它们易于移植、隔离以及监控。
- Luigi——“一个帮助你构建复杂的脚本任务流水线的Python(2.7,3.3,3.4和3.5)包。它处理依赖关系解决、工作流管理、虚拟化、失效以及命令行集成等等”。更为特殊的,可以通过 此博客 来了解“利用Luigi管理虚拟化的数据流水线依赖关系”。
在本系列的第二部分,我将讨论在容器中研究数据科学。
原文 http://www.infoq.com/cn/articles/container-data-science-and-engineering-part01