我是Spark框架的新手,我想知道什么是驱动程序内存和执行程序内存?从两者获得最大性能的有效方法是什么?
答案 0 :(得分:2)
Spark需要一个驱动程序来处理执行程序。因此,最好的理解方式是:
驱动程序
负责处理代码的主要逻辑,使用yarn获取资源,处理分配并为某种类型的逻辑处理少量数据的人员。驱动程序内存与您将检索到主数据以处理某些逻辑的数据有关。如果使用rdd.collect()
检索了太多数据,则驱动程序将耗尽内存。如果您不向驱动器发送太多数据,则驱动程序的内存通常很小,从2Gb到4Gb足够了。
工人
这是发生魔术的地方,工人将是负责执行工作的人。内存量取决于您要做什么。如果您只是想执行一个map
函数,而该函数只是在不进行任何聚合的情况下转换数据,则通常不需要太多内存。但是,如果您要运行大型聚合,很多步骤等,通常会占用大量内存。这与您将要读取的文件大小有关。
为每种情况告诉您适当的内存量,这完全取决于您的工作方式。您需要了解每个功能的影响,并进行监控以调整每个作业的内存使用量。也许每名员工需要2Gb,但有时每名员工需要8Gb。