据我所知,hadoop mapreduce中有一些外部排序和/或解决方案,允许在按键对数据进行排序/分组时使用固定数量的内存,而不是更多内存,以便通过每个键的聚合函数进行进一步的管道传输。
假设reduce状态也是一个常量,就像加法一样。
apachespark或flink是否也可以使用这种恒定内存分组/排序,如果可以,在reducebykey或aggregatebykey的情况下,是否有任何特定的配置或编程方式来要求这种恒定内存处理方式?
据我所知,hadoop mapreduce中有一些外部排序和/或解决方案,允许在按键对数据进行排序/分组时使用固定数量的内存,而不是更多内存,以便通过每个键的聚合函数进行进一步的管道传输。
假设reduce状态也是一个常量,就像加法一样。
apachespark或flink是否也可以使用这种恒定内存分组/排序,如果可以,在reducebykey或aggregatebykey的情况下,是否有任何特定的配置或编程方式来要求这种恒定内存处理方式?
1条答案
按热度按时间l7wslrjt1#
这两个系统都需要隐式地执行该操作,因为java进程只获得固定数量的主内存。请注意,当要排序的数据变得更大时,需要将数据溢出到磁盘上。在排序的情况下,根据您的查询,可能意味着完整的数据集需要在主内存和磁盘上具体化。
如果您询问是否可以限制特定运算符的内存消耗,那么事情看起来要复杂得多。您可以将应用程序限制为一个特定的操作,并使用全局内存设置来限制消耗,但这将导致复杂的设置。
您是否考虑了一个特定的用例,需要限制特定操作的内存?
顺便说一句,您可以考虑使用spark和flink来取代hadoop mapreduce。只有几个边缘案例,mapreduce可能能够击败下一代系统。