到目前为止,我只在 Hadoop 集群上使用 Spark,并将 YARN 作为资源管理器。在那种类型的集群中,我确切地知道要运行多少个执行程序以及资源管理是如何工作的。但是,知道我正在尝试使用独立的 Spark Cluster,我有点困惑。纠正我错误的地方。
来自 this article ,默认情况下,一个工作节点使用该节点的所有内存减去 1 GB。但我知道通过使用 SPARK_WORKER_MEMORY
,我们可以使用更少的内存。例如,如果节点的总内存为 32 GB,但我指定为 16 GB,那么 Spark worker 不会在该节点上使用超过 16 GB 的内存吗?
但是执行者呢?假设我想在每个节点上运行 2 个执行程序,我可以通过在 spark-submit
期间将执行程序内存指定为 SPARK_WORKER_MEMORY
的一半来实现吗,如果我想通过将执行程序内存指定为 SPARK_WORKER_MEMORY
?
如果是这样,我认为除了执行程序内存之外,我还必须正确指定执行程序内核。例如,如果我想在一个 worker 上运行 4 个执行程序,我必须将执行程序核心指定为 SPARK_WORKER_CORES
的四分之一?如果我指定一个更大的数字会发生什么?我的意思是,如果我将执行程序内存指定为 SPARK_WORKER_MEMORY
的四分之一,但执行程序内核仅为 SPARK_WORKER_CORES
的一半?在那种情况下,我会在该节点上运行 2 或 4 个执行程序吗?
最佳答案
根据我的经验,这是控制执行程序、内核和内存数量的最佳方式。
核心数:您可以设置所有执行器的核心总数和每个执行器的核心数
内存:单独执行器内存
--总执行器核心数 12 --执行器核心数 2 --执行器内存 6G
这将为您提供 6 个执行器和 2 个内核/每个执行器 6G,因此总共需要 12 个内核和 36G
您可以使用
设置驱动程序内存--驱动内存2G
关于scala - 如何使用 Spark 独立集群在工作节点上管理多个执行程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54364403/