Google Dataflow
十分钟了解分布式计算:Google Dataflow
介绍
Google Cloud Dataflow是一种构建、管理和优化复杂数据处理流水线的方法,集成了许多内部技术,如用于数据高效并行化处理的Flume和具有良好容错机制流处理的MillWheel。Dataflow当前的API还只有Java版本(其实Flume本身是提供Java/C++/Python多种接口的)。
相比原生的map-reduce模型,Dataflow有几个优点:
可以构建复杂的pipeline,在这不妨引用Google云平台的产品营销总监Brian Goldfarb的话
Cloud Dataflow可以用于处理批量数据和流数据两种。在一个世界性事件(比如演讲当中的世界杯事件)中,实时分析上百万twitter数据。在流水线的一个部阶段责读取tweet,下一个阶段负责抽取标签。另一个阶段对tweet分类(基于情感,正面负面或者其他方面)。下一个阶段过滤关键词等等。相比之下,Map/Reduce这个用来处理大数据的较早模型,处理这种实时数据已经力不从心,而且也很难应用到这种很长很复杂的数据流水线上。
不需手工配置和管理MapReduce集群。自动进行代码优化和资源调度,使得开发者的主要精力可以放在业务逻辑本身

支持从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以前的数据我们就不要了
Dashboard: 还可以在developer console中了解流水线中每个环节执行的情况,每个流程框基本对应着一行代码

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

为了配合Dataflow,Google Cloud Platform还为开发者提供了一系列工具,包括云保存,云调试,云追踪和云监控。
比较
- Cascading/Twitter Scalding: 1) 传统Map-reduce只能处理单一的流,而Dataflow可以构建整个pipeline,自动优化和调度,Dataflow乍一听感觉非常像Hadoop上的Cascading(Java)/Scalding(Scala)。 2) 它们的编程模型很像,Dataflow也可以很方便做本地测试,可以传一个模拟集合,在上面去迭代计算结果,这一点是传统Map-reduce望尘莫及的。
- Twitter Summingbird: 而将批处理和流处理无缝连接的思想又听起来很像把Scalding和Strom无缝连接起来的twitter summingbird(Scala).
- 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处理这块整合进去。
参考
本文的内容主要基于官方资料
Sneak peek: Google Cloud Dataflow, a Cloud-native data processing service
Google I/O 2014 - The dawn of "Fast Data"(国内用户下载)
链接
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
转载请注明出处: 十分钟了解分布式计算:Google Dataflow
Google Dataflow的更多相关文章
- 十分钟了解分布式计算:Google Dataflow
介绍 Google Cloud Dataflow是一种构建.管理和优化复杂数据处理流水线的方法,集成了许多内部技术,如用于数据高效并行化处理的Flume和具有良好容错机制流处理的MillWheel.D ...
- 实时计算大数据处理的基石-Google Dataflow
此文选自Google大神Tyler Akidau的另一篇文章:Streaming 102: The world beyond batch 欢迎回来!如果您错过了我以前的帖子,Streaming ...
- google dataflow model 论文
http://www.chinacloud.cn/show.aspx?id=24446&cid=17
- 资源list:Github上关于大数据的开源项目、论文等合集
Awesome Big Data A curated list of awesome big data frameworks, resources and other awesomeness. Ins ...
- [翻译]Kafka Streams简介: 让流处理变得更简单
Introducing Kafka Streams: Stream Processing Made Simple 这是Jay Kreps在三月写的一篇文章,用来介绍Kafka Streams.当时Ka ...
- 《图解Spark:核心技术与案例实战》作者经验谈
1,看您有维护博客,还利用业余时间著书,在技术输出.自我提升以及本职工作的时间利用上您有没有什么心得和大家分享?(也可以包含一些您写书的小故事.)回答:在工作之余能够写博客.著书主要对技术的坚持和热爱 ...
- Awesome Big Data List
https://github.com/onurakpolat/awesome-bigdata A curated list of awesome big data frameworks, resour ...
- 初探Apache Beam
文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/9010748.html 转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...
- Apache Beam实战指南 | 手把手教你玩转KafkaIO与Flink
https://mp.weixin.qq.com/s?__biz=MzU1NDA4NjU2MA==&mid=2247492538&idx=2&sn=9a2bd9fe2d7fd6 ...
随机推荐
- 定制XP引导屏幕背景图像和替换windows这句话
(一)带滚动条界面变化 1.制作640*480位图,4位置16肤色,尺寸小于200Kb. 2.位图名boot.bmp,并将其复制到C:/windows根文件夹 3.更改boot.ini档.我的电脑/属 ...
- MySQL 更新中国列:1366 Incorrect string value 问题解决了
周围环境:Win7 64位置,mysql-5.6.25-winx64,MySQL workbench 问题:MySQL在更新时出现异常: warning(s): 1366 Incorrect stri ...
- oracle PL/SQL(procedure language/SQL)程序设计之函数+过程+包(转)
匿名PL/SQL块回顾 DECLARE (可选) 定义在PL/SQL块中要使用的对象 BEGIN (必须) 执行语句 EXCEPTION (可选) 错误处理语句 END; (必 ...
- Parse 和 Swift 搭建一个像 Instagram
如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用? [编者按]本篇文章作者是Reinder de Vries,既是一名企业家,也是优秀的程序员,发表多篇应用程序的博客 ...
- thinkphp学习笔记8—命名空间
原文:thinkphp学习笔记8-命名空间 新版本(3.2)中采用命名空间的方式定义和加载类库文件,解决多个模块之间的冲突问题,并实现了更加高效的自动加载机制. 需要给类库定义所在的命名空间,命名空间 ...
- 为什么解析 array_column不可用,
不久前,自己在一个小项目,我要拿出每个元素的一维数组key的值,一维阵列的形成,突然想到php 有一种功能,实现. $array = array ( array ( "id" =& ...
- android开源系列:CircleImageView采用圆形控制它们的定义
1.定义自己的圆形控制github住址:https://github.com/hdodenhof/CircleImageView 基本的类: package de.hdodenhof.circleim ...
- React.js终探(六)
在React中,我们怎么样使用它跟CSS 3 动画结合在一起使用呢? CSS3 Transitoin CSS3动画要求DOM属性变化的时候才能够被触发.所以这就需要我们把属性变化后的React元素渲染 ...
- linux_安装 redis
Installation Download, extract and compile Redis with: $ wget http://download.redis.io/releases/redi ...
- uva 11987 Almost Union-Find (并检查集合)
标题效果: 三操作. 1. 合并两个集合 2.代替所述第二组的第一个元素 3.输出设置数量,并.. IDEAS: 使用p该元素的记录数,其中集合,建立并查集. #include <cstdio& ...