我正在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。
这些是我的问题
这是我的纱线配置
我仍然不能发表评论,所以这将是一个答案。
看到这个问题。你能减少执行程序内存并再试一次运行它吗?
好的,根据您的配置,我们有:(我也是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吗?