据我所知,有外部排序和/或Hadoop MapReduce的解决方案,允许在按键对数据进行排序/分组时使用恒定数量的内存,以便通过每个键的聚合函数进行进一步的管道传输。
假设reduce状态也是一个常量,就像加法一样。
这种常量内存分组/排序是否也适用于Apache Spark或Flink,如果是这样的话,在reduceByKey或aggregateByKey的情况下,是否有任何特定的配置或编程方法来要求这种常量内存处理方式?
发布于 2020-01-17 04:25:36
这两个系统都需要隐式地执行操作,因为Java进程只获得固定数量的主内存。请注意,当要排序的数据变得更大时,需要将数据溢出到磁盘上。在排序的情况下,根据您的查询,这可能意味着整个数据集需要在主内存和磁盘上具体化。
如果您询问是否可以限制特定操作符的内存消耗,那么事情看起来要复杂得多。您可以将应用程序限制为一个特定的操作,并使用全局内存设置来限制消耗,但这将导致复杂的设置。
您是否有特定的用例,需要限制特定操作的内存?
顺便说一句,你可以考虑用Spark和Flink来取代Hadoop MapReduce。只是在一些边缘情况下,MapReduce可能能够击败下一代系统。
https://stackoverflow.com/questions/59773822
复制相似问题