到目前为止,我只在hadoop集群上使用了spark和yarn作为资源管理器。在这种类型的集群中,我确切地知道要运行多少执行器以及资源管理是如何工作的。但是,知道我正在尝试使用一个独立的spark集群,我有点困惑。纠正我的错误。
在本文中,默认情况下,工作节点使用节点的所有内存减去1GB。但我明白通过使用 SPARK_WORKER_MEMORY
,我们可以使用较少的内存。例如,如果节点的总内存是32GB,但我指定了16GB,那么spark worker在该节点上使用的内存不会超过16GB?
但遗嘱执行人呢?假设我想在每个节点上运行2个执行器,我可以通过在运行期间指定执行器内存来实现吗 spark-submit
成为…的一半 SPARK_WORKER_MEMORY
,如果我希望每个节点运行4个执行器,则将executor memory指定为 SPARK_WORKER_MEMORY
?
如果是这样的话,除了executor内存之外,我还必须正确地指定executor内核。例如,如果我想在一个worker上运行4个executors,我必须将executor cores指定为 SPARK_WORKER_CORES
? 如果我指定一个比这个大的数字会发生什么?我的意思是如果我指定执行器内存是 SPARK_WORKER_MEMORY
,但执行器内核只有 SPARK_WORKER_CORES
? 在这种情况下,我会在该节点上运行2或4个执行器吗?
2条答案
按热度按时间f4t66c6m1#
根据我的经验,这是控制执行器、内核和内存数量的最佳方法。
核心:您可以设置所有执行器的核心总数和每个执行器的核心数
内存:执行器内存
--执行器内核总数12--执行器内核2--执行器内存6g
这将给你6个执行器和2核/6g每个执行器,所以你总共看12核和36g
您可以使用
--驱动程序内存2g
n53p2ov02#
所以,我自己也尝试了一下spark独立集群,这就是我注意到的。
我的直觉是,通过调整执行器内核,可以在一个worker内部运行多个执行器,这确实是正确的。比如说,你的工人有16个核心。现在,如果为执行器指定8个内核,spark将为每个工作进程运行2个执行器。
在一个worker中运行的执行器数量还取决于您指定的执行器内存。例如,如果工作机内存为24 gb,并且您希望每个工作机运行2个执行器,则不能将执行器内存指定为大于12 gb。
通过为可选参数指定值,可以在启动从属时限制辅助进程的内存
--memory
或者通过改变SPARK_WORKER_MEMORY
. 与芯数相同(--cores
/SPARK_WORKER_CORES
).如果希望能够在独立的spark集群上运行多个作业,可以使用
spark.cores.max
执行时配置属性spark-submit
. 例如,像这样。因此,如果您的独立spark集群总共允许64个内核,而您只为您的程序提供16个内核,那么其他spark作业可以使用剩余的48个内核。