本摘抄不保证论文完整性和理解准确性 

原始的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. 《OAuth2.0协议安全形式化分析-》----论文摘抄整理

    ---恢复内容开始--- 本篇论文发表在计算机工程与设计,感觉写的还是很有水准的.实验部分交代的比较清楚 本篇论文的创新点: 使用Scyther工具 主要是在 DY模型下面 形式化分析了 OAuth2 ...

  2. 论文 查重 知网 万方 paperpass

    相信各个即将毕业的学生或在岗需要评职称.发论文的职场人士,论文检测都是必不可少的一道程序.面对市场上五花八门的检测软件,到底该如何选择?选择查重后到底该如何修改?现在就做一个知识的普及.其中对于中国的 ...

  3. The Dataflow Model 论文

    A Practical Approach to Balancing Correctness, Latency, and Cost in MassiveScale, Unbounded, OutofOr ...

  4. Apache Spark 2.2.0 中文文档 - Spark RDD(Resilient Distributed Datasets)论文 | ApacheCN

    Spark RDD(Resilient Distributed Datasets)论文 概要 1: 介绍 2: Resilient Distributed Datasets(RDDs) 2.1 RDD ...

  5. Apache Spark RDD(Resilient Distributed Datasets)论文

    Spark RDD(Resilient Distributed Datasets)论文 概要 1: 介绍 2: Resilient Distributed Datasets(RDDs) 2.1 RDD ...

  6. 智能机器人chatbot论文集合

    机器不学习 jqbxx.com-专注机器学习,深度学习,自然语言处理,大数据,个性化推荐,搜索算法,知识图谱 今年开始接触chatbot,跟着各种专栏学习了一段时间,也读了一些论文,在这里汇总一下.感 ...

  7. Google关于Spanner的论文中分布式事务的实现

    Google关于Spanner的论文中分布式事务的实现 Google在Spanner相关的论文中详细的解释了Percolator分布式事务的实现方式, 而且用简洁的伪代码示例怎么实现分布式事务; Pe ...

  8. 【论文】CornerNet:几点疑问

    1.cornerpooling的设计,个人觉得解释有些牵强. 这里的两个特征图如何解释,corner点为何是横向与纵向响应最强的点.如果仅仅当成一种奇特的池化方式,恰好也有着不错的效果,那倒是可以接受 ...

  9. [Berkeley]弹性分布式数据集RDD的介绍(RDD: A Fault-Tolerant Abstraction for In-Memory Cluster Computing 论文翻译)

    摘要:     本文提出了分布式内存抽象的概念--弹性分布式数据集(RDD,Resilient Distributed Datasets).它同意开发者在大型集群上运行基于内存的计算.RDD适用于两种 ...

随机推荐

  1. 困扰:C#.net 连接Oracle11g 不报错但是在connection时出现 ServerVersion 引发了“System.InvalidOperationException”类型的异常

    今天在使用VS2008 32位 连接 64位的Oracle11g的数据库时出现 “conn.ServerVersion”引发了“System.InvalidOperationException”类型的 ...

  2. AlertView + Block 的使用

    AlertView的使用还是很频繁的,扁平化以后似乎也不是那么丑了,但是到现在为止官方还是在用Delegate来处理点击事件,很影响程序的可读性. 如果用Block那么就会一目了然.自己本来想写一个, ...

  3. 认识div(division)在排版中的作用

    在网页制作过程过中,可以把一些独立的逻辑部分划分出来,放在一个<div>标签中,这个<div>标签的作用就相当于一个容器. 语法: <div>…</div&g ...

  4. sencha app build 到 Capturing theme image不执行

    解决sencha app build 到 Capturing theme image不执行 今天电脑重装系统,重新安装了sencha cmd,但是在打包时,到了 Capturing theme ima ...

  5. JFrome 登陆/注册/回显无数据库连接小程序

    当离开RCP插件区重新回顾一下JFrame窗口程序的标签.页面间的跳转. 完成一个登陆.注册界面.(界面完成后练习输入输出流,将前台的注册信息保存到一个文件夹下的.txt文件中) 首先向通过JFram ...

  6. Tweet button with a callback – How to?

    原文: http://jaspreetchahal.org/tweet-button-with-a-callback-how-to/ 两种方式:1. 原生的button <a href=&quo ...

  7. [Git]Git安装

    1.什么是Git Git是一个分布式版本控制/软件配置管理软件, git是用于Linux内核开发的版本控制工具, 与CVS.Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法 ...

  8. JQUERY1.9学习笔记 之内容过滤器(一) 包含选择器

    描述:选择包含指定文本的所有元素.jQuery( ":contains(text)" ) text:一串大小写敏感的文本. 例:找出所有包含"john"的div ...

  9. 【行为型】Iterator模式

    迭代器模式提供一种方法顺序访问聚合对象中的各个元素,而又不需要暴露该聚合对象的内部表示.对于该模式,估计几乎所有的人都使用过,在此直接给出类结构图参考如下: 如前所述,迭代器模式的思想主要是:一能提供 ...

  10. hadoop安装问题记录

    start-yarn.sh 启动正常,但是无法访问网页http://localhost:8088/cluster 原因: 可能是ipv6 的问题 解决方法: http://stackoverflow. ...