Apache Flink如何处理偏斜数据?

时间:2016-01-08 16:39:30

标签: apache-flink

例如,我有很多单词,想要计算每个单词。问题是这些词是倾斜的。这意味着某些单词的频率非常高,但大多数其他单词的频率很低。在风暴中,我们可以使用以下方式来解决此问题。首先对流进行随机分组,在每个节点中计算窗口时间本地的单词,最后更新计入累积结果。 从我的另一个question,我知道Flink只支持键控流上的窗口,否则窗口操作将不是并行的。

我的问题是有没有一种很好的方法来解决Flink中这种扭曲的数据问题?

enter image description here

1 个答案:

答案 0 :(得分:6)

DataStream API当前不支持预聚合。原则上,可以为事件时间窗口添加类似组合器的特征。国际海事组织,这将是一个非常有价值的补充,但还没有完成。

但是,您可以自己实现此功能。 DataStream API提供低级操作员界面,类似于Storm Bolts。该接口称为OneInputStreamOperator。此操作员类型可让您完全控制。实际上,内置运算符(如Window运算符)也基于此类。

可以应用OneInputStreamOperator,如:

DataStream<Tuple2<String,Integer> inStream = ...
DataStream<String> outStream = inStream
  .transform("my op", BasicTypeInfo.STRING_TYPE_INFO, new MyOISO());