论文摘抄 - 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)等等事情。
全文完 :)
论文摘抄 - FlumeJava的更多相关文章
- 《OAuth2.0协议安全形式化分析-》----论文摘抄整理
---恢复内容开始--- 本篇论文发表在计算机工程与设计,感觉写的还是很有水准的.实验部分交代的比较清楚 本篇论文的创新点: 使用Scyther工具 主要是在 DY模型下面 形式化分析了 OAuth2 ...
- 论文 查重 知网 万方 paperpass
相信各个即将毕业的学生或在岗需要评职称.发论文的职场人士,论文检测都是必不可少的一道程序.面对市场上五花八门的检测软件,到底该如何选择?选择查重后到底该如何修改?现在就做一个知识的普及.其中对于中国的 ...
- The Dataflow Model 论文
A Practical Approach to Balancing Correctness, Latency, and Cost in MassiveScale, Unbounded, OutofOr ...
- 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 ...
- Apache Spark RDD(Resilient Distributed Datasets)论文
Spark RDD(Resilient Distributed Datasets)论文 概要 1: 介绍 2: Resilient Distributed Datasets(RDDs) 2.1 RDD ...
- 智能机器人chatbot论文集合
机器不学习 jqbxx.com-专注机器学习,深度学习,自然语言处理,大数据,个性化推荐,搜索算法,知识图谱 今年开始接触chatbot,跟着各种专栏学习了一段时间,也读了一些论文,在这里汇总一下.感 ...
- Google关于Spanner的论文中分布式事务的实现
Google关于Spanner的论文中分布式事务的实现 Google在Spanner相关的论文中详细的解释了Percolator分布式事务的实现方式, 而且用简洁的伪代码示例怎么实现分布式事务; Pe ...
- 【论文】CornerNet:几点疑问
1.cornerpooling的设计,个人觉得解释有些牵强. 这里的两个特征图如何解释,corner点为何是横向与纵向响应最强的点.如果仅仅当成一种奇特的池化方式,恰好也有着不错的效果,那倒是可以接受 ...
- [Berkeley]弹性分布式数据集RDD的介绍(RDD: A Fault-Tolerant Abstraction for In-Memory Cluster Computing 论文翻译)
摘要: 本文提出了分布式内存抽象的概念--弹性分布式数据集(RDD,Resilient Distributed Datasets).它同意开发者在大型集群上运行基于内存的计算.RDD适用于两种 ...
随机推荐
- leetcode修炼之路——383. Ransom Note
题目是这样的 Given an arbitrary ransom note string and another string containing letters from a ...
- Spring mvc 中有关 Shiro 1.2.3 配置问题
Spring 版本:3.2.x, 4.0.x [问题说明] 首先介绍下配置出错情况: (1)项目中,Spring3 and Spring4 的 applicationContext.xml aop ...
- 在VC6中使用ogre进行游戏开发
微软公司开发的visual c++6.0堪称史上最易用.最成熟的开发工具.vc6以其小巧.轻便赢得了程序员的喜爱,以至于在VS大行其道的时代,很多程序员仍然使用vc6作为开发工具,vc6的欢迎性可见一 ...
- arp断网攻击解决办法
局域网中有这个提示arp断网攻击是正常的,说明防火墙已经拦截了,是有人用P2P工具控制你的网速,或者是局域网有机器中病毒了也会有这样的提示,不过不用担心,今天给大家带来几个防止arp断网攻击的办法,希 ...
- asp.net实现 EXCEL数据导入到数据库功能
在项目中经常要用EXCEL导入数据到数据库,提高工作效率. 注意:EXCEL中的第一行不能导入. 下面是源码: IntoExcel.aspx: [csharp] <%@ Page Languag ...
- 基于VC的串行通信技术应用实例
在工业控制中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛. 本文将介绍在Windows平台下串行通信的工作机制和用Visual C++设计串行通信程序的 ...
- jQuery中的综合动画
所谓综合动画,就是在链式表达式依次执行相关animate函数,其中的参数是以键值对的方式存在的. 如下示例,就展示了一个基本的综合动画. <!DOCTYPE html PUBLIC " ...
- 表单数据校检方法 onsubmit()的使用?
在项目中为一个表单(from)编写onsubmit()脚本的时候,经常需要验证表单中数据的合法性 所以常会写道:<form action="/admin/addUser.do" ...
- error: File not found by glob???
引发上述问题的几种情形: 1.rpm包的包名中含有“[.]”这类特殊符号; 2.执行rpm -ivh xxxx.rpm时,xxxx包名不存在; 3.rpm包顶层的目录名不存在或者存在问题: - ...
- easyui combo+pagination 图标选择器
从数据库读取分页显示 $(function () { initTable(1, 180); $('#cc').combo({ editable: false, panelWidth: 'auto', ...