当我运行一个火花流应用程序时,有可能使4个执行者的运行时间比1,2,6,10个执行者的运行时间更好?
答案 0 :(得分:0)
如果您正在使用4个执行程序(4个不同的Java进程)运行Spark作业,并且每个执行程序都配置为具有1 GB内存和仅1个内核(--executor-memory 1g --executor-cores 1) ,则意味着您一次只能运行一个工作程序任务。使用与您相同的配置来增加执行程序的数量将产生更好的结果。
如果您只想使用4个执行程序来提高性能,则增加内核数量将提高并行度(更多的工作任务同时运行)。但是,随着内核数量的增加,您很可能需要更多的内存,并且随着内存使用量的增加,您将希望确保不会遇到Java性能问题(垃圾回收)。
因此,要在没有任何其他细节的情况下非常简短地回答您的问题,理论上您可以使用4个执行器,每个执行器具有3个或4个核心(并行运行12或16个任务),而不是6个或10个执行器,以获得更好的结果。每个只有1个核心(一次运行6或10个任务)。
编辑:
我在这里忽略了您关于“火花流”的声明。除了执行程序的数量外,还有更多的因素会影响您的Spark流应用程序的性能。在某些情况下,例如,使用直接API仅从一个Kafka主题分区读取数据,增加执行程序和内核的数量根本没有任何影响。