我有一种奇怪的行为,纱线无法正确分配所有容器。 我将maximizeResourceAllocation设置为true,如果我启动一个m4.4xlarge从属实例来请求每个执行器容器从纱线中获取所有32个核心,它会尝试。 但是,对于一个容器来说失败了,因为applicationmaster主进程使用了1个核心。
1个容器1vcore用于主进程 32核容器执行器1 32核容器执行器2 32芯容器执行器3失败,因为纱线只剩下31个芯子。
我的Step应该在客户端模式下执行。它与Zeppelin实例相同。
HadoopJarStepConfig sparkStepConf = new HadoopJarStepConfig()
.withJar("command-runner.jar")
.withArgs("spark-submit",
"--class", ".....",
"--deploy-mode", "client",
"/home/hadoop/jars/.....jar");
我使用引导步骤将jar放入/ home / hadoop / jars,因为如果你想使用s3路径,那么只允许部署集群,这会阻止我的一个执行者使用sparkContext进程。
所有这些意味着如果我只有一个奴隶,根本没有任何事情发生。如果我有3,1不做任何工作。这是浪费钱。 理论上我可以计算执行器核心 - 1并强制设置火花提交。但这应该有效。 如何告诉纱线将这个applicationMaster 1核心流程放在master上或不创建它,或启动具有不同核心数的执行程序? 我只使用1-4个实例并且有效地坐着空闲是非常好的。