Hi我有两个节点,每个节点有16 GB RAM和4个内核。有人能建议我激发诸如no of executors和executor memory之类的属性来有效地使用它吗?
我正在使用spark-sql查询(Select*query with 2 joins),并建议我一种方法,使我希望将查询过程时间减少到1秒,我的输入数据从现在起减少到10 GB
典型的工作负载可能在每个进程2到8GB的范围内使用。考虑到你的小资源,那么每个执行者可能有3G,4个执行者(每个核心一个)。这为O/S和其他进程留下了大量的ram(4gb)。
使用4个执行器将是spark standalone的默认执行器(您正在使用它还是正在使用Yarn?)在这种情况下,您不需要显式指定它。但以防万一:
独立(和介观):
--total-executor-cores=8
纱线:
--num-executors=1 --executor-cores=4
另一个设置是
--executor-memory=3G
有两种分配资源的方法静态分配和动态分配。以下是如何将静态资源分配给应用程序
您的群集资源总量16 GB内存4芯
第一个1核和1 GB应该分配给操作系统,留下15 GB RAM和3核
核心是Spark中的并发级别,所以如果有3个核心,就可以同时运行3个并发进程。
接下来是执行人数的计算。每个执行器在自己的JVM进程中运行,每个Worker节点可以运行多个执行器。建议每个执行器最多有5个并发进程,否则争用量的并发进程将无法在单个JVM实例中管理。因为你只有3个核心,所以你可以有一个执行
将15GB的RAM划分为3个核心将为每个核心留下5GB。
因此,在您的情况下,您将设置以下属性
Number of cores = 3
Number of Executors = 1
RAM = 15 GB