Spark:如何利用 spark 独立集群上的所有内核和内存,其中节点的内存大小不同
Spark: How to utilize all cores and memory on spark stand alone cluster, where nodes differs in memory size
如何在下面的 spark 独立集群上利用所有内核和内存:
Node 1: 4cores 8gb memory
Node 2: 4cores 16gb memory
目前我可以分配使用:
A) 8 核和 14 GB 内存通过设置:
.config('spark.executor.memory','7g')
.config('spark.executor.cores', '4')
Cores | Memory
----------------------------------
4 (4 Used) | 15.0 GiB (7.0 GiB Used)
4 (4 Used) | 7.0 GiB (7.0 GiB Used)
B) 通过设置使用 6 核和 21gb 内存:
.config('spark.executor.memory','7g')
.config('spark.executor.cores', '2')
Cores | Memory
----------------------------------
4 (4 Used) | 15.0 GiB (14.0 GiB Used)
4 (2 Used) | 7.0 GiB (7.0 GiB Used)
预期输出:
8 cores 21gb of memory:
Cores | Memory
----------------------------------
4 (4 Used) | 15.0 GiB (14.0 GiB Used)
4 (4 Used) | 7.0 GiB (7.0 GiB Used)
参考:
- 您有一个大小为两个节点的集群:因此您必须使用像 YARN(恕我直言)这样的资源管理器。否则你的 spark-job 只会在你的本地机器上执行。
- 使用这个:Running Spark on YARN
- 示例 B) 显示分配了 4 个内核,但目前只有两个内核用于完成工作。其他两个核心只是无聊无事可做或完成工作
最后答案很简单。我尝试了 YARN,但遇到了与 Standalone 相同的问题。我发现通过在每个节点上的 $SPARK_HOME/conf/spark-env.sh 中设置独立设置的解决方案最终非常简单:
对于节点 1:(4 核 8gb 内存)
SPARK_WORKER_CORES=4
SPARK_WORKER_MEMORY=7g
节点 2:(4 核 16gb 内存)
SPARK_WORKER_CORES=8
SPARK_WORKER_MEMORY=14g
和 运行 带有设置的 spark 应用
.config('spark.executor.memory','7g')
.config('spark.executor.cores', '2')
结果全部8核21gb内存被占用:
Cores | Memory
----------------------------------
8 (8 Used) | 14.0 GiB (14.0 GiB Used)
4 (4 Used) | 7.0 GiB (7.0 GiB Used)
注意:在YARN中同样可以解决这个问题。 $HADOOP_HOME/etc/hadoop/yarn-site.xml 中的设置需要更改以下参数:
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>7168</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>7168</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>2</value>
</property>
如何在下面的 spark 独立集群上利用所有内核和内存:
Node 1: 4cores 8gb memory
Node 2: 4cores 16gb memory
目前我可以分配使用:
A) 8 核和 14 GB 内存通过设置:
.config('spark.executor.memory','7g')
.config('spark.executor.cores', '4')
Cores | Memory
----------------------------------
4 (4 Used) | 15.0 GiB (7.0 GiB Used)
4 (4 Used) | 7.0 GiB (7.0 GiB Used)
B) 通过设置使用 6 核和 21gb 内存:
.config('spark.executor.memory','7g')
.config('spark.executor.cores', '2')
Cores | Memory
----------------------------------
4 (4 Used) | 15.0 GiB (14.0 GiB Used)
4 (2 Used) | 7.0 GiB (7.0 GiB Used)
预期输出:
8 cores 21gb of memory:
Cores | Memory
----------------------------------
4 (4 Used) | 15.0 GiB (14.0 GiB Used)
4 (4 Used) | 7.0 GiB (7.0 GiB Used)
参考:
- 您有一个大小为两个节点的集群:因此您必须使用像 YARN(恕我直言)这样的资源管理器。否则你的 spark-job 只会在你的本地机器上执行。
- 使用这个:Running Spark on YARN
- 示例 B) 显示分配了 4 个内核,但目前只有两个内核用于完成工作。其他两个核心只是无聊无事可做或完成工作
最后答案很简单。我尝试了 YARN,但遇到了与 Standalone 相同的问题。我发现通过在每个节点上的 $SPARK_HOME/conf/spark-env.sh 中设置独立设置的解决方案最终非常简单:
对于节点 1:(4 核 8gb 内存)
SPARK_WORKER_CORES=4
SPARK_WORKER_MEMORY=7g
节点 2:(4 核 16gb 内存)
SPARK_WORKER_CORES=8
SPARK_WORKER_MEMORY=14g
和 运行 带有设置的 spark 应用
.config('spark.executor.memory','7g')
.config('spark.executor.cores', '2')
结果全部8核21gb内存被占用:
Cores | Memory
----------------------------------
8 (8 Used) | 14.0 GiB (14.0 GiB Used)
4 (4 Used) | 7.0 GiB (7.0 GiB Used)
注意:在YARN中同样可以解决这个问题。 $HADOOP_HOME/etc/hadoop/yarn-site.xml 中的设置需要更改以下参数:
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>7168</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>7168</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>2</value>
</property>