flume java_论文摘抄 - FlumeJava

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

knock.gif

原始的MapReduce,分Map,Shuffle,Reduce。Map里包括shards。Shuffle理解为groupByKey的事情。Reduce里包括Combiner,可以定义Sharder来控制key怎么和Reducer worker对应起来。

核心抽象和基本原语

PCollection是一个不可变的bag,可以是有序的(Sequence),也可以是无序的(Collection)。PCollection可以来自于内存里的Java PCollection对象,也可以读取自文件。

PTable,可以看成PCollection>,不可变无序multi-map。

第一个原语是parallelDo(),把PCollection变成新的PCollection,处理方式定义在DoFn里。emitFn是call-back,传给用户的process(…),使用emitFn.emit(outElem)发射出去。parallelDo()可以在map或reduce中使用,DoFn不应该使用闭包外全局的变量,(inline function)纯操作自己的inputs。

第二个原语是groupByKey(),把PTable转变成PTable>,

第三个原语是combineValues(),接收input为PTable>和一个V的符合结合律的方法,返回PTable。

第四个原语是flatten(),接收一个PCollection的list,返回一个PCollection

衍生原语(Derived Operations)

count(),接收PCollection,返回PTable

实现方式为parallelDo(),groupByKey()和combineValues()

join(),接收PTable,PTable,返回PTable, Collection>

实现方式为,第一步,使用parallelDo()把每个input PTable变成通用的PTable>;第二步使用flattern来combine tables;第三步,使用groupByKey()作用于被扁平过了tables,产生PTable>>

top(),接收比较函数和N,

实现方式为parallelDo(),groupByKey()和combineValues()

延迟分析(Deffered Evaluation)

PCollection对象有两种状态,defferred或materialized。

FlumeJava.run()真正触发execution plan的物化/执行。

PObjects

PObject用于存储Java对象,物化过了之后可以使用getValue()方法获得PObject的值。有点像Future。

operate()方法

优化器

parallelDoFusion(融合)

Producer-Consumer and Sibling Fusion,如下图

AZcbxdCRyGsVAAAAAElFTkSuQmCC

大致是说,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作为输入,执行R路output输出的ParallelDo “map”操作,产生R个PTable 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操作的输出。

jmsWPHaNiwYcTTAZFcAQkVMJeXCRBdB6YaMWKEaPsXX3wh5tUeHh4iuAmDEuwMoCv8X7lypRi0QDegQyx3YRBDW2ET4mmOwGPr1q2F0RY2DNAw8AoNAQY7lA1pztNIQWvQXGE7Qh+AFrGMBsluD5A2Cg2jXVhYmCAiEBekgJr0AeGjkOwYfcHwGHWhHiG5Ac8hxUiMdVkwPpIeAJkYFUeOHClGWzwD1QyaArQDSHeUgZEXIy0YG+UifRRUJ4y4GL1VSWQPxDuiDOAEbQLDgRBhbIMkhmTheZ8gNtQDDBsYGCjuwcoL4oU0ASGCkWEsAjGDEVT1H8d4DtId16CK41vALf7je6p6D8bA4IkfVH8wPQZkWQASuGfPnsKyDloDbrp16yaqhzBlMDl8JoAntBOCokePHqLtkNigIQxwMOpCyECLQcQeNCI8DwEBQYT3oMrjB5wh1yAEEOgZxjcIF6xUgHZhNLYX6DpABTnd2HhHgwYNshe+ClQ5YGysQkAKGZAzBvr37y+EAFYwZANp1fW8IgqqKUZfLGVAkhhgHQYgoZcuXSrW17GkY0D2GID6DVUchk5ogrKBbiU5VCTMKTH3xhwUPwMsxwAMScAh5pqYGmEOb8DTMQAHGEzpoPbDgSqjAe7pbzj26v8Duk57XneQYgUAAAAASUVORK5CYII=

每个MSCR操作可以用一个MapReduce完成。它让MapReduce更加通用,体现在:

?  允许多个reducers和combiners;

?  允许每个reducer产生多个outputs;

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

?  允许pass-through形式的outputs。

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

MSCR Fusion

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

这部分比较晦涩难懂啊,但是是理解核心

I1RMUttcSrt2nfz0fHFUfkruSvtZeyVIuCgSsAgXTgjrjLXJUuOoEB8y+n1LgHhhuxElblKWoqUfdqFkP1Yv1+XYAr5Uwt6VsOQ0IRACIRACHSEQofJLKlr+yWw26y0Wi9aSqH4JqlxGCIRACIRARQTy9eSKKutUqByW8Xhc3JRT5fJZCIRACIRACNREII5KTbWVWEMgBEIgBEKgYwTiqHSswnO5IRACIRACIVATgQiVmmorsYZACIRACIRAxwhEqHSswnO5IRACIRACIVATgQiVmmorsYZACIRACIRAxwhEqHSswnO5IRACIRACIVATgQiVmmorsYZACIRACIRAxwhEqHSswnO5IRACIRACIVATgQiVmmorsYZACIRACIRAxwj8BV5yjWd1MFx+AAAAAElFTkSuQmCC

全局优化策略

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

针对这几个策略的实施,后面举了个例子并且描绘了具体的执行图,非常帮助理解

eb0iAACCCCAAAJNCvwDHK5SOQqIoZ0AAAAASUVORK5CYII=

优化的不足和未来工作

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

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

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

Executor

优化完了之后是执行。目前支持的是batch的模式提交作业。

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

全文完 :)

原文:http://blog.csdn.net/pelick/article/details/38270049

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值