当前位置: 首页 > 知识库问答 >
问题:

火花增加纱线模式下的执行器数量

南门峰
2023-03-14

我正在4节点群集上运行Spark over纱线。节点中每台机器的配置为128GB内存,每个节点24核CPU。我使用此命令运行Spark on

spark-shell --master yarn --num-executors 19 --executor-memory 18g --executor-cores 4 --driver-memory 4g

但Spark最多只能启动16个执行者。我将纱线中的最大vcore分配设置为80(在我拥有的94芯中)。因此,我的印象是,这将启动19名执行人,但最多只能启动16名执行人。此外,我认为即使这些执行者也没有完全使用分配的vCore。

这些是我的问题

  1. spark为什么没有创建19个执行人。幕后有没有限制它的计算

这是我的纱线配置

  • 纱线。节点管理器。资源内存mb:106496

共有2个答案

巢烨
2023-03-14

我仍然不能发表评论,所以这将是一个答案。

看到这个问题。你能减少执行程序内存并再试一次运行它吗?

毋修为
2023-03-14

好的,根据您的配置,我们有:(我也是Spark的新手,但下面是我在这个场景中推测的情况)每个节点24核和128GB ram,集群中有4个节点。

我们为开销分配了1核和1 GB内存,并考虑到您正在以YARN客户端模式运行集群。

我们在4个节点中还剩下127GB Ram和23个内核。

正如Cloudera博客中提到的,当每个执行器最多分配5个芯时,纱线以最佳性能运行。

因此,23X4=92芯。如果我们为每个执行器分配了5个核,那么18个执行器有5个核,1个执行器有2个核,或者类似地。因此,假设我们的应用程序中有18个执行器,每个执行器有5个内核。Spark将这18个执行器分布在4个节点上。假设其分布为:第1个节点:4个执行器第2个节点: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

此外,这是考虑到您在客户机模式下运行集群,但如果您在纱线集群模式下运行集群,则会为节点分配fir驱动程序,并且需要以不同的方式进行计算。

 类似资料:
  • 我正在从我的开发机器上启动spark-submit。 根据在YARN文档上运行Spark,我应该在env var或上为hadoop集群配置提供一个路径。这就是它变得棘手的地方:如果我将任务发送到远程YARN服务,为什么这些文件夹必须存在于我的本地机器上?这是否意味着spark-submit必须位于集群内部,因此我不能远程启动spark任务?如果没有,我应该用什么填充这些文件夹?我应该从任务管理器服

  • 我在yarn集群模式下运行spark streaming,我想捕获日志并将其写入驱动程序本地文件,为此我创建了自定义log4j.properties文件,其中我提到了驱动程序的本地文件路径,但我只能在该文件中看到驱动程序日志,为什么我的执行器日志没有在该文件中捕获,以及如何捕获执行器日志。我尝试了不同的方法,我的spark-submit命令如下:-

  • 我正在纱线客户端模式下运行火花作业。我在unix脚本中使用Spark提交命令运行这些作业。我想为正在运行的每个火花作业创建日志。我尝试使用以下命令获取日志: 但在这里,如果spark作业失败,它将不会在命令状态检查中被捕获,可能是unix检查|$tee命令的状态,无论spark作业成功还是失败,该命令始终是成功的 我尝试使用log4j但没有成功。我想将每个火花作业日志文件存储在本地unix服务器上

  • 我在mapr集群上安装了一个全新的spark 1.2.1,在测试它时,我发现它在本地模式下工作得很好,但在yarn模式下,它似乎无法访问变量,如果广播的话也是如此。准确地说,下面的测试代码 在局部模式下工作,但在纱线上失败。更准确地说,和这两个方法都失败了,如果它们都工作。

  • 我已经在一个15节点的Hadoop集群上安装了。所有节点都运行和最新版本的Hadoop。Hadoop集群本身是功能性的,例如,YARN可以成功地运行各种MapReduce作业。 我可以使用以下命令在节点上本地运行Spark Shell,而不会出现任何问题:。 你知道为什么我不能用客户端模式在纱线上运行Spark Shell吗?