scala - 如何使用 Spark 独立集群在工作节点上管理多个执行程序?

标签 scala apache-spark hadoop cluster-computing apache-spark-standalone

到目前为止,我只在 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?

的四分之一,每个节点运行 4 个执行程序

如果是这样,我认为除了执行程序内存之外,我还必须正确指定执行程序内核。例如,如果我想在一个 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/

相关文章:

使用通用类作为键/值类型的 Scala Map

scala - 尾递归 - Scala(任何其他语言)

java.lang.ClassCastException : scala. Tuple2 无法转换为 java.lang.Iterable

apache-spark - 在 pyspark 中将 yyyymmdd 格式转换为 MM-dd-yyyy 格式

hadoop -libjars 和 ClassNotFoundException

hadoop - 预期 org.apache.hadoop.hive.ql.io.orc.OrcStruct,收到 org.apache.hadoop.hive.ql.io.orc.OrcSerde$OrcSerdeRow

Scala - 理解涉及柯里化(Currying)的代码片段

scala - 是否可以使用 'yield' 生成 'Iterator' 而不是 Scala 中的列表?

apache-spark - 在 Spark ML 管道中缓存中间结果

hadoop - 无法找到创建的Hive表,也无法从表中检索数据