本文节选不保证论文的完整性和理解的准确性 

原始的MapReduce。分Map,Shuffle,Reduce。

Map里包含shards。

Shuffle理解为groupByKey的事情。Reduce里包含Combiner,能够定义Sharder来控制key怎么和Reducer worker相应起来。

核心抽象和基本原语

PCollection<T>是一个不可变的bag。能够是有序的(Sequence),也能够是无序的(Collection)。PCollection能够来自于内存里的Java PCollection对象。也能够读取自文件。

PTable<K, V>,能够看成PCollection<Pair<K, V>>,不可变无序multi-map。

第一个原语是parallelDo()。把PCollection<T>变成新的PCollection<S>,处理方式定义在DoFn<T, S>里。emitFn是call-back,传给用户的process(…),使用emitFn.emit(outElem)发射出去。parallelDo()能够在map或reduce中使用,DoFn不应该使用闭包外全局的变量,(inline function)纯操作自己的inputs。

第二个原语是groupByKey()。把PTable<K, V>转变成PTable<K,Collection<V>>,

第三个原语是combineValues(),接收input为PTable<K,Collection<V>>和一个V的符合结合律的方法,返回PTable<K, V>。

第四个原语是flatten(),接收一个PCollection<T>的list,返回一个PCollection<T>

衍生原语(Derived Operations)

count(),接收PCollection<T>,返回PTable<T, Integer>

实现方式为parallelDo()。groupByKey()和combineValues()

join(),接收PTable<K, V1>,PTable<K, V2>。返回PTable<K,Tuple2<Collection<V1>, Collection<V2>>

实现方式为,第一步,使用parallelDo()把每一个input PTable<K, Vi>变成通用的PTable<K, TaggedUnion2<V1,V2>>。第二步使用flattern来combine tables;第三步。使用groupByKey()作用于被扁平过了tables。产生PTable<K,Collection<TaggedUnion2<V1, V2>>>

top(),接收比較函数和N,

实现方式为parallelDo(),groupByKey()和combineValues()

延迟分析(Deffered Evaluation)

PCollection对象有两种状态,defferred或materialized。

FlumeJava.run()真正触发execution plan的物化/运行。

PObjects

PObject<T>用于存储Java对象,物化过了之后能够使用getValue()方法获得PObject的值。有点像Future。

operate()方法

优化器

parallelDoFusion(融合)

Producer-Consumer and Sibling Fusion,例如以下图

大致是说,ABCD这几种由同一份input产生的parallelDo。能够融合起来在一个parallelDo,即A+B+C+D,里处理。

一些中间结果也能够不要。

MapShuffleCombineReduce(MSCR) Operation

FlumeJava优化器的核心在于把ParallelDo。GroupByKey,CombineValues和Flattern的组合转换成一个个单个的MapReduce。

MSCR是一个中间层的操作,有M个input channels(每一个能够进行map操作)。有R个Reduce channels(每一个能够进行shuffle,或combine,或reduce操作)。

单个input channal m,接收PCollection<Tm>作为输入,运行R路output输出的ParallelDo “map”操作。产生R个PTable<Kr, Vs> outputs。每一个output channel r flatterns它的M个inputs,然后

a)  进行一次GroupByKey的“shuffle”,或CombineValues的“combine”。或Or-output的ParallelDo “reduce”,然后把结果写出到Or-output PCollections

b)  把inputs直接写出为outputs

前者这种output channel称为”Grouping” channel,后者称为”pass-through” channel。”pass-through” channel同意map的output成为一个MSCR操作的输出。

每一个MSCR操作能够用一个MapReduce完毕。它让MapReduce更加通用,体如今:

Ø  同意多个reducers和combiners。

Ø  同意每一个reducer产生多个outputs;

Ø  消除了每一个reducer必须以同样的key为input来产出output的约束;

Ø  同意pass-through形式的outputs。

所以MSCR是优化器里非常好的一个中间操作目标。

MSCR Fusion

MSCR操作产生于一些相关的GroupByKey操作集合。相关的GroupByKey操作是指产生于同样的input(如Flattern操作),或被同一个parallelDo操作制造出来的input。

这部分比較晦涩难懂啊。可是是理解核心

全局优化策略

优化要达到的效果是最后的运行计划里包含尽可能少的又高效的MSCR操作。

1.  Sink Flatterns。把扁平操作下沉,如h(f(a)+f(b))=> h(f(a))+h(f(b)),即分配律。然后又能和parallelDo的融合特性结合起来,如(hof)(a)+(hog)(b)

2.  Lift CombineValues。假设CombineValues紧跟着GroupByKey操作。

3.  Insert fusion blocks。假设俩GroupByKey操作是由生产者-消费者的ParallelDo chain连起来的。ParallelDo要在GroupByKey里做上调和下移。

4.  Fuse ParallelDos。

5.  Fuse MSCRs。

针对这几个策略的实施。后面举了个样例而且描绘了详细的运行图。非常帮助理解

优化的不足和未来工作

优化器没有分析用户写的方法,比方估算input和output数据量大小。

也没有改动用户的代码来做优化。

须要做一些分析避免运算的反复,及去除不必要或不合理的groupByKey。

Executor

优化运行结束后。

它现在支持batch该模式提交作业。

在操作。FlumeJava做到人性化发展、debug,创建自己主动删除文件。自己主动识别数据并行调整操作量,改变操作模式(remote)而这样的事情。

掌声 :)

本文摘录 - FlumeJava的更多相关文章

  1. 本文摘录 - Infobright

    背景 论文 Brighthouse: AnAnalytic Data Warehouse for Ad-hoc Queries.VLDB 2008 brighthouse它是一个面向列的数据仓库.在数 ...

  2. effective C++学习三(仅供个人学习记录,本文摘录effective C++)

    条款 3:尽量用 new 和 delete 而不用 malloc 和 free  把 new和 delete 与malloc 和 free 混在一起用也是个坏想法.对一个用 new 获取来的指针调用 ...

  3. effective C++学习二(仅供个人学习记录,本文摘录effective C++)

    条款 2:尽量用<iostream>而不用<stdio.h> scanf 和 printf 很轻巧,很高效,你也早就知道怎么用它们,这我承 认.但尽管他们很有用,事实上 sca ...

  4. effective C++学习一(仅供个人学习记录,本文摘录effective C++)

    条款 1:尽量用 const 和 inline 而不用#define   #define ASPECT_RATIO 1.653 编译器会永远也看不到 ASPECT_RATIO 这个符号名,因为在源码进 ...

  5. 高效CSS开发核心要点摘录

    做网站的,我们都知道尽量减少请求数,压缩CSS代码量,使用高效CSS选择符等方式可以来提高网站的载入速度和访问速度,也就是优化网站的性能. 下面分析了一些CSS的书写方式,很多都是我们知道并且正在使用 ...

  6. What's new in Windows 10 Enterprise with Microsoft Edge.(Windows 10 新功能)

    What's new in Windows 10 Enterprise with Microsoft Edge --带有Edge浏览器的Windows 10 企业版的新功能 本文摘录自公司群发邮件, ...

  7. UART to Serial Terminal(转载)

    前一篇<UART Explained>介绍了UART的基本信息,重点分析了UART的信号.本文摘录的文章则重点介绍了波特率(Baud Rate)相关的内容,波特率越高,传输速度越快,但实际 ...

  8. Node 进阶:express 默认日志组件 morgan 从入门使用到源码剖析

    本文摘录自个人总结<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 章节概览 morgan是express默认的日志中间件, ...

  9. Nodejs进阶:如何玩转子进程(child_process)

    本文摘录自个人总结<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 模块概览 在node中,child_process这个模 ...

随机推荐

  1. Emmet超详细教程

    Emmet超详细教程 一.总结 一句话总结:用的时候照着用,能提高效率. 1.快捷键如何使用? 需要敲代码的时候把快捷键放到旁边即可.照着敲. 二.Emmet超详细教程 Emmet的前身是大名鼎鼎的Z ...

  2. Behavioral模式之Memento模式

    1.意图 在不破坏封装性的前提下,捕获一个对象的内部状态.并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态. 2.别名 Token 3.动机 有时候有必要记录一个对象的内部状态.为 ...

  3. java连接MongoDB查询导出为excel表格

    背景 因为项目需求.每一个星期须要统计每一个公众号7天的訪问数,月底就须要统计一个月的訪问数,40多个公众号.每次手动统计都须要花费1个小时,总之是一项无技术耗时耗神的手工活. 于是.想写个程序来统计 ...

  4. apche commons项目简介 分类: B1_JAVA 2014-06-26 11:27 487人阅读 评论(0) 收藏

    1.apche commons项目封装了日常开发中经常使用的功能,如io, String等. http://commons.apache.org/ Apache Commons项目的由三部分组成: T ...

  5. js进阶正则表达式方括号(方括号作用)(js正则是在双正斜杠之中:/[a-z]/g)

    js进阶正则表达式方括号(方括号作用)(js正则是在双正斜杠之中:/[a-z]/g) 一.总结 方括号:范围 圆括号:选 大括号:数量 1.js正则是在双正斜杠之中: var reg2=/[a-z]/ ...

  6. Django之文章归档

    1.任务描述:将博文按照时间月份归档 2.源代码: views.py def getPage(request, article_list): paginator = Paginator(article ...

  7. 使用Nexus搭建Maven仓库

    1.目的 通过建立自己的私服,能够减少中央仓库负荷.节省外网宽带.加速maven构建.自己部署构件等,从而高效的使用maven,nexus是当前流行的Maven仓库管理软件. 2.下载nexus 2. ...

  8. Google Guava官方教程

    原文链接 译文链接 译者: 沈义扬,罗立树,何一昕,*武祖 * 校对:方腾飞 引言 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] . ...

  9. PatentTips - OpenCL compilation

    BACKGROUND The present disclosure relates generally to integrated circuits, such as field programmab ...

  10. [Angular] Pipes as providers

    In this example, we are going to see how to use Pipe as providers inject into component. We have the ...