YARN火花的性能问题

时间:2015-02-05 12:18:29

标签: apache-spark yarn

我们正试图在纱线上运行我们的火花簇。与独立模式相比,我们遇到了一些性能问题。

我们有一个包含5个节点的集群,每个节点具有16GB RAM和8个核心。我们在yarn-site.xml中将最小容器大小配置为3GB,最大为14GB。当将作业提交到纱线群集时,我们提供执行者数量= 10,执行者的内存= 14 GB。根据我的理解,我们的工作应该分配4个14GB的容器。但是火花UI只显示了3个容量为7.2GB的容器。

我们无法确保分配给它的容器编号和资源。与独立模式相比,这会导致不利的性能。

你能否指出如何优化纱线性能?

这是我用来提交作业的命令:

$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_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的屏幕截图。 enter image description here Spark UI Screenshot![][1]

3 个答案:

答案 0 :(得分:3)

您在SparkUI中看到的内存(7.2GB)是spark.storage.memoryFraction,默认情况下为0.6。至于丢失的执行程序,您应该查看YARN资源管理器日志。

答案 1 :(得分:1)

  1. 使用yarn-site.xml检查yarn.nodemanager.resource.memory-mb是否设置正确。在我对您的群集的理解中,它应该设置为14GB。此设置负责让YARN知道它可以在此特定节点上使用多少内存
  2. 如果你设置了这个,你有5台运行YARN NodeManager的服务器,那么你的作业提交命令是错误的。首先,--num-executors是将在群集上执行的YARN容器的数量。您指定10个容器,每个容器有14GB RAM,但您的群集上没有这么多资源!其次,指定--master yarn-cluster,这意味着Spark Driver将在需要单独容器的YARN Application Master内部运行。
  3. 在我看来,它显示了3个容器,因为在群集中的5个节点中,只有4个节点运行YARN NodeManager +您请求为每个容器分配14GB,因此YARN首先启动Application Master,然后轮询NM对于可用资源,并看到它只能启动3个容器。关于堆大小你看,在启动Spark之后找到它的JVM容器并查看它们的开始参数 - 你应该在一行中有许多-Xmx标志 - 一个正确而一个错误,你应该在配置文件中找到它的来源(Hadoop)或火花)
  4. 在向集群提交应用程序之前,使用相同的设置启动spark-shell(将yarn-cluster替换为yarn-client)并检查其启动方式,检查WebUI和JVM是否已启动

答案 2 :(得分:0)

仅仅因为YARN“认为”它有70GB(14GBx5),并不意味着在运行时集群上有70GB可用。您可能正在运行消耗内存的其他Hadoop组件(hive,HBase,flume,solr或您自己的应用程序等)。因此,YARN的运行时决定是基于当前可用的 - 并且它只有52GB(3x14GB)可用。顺便说一句,GB数字是近似的,因为它实际上计算为每GB 1024MB ......所以你会看到小数。

使用nmon或top查看每个节点上还有哪些内存使用内存。