论文摘抄 – 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 电脑windows是什么文件夹_windows10的目录结构

    电脑windows是什么文件夹_windows10的目录结构windows文件介绍总结├WINDOWS│├-system32(存放Windows的系统文件和硬件驱动程序)││├-config(用户配置信息和密码信息)│││└-system

    2022年8月2日
    9
  • ffplay播放器移植VC的工程:ffplay for MFC

    ffplay播放器移植VC的工程:ffplay for MFCffplay播放器移植VC的工程:ffplayforMFC本文介绍一个自己做的FFPLAY移植到VC下的开源工程:ffplayforMFC。本工程将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下。并且使用MFC做了一套简单的界面。它可以完成一个播放器播放视频的基本流程:解协议,解封装,视频/音频解码,视音频同步,视音频输出。此外还包含一些控制功能:播放,暂停/继

    2022年6月24日
    19
  • 噪声熵和损失熵的定义_归一化信噪比

    噪声熵和损失熵的定义_归一化信噪比利用K-L散度(相对熵)确定VMD分解信号的K值和惩罚因子alpha,得到一组信号分量;计算各个分量的样本熵,根据样本熵的值,选取出噪声主导分量和有效分量;对噪声主导信号进行非局部均值(NLM)去噪;将去噪后的信号分量与剩余的有效信号分量进行重构得到去噪信号。

    2025年6月8日
    2
  • 向用户、竞争对手学习,是360的微创新之源 ( 转发自周鸿祎博客 )

    向用户、竞争对手学习,是360的微创新之源 ( 转发自周鸿祎博客 )写道现在,我说一说360的微创新,这是我这么多年来做互联网产品的一个总结,对我来说是方法论,希望能跟朋友们分享,切磋。我记得比尔-盖茨有一句话,大意是他愿意为微软一直服务下去,因为他喜欢跟一群聪明人打交道。跟聪明人在一起交流是快乐的,大家都是聪明人,大拿不少,即使拍砖也能拍出水平。闲话少叙,言归正传。但提前说明一下,这篇博文牵涉到一些产品功能,不感兴趣的同志可以掠过。2008年7月

    2022年7月26日
    9
  • Colorref_单词color的用法

    Colorref_单词color的用法COLORREF是一个32-bit整型数值,它代表了一种颜色。你可以使用RGB函数来初始化COLORREF。例如:  COLORREFcolor=RGB(0,255,0);  RGB函数接收三个0-255数值,一个代表红色,一个代表绿色,一个代表蓝色。在上面的例子中,红色和蓝色值都为0,所以在该颜色中没有红色和蓝色。绿色为最大值255。所以该颜色为绿色。0,0,

    2025年8月6日
    2
  • iframe高度自适应_读取跨域iframe

    iframe高度自适应_读取跨域iframe采用JavaScript来控制iframe元素的高度是iframe高度自适应的关键,同时由于JavaScript对不同域名下权限的控制,引发出同域、跨域两种情况。由于客户端js使用浏览器的同源安全策略,跨域情况下,被嵌套页面如果想要获取和修改父页面的DOM属性会出现权限不足的情况,提示错误:Permissiondeniedtoaccessproperty’document’。这是

    2022年10月12日
    3

发表回复

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

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