【问题标题】:Iterator behaviour in flink reduceGroupflink reduceGroup 中的迭代器行为
【发布时间】:2015-05-11 14:34:49
【问题描述】:

我正在创建一个应该处理大量数据的系统,我需要了解 reduce 组运算符的工作原理

我有一个数据集,我在其中应用了一个 groupby,然后是一个 reduceGroup 传递给 reduceGroup 函数的迭代器如何表现? 它是在请求数据时加载数据的惰性迭代器,还是在创建时准备内存中所有数据的急切迭代器?

我在 flink 0.9 里程碑1中使用 scala api

【问题讨论】:

    标签: scala hadoop apache-flink


    【解决方案1】:

    Flink 使用排序运算符对 groupReduce 执行分组。排序运算符接收一定的内存预算用于排序。只要数据符合这个预算,排序就会在内存中进行。否则,排序将变为外部合并排序并溢出到磁盘。 Flink 读取排序后的数据流并“即时”应用 groupReduce 函数。在应用函数之前,组的数据并未完全读取到内存中。因此,如果用户函数本身不具体化组记录,您可以处理非常大的组。

    【讨论】:

    • 好,我还有一个问题,是否有任何文档描述了这些方法的工作原理或至少提供了一些有用的提示?拥有它会很好。实际上,我在查找 flink 的标准文档时也遇到了一些问题,即我对 join 有更多疑问,并将其与一些不同的可能解决方案进行比较
    • 在其wiki 中有一些关于 Flink 内部的文档。但是,我找不到描述处理运算符如何实现的内容。有一个 blog post 关于如何在 Flink 中完成连接,这可能会有所帮助。
    • 另一个blog post 描述了 Flink 的内存管理以及它是如何对二进制数据进行操作的。
    • 非常有帮助!是否也有任何关于 cogroup 的参考?你真的应该为所有运营商扩展此类文档:了解它们在优化时的工作方式非常有用
    • 如果内存不足,Flink 的所有操作符(Reduce、Sort、CoGroup、HashJoin、SortMergeJoin 等)都会开始溢出到磁盘。哲学是开发人员/用户不应该担心这些事情并像使用 DBMS 一样使用它。这可能是文档中未明确提及它的原因。但我同意,这一点应该更清楚。感谢您的反馈! :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 2015-05-20
    • 2016-04-22
    相关资源
    最近更新 更多