这个问题在这里已有答案:
我是新兴的spark框架,我想知道什么是驱动程序内存和执行程序内存?从两者中获得最大性能的有效方法是什么?
Spark需要一个驱动程序来处理执行程序。所以最好的理解方法是:
司机
负责处理代码主要逻辑的人,使用yarn获取资源,处理分配并处理某些类型逻辑的少量数据。驱动程序内存与您将检索多少数据以处理某些逻辑有关。如果使用rdd.collect()
检索过多数据,则驱动程序将耗尽内存。如果您不向它发送太多数据,驱动程序的内存通常很小2Gb到4Gb就足够了。
工人
这是魔术发生的地方,工人将是负责执行你的工作的人。记忆量取决于你要做的事情。如果你只是要做一个map
函数,你只是在没有聚合类型的情况下转换数据,你通常不需要太多内存。但是如果你要运行大型聚合,很多步骤等等。通常你会使用大量的内存。它与您将要阅读的文件大小有关。
告诉你每个案例的适当内存量取决于你的工作如何运作。您需要了解每个函数和监视器的影响,以调整每个作业的内存使用情况。也许每个工人2Gb就是你所需要的,但有时每个工人8Gb就是你所需要的。