【干货】Google Cloud Dataflow:从原理到应用

【导语】这是格灵深瞳Open Day当天实时数据分析小组的讨论中,我们的软件“攻城狮”陈震整理的他当天的精彩分享,欢迎各位提出自己的想法。如果您也有观点想要分享,可以随时在线留言。


正文分割线

本次Talk的题目是Google Cloud Dataflow:from concepts to practice。 Google Cloud Dataflow(下简称Dataflow)是Google刚刚上线的一个实时大数据并行处理服务。

Dataflow这个概念第一次与开发者见面是在2014年6月的Google I/O大会上,同年12月,Google首先公布了Dataflow的Java SDK及SDK的源代码。2015年3月初,Dataflow正式上线,作为一个云服务产品出现在Google Cloud产品线中并提供Alpha版本的试用申请。

【干货】Google Cloud Dataflow:从原理到应用_第1张图片

在传统的MapReduce大数据并行处理中,单一的MapReduce节点无法满足复杂的业务需求,因此多数的大数据处理是以MapReduce多节点管道方式搭建的。这需要开发者编写额外的代码将多个MapReduce节点连接起来并管理各节点的状态和相互之间的数据传输,同时还要维护一个很大的服务器集群;另外,大数据的实时计算也给MapReduce带来了极大的挑战。这是Google开发Dataflow的初衷。作为Google Cloud的一个产品,Dataflow可以与App Engine、Compute Engine,Google Storage、Google Datastore、Google Cloud SQL云存储服务结合,快速搭建一个较为完整的实时大数据并行处理系统。Dataflow简化了系统开发的流程,开发者使用SDK在本地开发、测试和调试并随时将代码提交到云服务上测试和运行。Dataflow会自动对用户的流处理系统进行优化并分发到多个计算节点上并发执行。

用户开发的大数据系统可从Google提供的多种存储服务和Pub/Sub服务中读取数据进行处理后再写入到指定的存储服务或Pub/Sub服务中。由于Google的存储服务采用了成熟的业界标准,因此用户同样可以将Hadoop、Spark等产品集成到Dataflow中。

【干货】Google Cloud Dataflow:从原理到应用_第2张图片

Dataflow底层依赖于两个技术:FlumeJava和MillWheel。与2003年的Map-Reduce、BigTable等概念类似,Google研究院于2010年和2013年分别发表的两篇论文介绍FlumeJava和MillWheel,在此之前,这两个项目在Google内部均有一定程度的成功实践。

在FlumeJava发布之后,有不少媒体称其为下一代的MapReduce(个人认为这个评价过高)。FlumeJava是一个Java库,提供了一个更简单的大数据并行处理框架和工具,其底层的算法模型还是MapReduce。FlumeJava在更高的层面上对MapReduce管道进行数据和流程的抽象,同时提供了内置的流程优化策略。FlumeJava将数据模型抽象为PCollection和PTable两个泛型数据结构,并在这两个数据结构上定义了parallelDo(),groupByKey(),combineValues()和flatten()四个操作原语,同时在这四个操作原语的基础上定义了count(),join()和top()等常用操作。通过与传统MapReduce、专家优化的MapReduce作对比,FlumeJava在所需要的代码行数,方法个数和执行时间上均优于传统MapReduce并同专家优化的MapReduce系统不相上下。也就表明通过FlumeJava,普通开发者能在更短时间内就开发出专家级的MapReduce系统。

Dataflow的另外一个底层技术是MillWheel,其提供了带容错机制的实时数据处理模型。从Google研究院发表的论文来看,MillWheel是一种模型和算法而没有提供可编程框架,因此目前我们没有机会了解其代码层面的实现。从原理上讲,MillWheel内置容错机制,采用低水位(low watermarks)机制避免因网络延迟等因素导致的数据流顺序不一致的问题。实时数据处理是近几年的热点,市面上已有的产品包括Storm,Spark Streaming,Yahoo S3,Samza等。与这四者的对比显示MillWheel基本上是这几种产品特性的整合。

了解了FlumeJava和MillWheel的基本概念和原理,我们就更容易理解Dataflow的运行机制和特性。Dataflow可以简单的认为是二者的集成,但是我相信Google肯定花费了大量的精力来优化二者以及与整个Google Cloud产品线的集成。

【干货】Google Cloud Dataflow:从原理到应用_第3张图片

上图是Dataflow的一个示例代码,开发了一个大家耳熟能详的Word Count应用。通过代码可以看出基于Dataflow编写并发的大数据处理管道更容易也更简单。通过Dataflow提供的SDK可以很方便的把改代码提交到云服务上执行,并通过Developer Console进行监控和管理。

小结:Google Dataflow是为了解决传统MapReduce应对复杂业务流程的困难并结合实时数据分析的需求而开发的云服务,给开发者提供了一个快速开发、测试、debug和生产运行、监控的SDK、工具及云服务,其本身没有创造性的理论或算法模型。由于是FlumeJava和MillWheel的集成,并可以调用Google Cloud提供的存储和Pub/Sub服务,因此可以在批处理和实时计算二者之间进行无缝地切换。目前的缺陷是版本还不稳定;Google Cloud本身提供的服务还比较少;发布时间尚短,没有一个较为成功的商业案例。但是,Google作为直接开启大数据潮流的先驱,其提供的大数据平台还是值得我们去研究和探索的。

【干货】Google Cloud Dataflow:从原理到应用_第4张图片

你可能感兴趣的:(【干货】Google Cloud Dataflow:从原理到应用)