介绍

Google Cloud Dataflow是一种构建、管理和优化复杂数据处理流水线的方法,集成了许多内部技术,如用于数据高效并行化处理的Flume和具有良好容错机制流处理的MillWheel。Dataflow当前的API还只有Java版本(其实Flume本身是提供Java/C++/Python多种接口的,MillWheel也提供Java/C++的API)。

相比原生的map-reduce模型,Dataflow有几个优点:

  1. 可以构建复杂的pipeline,在这不妨引用Google云平台的产品营销总监Brian Goldfarb的话

    Cloud Dataflow可以用于处理批量数据和流数据两种。在一个世界性事件(比如演讲当中的世界杯事件)中,实时分析上百万twitter数据。在流水线的一个部阶段责读取tweet,下一个阶段负责抽取标签。另一个阶段对tweet分类(基于情感,正面负面或者其他方面)。下一个阶段过滤关键词等等。相比之下,Map/Reduce这个用来处理大数据的较早模型,处理这种实时数据已经力不从心,而且也很难应用到这种很长很复杂的数据流水线上。

  2. 不需手工配置和管理MapReduce集群。自动进行代码优化和资源调度,使得开发者的主要精力可以放在业务逻辑本身

  3. 支持从Batch到Streaming模式的无缝切换:
    假设我们要根据用户在twitter上产生的内容,来实现一个hashtags自动补全的功能

    Example: Auto completing hashtags
    Prefix Suggestions
    ar #argentina, #arugularocks, #argylesocks
    arg #argentina, #argylesocks, #argonauts
    arge #argentina, #argentum, #argentine


    代码几乎和数据流一一对应,和单机程序的编写方式差别不大

    Dataflow将数据抽象为一个PCollections (“parallel collections”),PCollection可以是一个内存中的集合,从Cloud Storage读进来,从BigQuerytable中查询得到,从Pub/Sub以流的方式读入,或者从用户代码中计算得到。
    为了对PCollection进行处理,Dataflow提供了许多PTransforms (“parallel transforms”),例如ParDo (“parallel do”) 对于PCollection中每一个元素分别进行指定操作(类似MapReduce中的Map和Reduce函数,或者SQL中的WHERE),GroupByKey对一个key-value pairs的PCollection进行处理,将相同key的pairs group到一起(类似MapReduce中的Shuffle步骤,或者SQL中的GROUP BY和JOIN)。
    此外,用户还可以将这些基本操作组合起来定义新的transformations。Dataflow本身也提供了一些常用的组合transformations,如Count, Top, and Mean。
    这是一个经典的批处理的例子

    转化为streaming做法只需改动数据源。如果我们现在希望模型提供的是最新的热词,考虑数据的时效性,只需额外添加一行设置数据window的操作,比如说60min以前的数据我们就不要了

  4. Dashboard:
    还可以在developer console中了解流水线中每个环节执行的情况,每个流程框基本对应着一行代码

  5. 生态系统:
    BigQuery作为存储系统是Dataflow的一个补充,经过Dataflow清洗和处理过的数据,可以在BigQuery中存下来,同时Dataflow也可以读取BigQuery以进行表连接等操作。如果想在Dataflow上使用一些开源资源(比如说Spark中的机器学习库),也是很方便的

为了配合Dataflow,Google Cloud Platform还为开发者提供了一系列工具,包括云保存,云调试,云追踪和云监控。

比较

  1. Cascading/Twitter Scalding
    1) 传统Map-reduce只能处理单一的流,而Dataflow可以构建整个pipeline,自动优化和调度,Dataflow乍一听感觉非常像Hadoop上的Cascading(Java)/Scalding(Scala)。
    2) 它们的编程模型很像,Dataflow也可以很方便做本地测试,可以传一个模拟集合,在上面去迭代计算结果,这一点是传统Map-reduce望尘莫及的。
  2. Twitter Summingbird
    而将批处理和流处理无缝连接的思想又听起来很像把Scalding和Strom无缝连接起来的twitter summingbird(Scala).
  3. Spark
    1) Spark也有可以构建复杂的pipeline做一代码优化和任务调度的好处,但目前还需要程序员来配置资源分配。
    2) Spark在设计分布式数据集API时,模拟了Scala集合的操作API,使得额外的语法学习成本比Dataflow要低。
    3) 不过Dataflow似乎并没有提内存计算的事儿,而这一点可以说是Spark最本质的特征。不过它支持将Spark作为Open Source工具,连入Cloud框架作为补充。
    4) 分布式计算中除了Batch和Streaming,Graph也是一个重要的问题,Spark在这方面有GraphX,Dataflow在未来也会将处理Graph处理(Pregel)这块整合进去。

参考

本文的内容主要基于官方资料

Sneak peek: Google Cloud Dataflow, a Cloud-native data processing service

Google I/O 2014 - The dawn of "Fast Data"(国内用户下载)

链接

Google Cloud Dataflow 简单理解

Cloud Dataflow :云计算时代的新计算模式

Google Announces Cloud Dataflow Beta at Google I/O

Google Launches Cloud Dataflow, A Managed Data Processing Service

Mapreduce successor google cloud dataflow is a game changer for hadoop thunder

论文

FlumeJava: Easy, Efficient Data-Parallel Pipelines,PLDI,2010

MillWheel: Fault-Tolerant Stream Processing at Internet Scale,Very Large Data Bases (2013), pp. 734-746

转载请注明出处:
十分钟了解分布式计算:Google Dataflow

十分钟了解分布式计算:Google Dataflow的更多相关文章

  1. 十分钟了解分布式计算:GraphX

    GraphX原型论文 GraphX是Spark中用于图(e.g., Web-Graphs and Social Networks)和图并行计算(e.g., PageRank and Collabora ...

  2. 十分钟了解分布式计算:Spark

    Spark是一个通用的分布式内存计算框架,本文主要研讨Spark的核心数据结构RDD的设计思路,及其在内存上的容错.内容基于论文 Zaharia, Matei, et al. "Resili ...

  3. 十分钟了解分布式计算:Petuum

    Petuum是一个机器学习专用分布式计算框架,本文介绍其架构,并基于文章 More Effective Distributed ML via a Stale Synchronous Parallel ...

  4. 十分钟了解分布式计算:GraphLab

    GraphLab是一个面向大规模机器学习/图计算的分布式内存计算框架,由CMU在2009年开始的一个C++项目,这里的内容是基于论文 Low, Yucheng, et al. "Distri ...

  5. Google Dataflow

    十分钟了解分布式计算:Google Dataflow 介绍 Google Cloud Dataflow是一种构建.管理和优化复杂数据处理流水线的方法,集成了许多内部技术,如用于数据高效并行化处理的Fl ...

  6. 花十分钟,让你变成AI产品经理

    花十分钟,让你变成AI产品经理 https://www.jianshu.com/p/eba6a1ca98a4 先说一下你阅读本文可以得到什么.你能得到AI的理论知识框架:你能学习到如何成为一个AI产品 ...

  7. 后端技术杂谈11:十分钟理解Kubernetes核心概念

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 本文转自 https://github.com/h2pl/Java-Tutorial 喜欢的 ...

  8. 通过Amazon AWS 十分钟搭建私人主机 自由的不要不要的

      首先承认有点标题党了,当时自己搞的时候可不止十分钟,好吧,我承认是坑太多了,所以特意开了一篇博文,就是要准备尝试的和我一样的菜鸟们,可以真正的十分钟搞定.  当然高手可能用不上十分钟. 首先,就是 ...

  9. 基于 Laravel-Admin 在十分钟内搭建起功能齐全的后台模板

    http://laravelacademy.org/post/6468.html 1.简介 为 Laravel 提供后台模板的项目越来越多,学院君已陆续为大家介绍过Laravel Angular Ad ...

随机推荐

  1. 几个实用的mysql函数

    在工作中,处理数据时候往往使用php要废很多脑筋和写很多东西,如果不考虑代码的阅读性试试几个mysql的函数可以解决许多常见需求: 1.截取字符串函数: left() 从左开始截取字符串  right ...

  2. jsp页面往mysql里插入中文后数据库里显示乱码

    1.JSP页面乱码 这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可,<%@ page contentType="text ...

  3. 专家解读:BPM与OA的区别

    演进历程 传统OA 模块化架构,仅能满足管理执行的刚性效率,系统的专业化程度有限. BPM 平台化架构,管理要求精细化程度高,系统更专业化,更注重整合. BPM SAAS 基于云架构,跨组织社交化,系 ...

  4. 在QtCreator 2.1.0 下使用opencv231库加载图片并显示

    在.pro中库连接如上图,具体规则正在学习,注意debug下连接*d.lib.release下链接.lib.没有d的. 如果出现imread不可以加载图片,cvloadImage却可以,则是上面说的连 ...

  5. C# 多线程限制方法调用(monitor)

    多线程执行方法 改方法没有执行完时 别的方法不能调用次方法.用循环执行一个方法可以需要一分钟 在这一分钟只内任何 成员都不能再调用该方法. class MonitorSample { ; //生产者和 ...

  6. matlab初学之plot颜色和线型

    文章出处: http://jiangshuxia.9.blog.163.com/blog/static/3487586020116711375339/ 字母        颜色          标点 ...

  7. Mac下手动安装SafariDriver extension

    环境:Mac OS X Yosemite 10.10.4下, Safari 8 Step 1:第一次运行SafariDriver时,先找到WebDriver extension的安装路径,比如/Use ...

  8. 触发Full GC执行的情况

    除直接调用System.gc外,触发Full GC执行的情况有如下四种. 1. 旧生代空间不足 旧生代空间只有在新生代对象转入及创建为大对象.大数组时才会出现不足的现象,当执行Full GC后空间仍然 ...

  9. The next day to learn English

    if you smail when no  one else is around,you really meat it.

  10. [转]python问题:IndentationError:expected an indented block错误解决

    分类: python学习笔记2012-07-07 17:59 28433人阅读 评论(4) 收藏 举报 python语言 原文地址:http://hi.baidu.com/delinx/item/17 ...