论文摘抄 - FlumeJava

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

原始的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)等等事情。

全文完 :)

时间: 2024-08-31 01:36:22

论文摘抄 - FlumeJava的相关文章

论文摘抄 - Tenzing

本摘抄不保证论文完整性和理解准确性 背景 异构数据的适配及数据可扩展性,资源可扩展性,廉价机器,SQL查询. 架构概述 Worker pool,query server,clientinterfaces,metadata server Worker线程是long-running的,worker pool包括master节点和worker节点,以及一个master watcher. Query server把query解析,优化之后传给master执行,优化包括一些基本的规则优化和基于成本的优化.

论文摘抄 - Infobright

背景 论文 Brighthouse: AnAnalytic Data Warehouse for Ad-hoc Queries,VLDB 2008   brighthouse是一个面向列的数据仓库,在列存储和压缩数据方面,数据压缩比达到10:1.其核心Knowledge Grid(知识网格)层,即一个能自动调节.所存出具特别小的元数据层,替代了索引的功能,提供了数据过滤.统计信息表达.实际数据位置信息等内容,让brighthouse可以作为一个分析型的数据仓库,,达到ad-hoc查询的速度.Kn

The Dataflow Model 论文

A Practical Approach to Balancing Correctness, Latency, and Cost in MassiveScale, Unbounded, OutofOrder Data Processing 这篇论文的副标题很长,说明几点: 1. 这篇文章的主要工作是,Balancing Correctness, Latency, and Cost,故它仍然不能突破CAP定理,仍然是在做tradeoff 2. Unbounded, OutofOrder,针对的对象

Win7数学面板来帮忙理科论文

  又是一年毕业季,又有一批莘莘学子要离开大学一个象牙塔.我们别离昨天,拥抱明天,要说毕业之前最重要的莫过于毕业论文的书写了,不仅格式要求严格,字数众多,对于理科生来讲,论文中的公式书写可以说让大家大呼"伤不起".写起论文来说真是费时费力,为此同学们可谓八仙 --各显神通,可能很多朋友都没有想过其实win7中的自带软件也可以达到相同的效果,这就今天的主角数学输入面板. 首先我们需要一台预装有正版win7操作系统的电脑,单击"开始"按钮在开始菜单的搜索输入框中输入&q

opencv3. 1鱼眼镜头畸变模型依据的是哪篇论文? 想找到看看原型

问题描述 opencv3. 1鱼眼镜头畸变模型依据的是哪篇论文? 想找到看看原型 opencv3. 1鱼眼镜头畸变模型依据的是哪篇论文? 想找到看看原型

Web基础架构设计原则经典论文《架构风格与基于网络的软件架构设计》导读

1. 概述 Roy Fielding博士(见个人主页)是IETF发布的HTTP和URI协议的主要设计者.HTTP和URI是两个最为重要的Web基础技术架构协议,因此Fielding博士可谓是Web架构的奠基者之一. 除了学术上的卓越成就之外,Fielding博士还参与过很多开源软件的设计和开发工作.他是libwww-perl(世界上最早的HTTP开发库之一)的开发者,曾经负责Apache HTTP服务器中与HTTP.URI协议相关部分代码的开发.Fielding博士还指导过很多其他团队在HTTP

轻轻松松写论文 快快乐乐拿学位

现在正是大学毕业生完成毕业设计.撰写毕业论文的时候,大家往往要苦熬一个多月才能完成自己的 毕业论文.现在大家主要都是用Microsoft Word来编辑论文(不论各位用哪个版本,基本功能都是一致 的,以下简称Word).如果不能充分Word的一些强大功能,大家在撰写和编辑较长篇幅的科技论文的时 候,可能经常要为不断地调整格式而烦恼.在这里我把自己以前使用Word的经验和教训总结一下,以求 抛砖引玉. 一篇论文应该包括两个层次的含义:内容与表现,内容是指文章作者用来表达自己思想的 文字.图片.表格

WPS论文如何设置论文页眉

  WPS论文如何设置论文页眉 操作步骤 1.在章节选项卡下,点击页眉和页脚调出选项卡.再点击页眉页脚选项,在版式下选择奇偶页不同. 2.在各个章节的末尾处插入下一页分节符.在章节选项卡下,点击拆分章节,选择下一页分节符. 3.若论文要求在奇数页眉插入对应的章节标题,可以点击页眉和页脚选项卡的域,选择标题1为页眉. 4.要为每节设置不同格式的页眉,需要取消同前节设置.定位页脚调出页眉和页脚选项卡,点击同前节,再重复第3步操作. 5.一些论文会要求在页眉添加粗细不同的双击线.只要把光标定位在页眉,

WPS论文如何插入题注

  WPS论文如何插入题注 1.由于图片.表格的题注都要根据所在章节而定,所以要先为论文章节题目设好标题样式,在选择图片,点击引用选项卡下的题注. 2.题注对话框可以设置题注的标签及所包含的章节标题.新建标签中输入图片,在编号中选择标题2. 3.插入题注后的图片和表格效果.