我在4节点集群上运行Spark over Yarn。节点中每台机器的配置为128GB内存,每节点24核CPU。我使用这个命令运行Spark
spark-shell --master yarn --num-executors 19 --executor-memory 18g --executor-cores 4 --driver-memory 4g
但Spark只会最多启动16个执行程序。我将纱线的最大值分配为80(我拥有的94个核心)。所以我的印象是,这将启动19个遗嘱执行人,但它最多只能有16个遗嘱执行人。此外,我不认为即使这些执行程序完全使用分配的VCores。
这些是我的问题
这是我的纱线配置
答案 0 :(得分:2)
好的,按照您的配置我们有: (我也是Spark的新手,但下面是我在这个场景中推测的) 每个节点有24个内核和128GB内存,我们在集群中有4个节点。
我们为开销分配1个核心和1 GB内存,并考虑您在YARN-Client模式下运行群集。
我们有4个节点的127GB Ram和23个核心。
如Cloudera blog中所述,当每个执行者最多分配5个核心时,YARN以最佳性能运行
所以,23X4 = 92个核心。 如果我们为每个执行器分配5个核心,则18个执行器具有5个核心,1个执行器具有2个核心或类似。 因此,假设我们的应用程序中有18个执行程序,每个执行程序有5个核心。 Spark在4个节点上分配这18个执行程序。假设其分布为: 第一个节点:4个执行器 第二个节点:4个执行器 第3节点:5个执行器 第4节点:5个执行器
现在,作为' yarn.nodemanager.resource.memory-mb:106496'在您的配置中设置为104GB,每个节点可以分配最大104 GB的内存(我建议增加此参数)。 对于具有4个执行程序的节点:每个执行程序104/4 - 26GB 对于具有5个执行程序的节点:每个执行程序104/5~21GB。 现在剩下7%的内存用于开销,我们得到24GB和20GB。
所以我建议使用以下配置: - --num-executors:18 --executor-memory:20G --executor-cores:5
此外,这是考虑到您在客户端模式下运行群集,但如果您在Yarn-cluster模式下运行群集,则1节点将被分配fir驱动程序,并且计算需要以不同方式完成。 / p>
答案 1 :(得分:0)
我仍然无法评论,所以它将作为答案。
请参阅this问题。请你减少执行程序内存并尝试再次运行吗?