论文摘抄 – FlumeJava[通俗易懂]

论文摘抄 – 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。例如以下图

论文摘抄 - FlumeJava[通俗易懂]

大致是说。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操作的输出。

论文摘抄 - FlumeJava[通俗易懂]

每一个MSCR操作能够用一个MapReduce完毕。

它让MapReduce更加通用,体如今:

Ø  同意多个reducers和combiners。

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

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

Ø  同意pass-through形式的outputs。

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

MSCR Fusion

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

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

论文摘抄 - FlumeJava[通俗易懂]

全局优化策略

优化要达到的效果是最后的运行计划里包含尽可能少的又高效的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。

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

论文摘抄 - FlumeJava[通俗易懂]

优化的不足和未来工作

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

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

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

Executor

优化完了之后是运行。眼下支持的是batch的模式提交作业。

在运行方面,FlumeJava会做方便用户开发、debug,自己主动创建删除文件。自己主动识别数据量大小调整运行并行度和改变运行模式(remote)等等事情。

全文完 :)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115666.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • windows10安装cuda anaconda_电脑自带cuda吗

    windows10安装cuda anaconda_电脑自带cuda吗cuda10.2安装前言下载cuda10.2和cudnn查看本机驱动版本安装过程安装cudnn验证前言tensorflow1.12之后gpu使用cuda10.0对应的驱动,不要求安装cuda,[但pytorch要求安装cuda和cudnn(暂不确定)],如果本机的驱动版本小于cuda10.0对应的驱动版本,建议安装cuda10.x的驱动来覆盖本机的驱动,不用卸载再安装驱动下载cuda10.2…

    2022年9月23日
    3
  • 【Ubuntu安装 Nginx】「建议收藏」

    【Ubuntu安装 Nginx】「建议收藏」ubuntu安装nginx目前支持两种安装方式,一种是apt-get的方式,另一种是根据包安装的方式为方便我统一使用root用户一、apt-get安装nginx切换至root用户sudosurootapt-getinstallnginx如果安装时遇到这种情况,就输入sudoaptupdate在重新输入安装命令即可。查看nginx是否安装成功nginx-v启动nginxservicenginxstart启动后,在网页重输入ip地址,即可看到nginx的欢

    2022年9月19日
    3
  • springboot上传文件大小限制的配置[通俗易懂]

    springboot上传文件大小限制的配置[通俗易懂]上传文件文件过大时出现如下错误:org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException:Thefieldpicexceedsitsmaximumpermittedsizeof1048576bytes.因为springboot内置tomact的的文件传输默认…

    2022年5月25日
    46
  • JAVA实现对PDF文件加密、解密、暴力激活成功教程密码功能「建议收藏」

    JAVA实现对PDF文件加密、解密、暴力激活成功教程密码功能「建议收藏」pom需要引入的依赖 <!–https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox–> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>3.0.0-RC1</version> .

    2022年8月22日
    7
  • kali更新官方源「建议收藏」

    kali更新官方源「建议收藏」打开kali自带火狐浏览器,打开kalidocs书签页;搜索source打开第一个搜索内容,点击readmore找到官方源复制进/etc/apt/sources.list打开source.list命令:gedit/etc/apt/sources.list使用apt-getupdate命令更新软件列表。使用apt-getupgrade命令更新软件使…

    2022年5月28日
    59
  • 【14】进大厂必须掌握的面试题-持续监控面试

    Q1。为什么需要连续监控? 我建议您遵循以下流程: 连续监视可以及时发现问题或弱点,并采取快速纠正措施来帮助减少组织的费用。持续监控提供的解决方案可解决以下三个运营准则: 持续审核…

    2020年10月23日
    393

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号