我们正尝试在yarn上运行我们的spark集群。我们有一些性能问题,特别是与独立模式相比。
我们有一个由5个节点组成的集群,每个节点都有16 We的RAM和8个核心。我们在yarn-site.xml中将最小容器大小配置为3 3GB,最大容器大小配置为14 3GB。当向yarn-cluster提交作业时,我们提供了number of executor = 10,memory of executor =14 GB。根据我的理解,我们的任务应该分配4个14 of的容器。但是spark UI只显示了3个每个7.2 UI的容器。
我们无法确保分配给它的容器数量和资源。与独立模式相比,这会导致有害的性能。
你能在如何优化纱线性能方面提出一些建议吗?
这是我用来提交作业的命令:
$SPARK_HOME/bin/spark-submit --class "MyApp" --master yarn-cluster --num-executors 10 --executor-memory 14g target/scala-2.10/my-application_2.10-1.0.jar 在讨论之后,我更改了yarn-site.xml文件和spark-submit命令。
下面是新的yarn-site.xml代码:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hm41</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>14336</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2560</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>13312</value>
</property>而spark提交的新命令是
$SPARK_HOME/bin/spark-submit --class "MyApp" --master yarn-cluster --num-executors 4 --executor-memory 10g --executor-cores 6 target/scala-2.10/my-application_2.10-1.0.jar 这样,我可以在每台机器上获得6个内核,但每个节点的内存使用量仍然在5G左右。我已经附上了SPARKUI和htop的屏幕截图。


发布于 2015-02-06 18:32:46
您在SparkUI中看到的内存(7.2 in )是spark.storage.memoryFraction,默认情况下是0.6。至于您丢失的执行器,您应该查看YARN资源管理器日志。
发布于 2015-02-06 17:55:06
yarn.nodemanager.resource.memory-mb 是否设置正确。根据我对您的集群的理解,它应该设置为 14GB。这个设置负责让 YARN 知道它可以在这个特定节点上使用多少内存--num-executors是为了在集群上执行而启动的纱线容器的数量。您指定了10个容器,每个容器有14‘t的RAM,但是您的集群上没有这么多资源!其次,指定--master yarn-cluster,这意味着Spark驱动程序将在需要单独容器的YARN应用程序主机内运行。yarn-cluster 替换为 yarn-client)并检查它是如何启动的,检查 WebUI 和 JVMs 已启动发布于 2015-10-28 12:55:22
因为YARN“认为”它有70 on (14GBx5),并不意味着在运行时集群上有70 on的可用空间。您可以运行其他Hadoop组件(hive、HBase、flume、solr或您自己的应用程序等)。这会消耗内存。因此,YARN所做的运行时决策是基于当前可用的内容--它只有52 to (3x14 To)可用。顺便说一句,GB数字是近似值,因为它实际上是按1024MB / GB...so计算的,您将看到小数。
使用nmon或top查看每个节点上还有哪些内存在使用。
https://stackoverflow.com/questions/28343788
复制相似问题